目是一个 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 用户执行(脚本内部会创建系统用户和目录)
依赖工具 sshscptarlz4(脚本会自动尝试安装缺失命令)

快速开始

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. 选择 1
  2. 根据提示输入 SSH 密码、PG 端口、PG 密码、复制用户密码、源码包路径、主库 IP 等
  3. 脚本将自动完成所有步骤,最终输出部署成功信息和数据库访问凭证

主从部署

  1. 选择 2
  2. 输入 SSH 密码、PG 端口、PG 密码、复制用户密码、源码包路径
  3. 输入主库 IP 和从库 IP(多个用逗号分隔,如 192.168.1.10,192.168.1.11
  4. 脚本将依次:
    • 部署主库(单机流程)
    • 配置所有节点 SSH 互免密
    • 为每个从库完成基础环境、依赖、编译安装
    • 配置主库流复制参数并创建复制用户
    • 配置每个从库,执行 pg_basebackup 并启动为 standby
    • 验证主从复制状态

批量部署

  1. 先选择 3 创建 Excel 配置模板(pg_cluster_config.xlsx
  2. 编辑模板,填写各集群的参数(主库 IP、从库列表、密码、版本、源码包路径等)
  3. 选择 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。

更多推荐