| name | pg-deploy-cluster |
| description | 自动化部署 PostgreSQL 高可用集群:给定服务器清单、SSH/认证信息与集群要求(版本、插件、Patroni/repmgr、VIP/HAProxy、归档备份),完成安装、initdb、流复制配置、HA 软件部署,并在沙盒中执行 switchover/failover 切换测试,最终产出含连接信息、切换测试结果、已知风险的部署报告。触发场景包括:'部署 PG 集群'、'搭建 PostgreSQL 主从'、'帮我上 Patroni'、'帮我配 repmgr 高可用'、'搭建流复制'、'一键部署数据库高可用集群'、'做个 PG 故障切换测试'。即使用户只给了几台服务器 IP 说'帮我搭个 PG 高可用',也应触发本技能并主动追问缺失信息。 |
| tags | ["PostgreSQL","集群部署"] |
| platform | ["claude-code","cursor"] |
| author | digoal |
| version | 1.0.0 |
| license | GNU General Public License v2.0 |
| homepage | https://github.com/digoal/skills |
PostgreSQL 高可用集群自动化部署
给定多台服务器的连接方式与集群要求,端到端完成 PostgreSQL 物理流复制高可用集群的部署、Patroni/repmgr 配置、沙盒切换测试,并输出结构化 Markdown 部署报告。这是一项高风险、破坏性的运维操作技能——它会执行 initdb、pg_basebackup、服务启停等不可逆动作,因此本技能的核心不是"跑得快",而是"跑得稳、可回滚、可审计"。
前置要求
- 控制端(执行本技能的机器)能够以 SSH 方式免密或凭密码/密钥连接到所有目标节点(root 或有 sudo 权限的用户)。
- 目标节点操作系统为主流 Linux 发行版(Anolis OS 8/23、RHEL/CentOS、Ubuntu/Debian),本技能自动识别
dnf/yum/apt 并选择对应包管理器。
- 目标节点已开放或允许配置以下端口:PostgreSQL(默认 5432)、Patroni REST API(默认 8008)、etcd(2379/2380,若选择 Patroni)、HAProxy(若需要)。
- 所有密码类信息(数据库超级用户、复制用户、SSH 密码/私钥口令)只能通过环境变量或一次性交互输入传递,禁止写入脚本、命令行明文参数或版本控制文件;执行结束后立即从 shell 历史/环境中清理。
- 本技能不内置任何第三方下载源;所有软件均通过用户所在系统的官方/发行版仓库安装,不 curl/wget 未声明的 URL。
输入信息收集(Step 1)
在开始任何操作前,必须从用户处收集齐以下信息;缺失项主动追问,不得假设默认值直接执行破坏性操作(非破坏性的默认值,如目录路径,可以给出建议并请用户确认):
| 类别 | 必需信息 | 缺失时的处理 |
|---|
| 服务器清单 | 至少 2 台:IP/主机名、OS、SSH 端口、登录方式(密钥路径 或 密码环境变量名) | 必须追问,不可虚构 IP |
| 角色规划 | 哪台是初始主库、哪台是从库、是否有独立 etcd/witness 节点 | 追问,或建议默认(2 节点:主+从) |
| 数据库密码 | postgres 超级用户密码、replicator 复制用户密码 | 提示用户通过环境变量 PGSUPERPW / PGREPLPW 提供,绝不用明文入参 |
| 版本与插件 | PostgreSQL 主版本号;插件清单及版本 | 追问;给出该版本官方仓库是否支持所需插件的检查结果 |
| HA 方案 | Patroni 或 repmgr(二选一,需用户明确) | 追问,不擅自选择 |
| DCS/接入层 | Patroni 场景:etcd 单节点还是外部集群;是否需要 VIP/HAProxy | 追问;若只给 2 台又选 Patroni,必须明确提示"无第三方仲裁,脑裂风险"并要求用户确认接受 |
| 归档与备份 | WAL 归档目录、备份策略 | 若不提供,给出默认建议(本地 /pgwal/<ver>/archive + 每日 base backup)并请用户确认,而非静默采用 |
| 沙盒测试环境 | 用于 switchover/failover 测试的环境(可与生产相同或独立) | 追问;生产环境直接做 failover 测试前必须二次确认 |
信息收集完成后,必须先输出一份文字版部署计划(架构图 + 关键参数表),等待用户明确确认("确认部署"/"go"/同等表述)后才能进入 Step 2。这是本技能中第一个、也是最重要的破坏性操作确认点。
工作流程
Step 2:环境探测
对所有目标节点执行 scripts/00_probe_env.sh <host> <ssh_user> <ssh_port>(通过 SSH 免密或密钥执行,不接受明文密码作为参数)。该脚本检查:OS 版本/架构、CPU/内存/磁盘、NTP/chrony 时间同步状态、防火墙(firewalld/ufw/iptables)与 SELinux 状态、目标端口是否被占用。
将探测结果汇总为表格展示给用户;若发现风险项(如时间不同步超过 1 秒、磁盘剩余不足、SELinux enforcing 且未做策略适配),必须在继续前提示并给出处理建议,得到用户确认后再自动执行调整(如放通端口、创建 NTP 同步任务)。
Step 3:软件安装