PostgreSQL 主从集群一键部署工具
目是一个 Python 自动化运维脚本,用于快速部署 PostgreSQL 数据库的单机实例或一主多从流复制集群。
它完全兼容原 Shell 脚本的所有配置逻辑,并扩展了以下能力:
- 支持 交互式输入 配置参数
- 支持 Excel 配置模板,实现多集群批量部署
- 自动完成系统环境检查、依赖安装、SSH 免密配置、编译安装、参数调优、服务注册、备份脚本生成等全流程
- 内置详细的日志记录,便于故障排查
适用场景:开发测试环境、生产环境快速搭建 PG 集群,尤其适合需要批量部署多套集群的运维场景。
功能特性
- ✅ 单机部署 —— 快速安装单节点 PostgreSQL
- ✅ 主从部署 —— 一键搭建一主多从流复制集群(支持异步/同步)
- ✅ 批量部署 —— 通过 Excel 模板配置多套集群,循环自动化部署
- ✅ 交互式配置 —— 部署前可自定义 SSH 端口、PG 端口、密码等
- ✅ 自动环境优化 —— 关闭 SELinux/防火墙、配置本地 yum 源、优化 sysctl/limits
- ✅ 编译安装 PG —— 从源码包编译(支持 14.x/15.x/16.x 等主流版本)
- ✅ 完整主从配置 —— 自动创建复制用户、配置 pg_hba.conf、postgresql.conf、生成 standby.signal
- ✅ 内置运维工具 —— 自动生成逻辑备份脚本(pg_dump)和 crontab 任务
- ✅ 安全加固 —— 创建只读巡检用户
zyjc_read,支持业务库test - ✅ 彩色终端输出 —— 清晰展示部署进度和结果
- ✅ 详细日志 —— 所有操作记录到
/var/log/pg_deploy/,便于排查
系统要求
| 项目 | 要求 |
|---|---|
| 操作系统 | CentOS 7 / RHEL 7 及以上(支持其他 RPM 系发行版) |
| Python | 3.6+(推荐 3.8+) |
| 网络 | 所有节点之间网络互通,SSH 端口开放 |
| 用户权限 | 必须使用 root 用户执行(脚本内部会创建系统用户和目录) |
| 依赖工具 | ssh、scp、tar、lz4(脚本会自动尝试安装缺失命令) |
快速开始
1. 克隆仓库
git clone https://github.com/Zhh9126/pgclusterinstall.git
cd pgclusterinstall
2. 准备 PostgreSQL 源码包
从 PostgreSQL 官网 下载对应版本的源码包(如 postgresql-14.12.tar.gz),放置在执行脚本的本地机器上(脚本会自动上传到各节点)。路径可在部署时指定。
3. 安装 Python 依赖
脚本会自动检测并尝试安装缺失的模块(通过 pip),也可手动安装:
pip3 install paramiko openpyxl colorama
国内用户可添加镜像加速:
pip3 install paramiko openpyxl colorama -i https://pypi.tuna.tsinghua.edu.cn/simple
4. 执行脚本
chmod +x main.py
./main.py
然后根据交互菜单选择功能即可。
使用指南
交互式菜单
运行 ./main.py 后,将显示如下菜单:
==================================================
PG数据库主从集群搭建工具 V1.0
==================================================
1. 单机部署(单节点PG安装)
2. 主从部署(一主多从流复制)
3. 创建配置模板(Excel格式)
4. 批量部署(从Excel读取配置)
5. 退出工具
==================================================
输入对应数字即可执行相应功能。
单机部署
- 选择
1 - 根据提示输入 SSH 密码、PG 端口、PG 密码、复制用户密码、源码包路径、主库 IP 等
- 脚本将自动完成所有步骤,最终输出部署成功信息和数据库访问凭证
主从部署
- 选择
2 - 输入 SSH 密码、PG 端口、PG 密码、复制用户密码、源码包路径
- 输入主库 IP 和从库 IP(多个用逗号分隔,如
192.168.1.10,192.168.1.11) - 脚本将依次:
- 部署主库(单机流程)
- 配置所有节点 SSH 互免密
- 为每个从库完成基础环境、依赖、编译安装
- 配置主库流复制参数并创建复制用户
- 配置每个从库,执行
pg_basebackup并启动为 standby - 验证主从复制状态
批量部署
- 先选择
3创建 Excel 配置模板(pg_cluster_config.xlsx) - 编辑模板,填写各集群的参数(主库 IP、从库列表、密码、版本、源码包路径等)
- 选择
4,输入模板路径,脚本将读取并依次部署每一套集群
📄 模板中包含示例数据,请确保 复制用户密码 列不为空(否则复制会失败)。
配置模板(Excel)
模板文件包含两个工作表:
- PG集群配置:填写集群参数,每行一套集群
- 使用说明:字段含义参考
| 列名 | 说明 | 示例 |
|---|---|---|
| 集群名称 | 标识名称 | cluster_1 |
| 主库IP | 主库 IP 地址 | 192.168.59.141 |
| 从库IP列表(逗号分隔) | 多个 IP 用英文逗号分隔 | 192.168.59.136,192.168.59.137 |
| SSH用户 | SSH 用户名 | root |
| SSH密码 | SSH 密码 | 123123 |
| SSH端口 | SSH 端口 | 22 |
| PG端口 | 数据库端口 | 5785 |
| PG版本 | 版本号(会自动从包名提取) | 14.12 |
| PG基础路径 | 安装根目录 | /pgdb |
| PG密码 | postgres 用户密码 | 123456 |
| 复制用户密码 | 必须填写 | postgres |
| PG安装包路径 | 本地源码包绝对路径 | /root/postgresql-14.12.tar.gz |
| 防火墙端口(逗号分隔) | 开放端口 | 22,5785 |
可配合 Excel 的批量填充功能,快速生成大量集群配置。
日志与调试
- 操作日志:所有输出均自动保存到
/var/log/pg_deploy/pg_deploy_<时间戳>.log - 主机日志:每个 SSH 会话的命令执行细节单独记录在
/var/log/pg_deploy/<host>_<时间戳>.log - 若部署失败,可查看日志定位问题(如
tail -f /var/log/pg_deploy/*.log)
常见问题
Q1: 执行时报 No module named paramiko
A: 运行 pip3 install paramiko,或使用脚本自动安装功能(需联网)。
Q2: pg_basebackup 失败,提示 could not connect to server
A: 检查主库是否正常运行(systemctl status postgres),确认复制用户已创建,pg_hba.conf 允许从库 IP 连接,网络连通且密码正确。
Q3: 从库启动后一直显示 recovery is in progress,但复制未同步
A: 查看从库日志(/pgdb/data/log/),通常是因为 primary_conninfo 配置错误。检查 postgresql.auto.conf 中的密码和主机 IP 是否正确。
Q4: 如何修改默认的 PG 数据目录?
A: 修改脚本中 DEFAULT_CONFIG 字典的 PG_BASE_PATH 和 PG_DATA_PATH,或在交互输入时指定。
Q5: 脚本支持其他 Linux 发行版吗?
A: 目前主要适配 CentOS/RHEL 系列。若需支持 Debian/Ubuntu,需要调整包管理命令(apt)和部分路径,欢迎提交 PR。
许可证
本项目采用 MIT License 进行许可。您可以自由使用、修改和分发,但需保留版权声明。
Happy Deploying! 🎉
---
## 建议的后续操作
1. **将上述内容复制到仓库的 `README.md` 中**,提交并推送。
2. **创建 `LICENSE` 文件**(MIT 许可证),与 README 中的许可证声明对应。
3. **补充 `.gitignore`**,排除 `*.pyc`、`__pycache__`、`*.xlsx` 等临时文件。
4. 如果后续有版本规划,可以在仓库中创建 `Releases` 并打 tag。更多推荐



所有评论(0)