Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
직접 명령은 검토 Prompt를 거치지 않습니다. 실행하기 전에 소스를 확인하세요.
npx skills add https://github.com/digoal/skills --skill pg-create-cluster명령은 한 줄로 유지됩니다. 복사하기 전에 가로로 스크롤해 전체 내용을 확인하세요.
로컬 사본을 원하시나요? SkillsMP에서 현재 제공할 수 있는 파일을 다운로드하세요.
SOC 직업 분류 기준
SKILL.md 표시 중
| name | pg-create-cluster |
| description | 创建 PostgreSQL 流复制集群;当用户想新建/部署 PG 流复制集群时使用 |
| when_to_use | 用户表达"建库/部署/创建 PostgreSQL/PG 集群/流复制"等意图 |
| contributor_type | enterprise |
| org_name | 中启乘数科技(杭州)科技有限公司 |
本 skill 通过同目录脚本 create_pg_sr_cluster.py 端到端驱动 CLup HTTP 接口,在已有在线主机上创建 PG 流复制集群(1 主 + N 备)。脚本负责登录、按主机匹配 PG 版本、preflight 校验、提交创建、轮询任务;你(Claude Code)负责对话式引导用户做选择并调用脚本。
http://127.0.0.1:8090(或 conf http_port);连远程用 --url http://IP:port 或 CLUP_URL。建库第一步要先问用户本地还是远程(见下文"建库第一步")。CLUP_USER/CLUP_PASS,或 --user/--pass。绝不写死。没有先问用户要。/opt/csu_pyenv/bin/python(自带 pycryptodome,脚本做密码加密依赖它)。libicui18n.so.60/libssl.so.1.1 而失败 —— 换装得对的主机或正确编译的 PG。hosts/vips/binpaths 把真实主机/VIP/版本给用户点选,而不是开放填空。开口第一件事就问:"这次连本地 CLup 还是远程?" —— 连接配置要先于凭据确定。
http://127.0.0.1:8090(或 conf http_port),命令不带 --url。--url 的值,必须给格式提示 —— 填 http://<IP>:<port>,例如 http://10.198.170.11:8090;不带末尾 /;端口一般 8090;写到 IP:port 为止,后面不要加 /api。拿到后后续每条脚本命令都加 --url <用户填的>(嫌每条都写就先 export CLUP_URL=<url>,之后命令省去 --url)。CLUP_USER/CLUP_PASS 或 --user/--pass)。hosts 选在线、agent 可达的)binpaths --host <主库IP> 看实际装的,如 16.10;整个集群同一版本,各节点都得装了)vips:它已用 CLup get_free_vip_list 排除被集群占用的、再用主机 IP 列表排除"是主机IP"的,直接给出可选 VIP;从末尾 recommended selectable VIPs 里挑一个,不会再撞占用/主机IP)--repl-user/--repl-pass)管理员账号/端口/os_user/os_uid/probe 配置缺省取模板(
template);setting_list 系统自动从get_init_db_conf按 PG 版本取(含listen_addresses='*'等,关键,见下),不要问用户。
命令里
--user <u> --pass <p>是凭据;连远程 CLup 还要加--url <url>(本地省略)。下面按本地写;远程时每条都加--url <url>,或先export CLUP_URL=<url>。
/opt/csu_pyenv/bin/python create_pg_sr_cluster.py --user <u> --pass <p> hosts
/opt/csu_pyenv/bin/python create_pg_sr_cluster.py --user <u> --pass <p> vips
/opt/csu_pyenv/bin/python create_pg_sr_cluster.py --user <u> --pass <p> binpaths --host <主库IP>
--wait 轮询到完成):
/opt/csu_pyenv/bin/python create_pg_sr_cluster.py --user <u> --pass <p> \
create --cluster-name <名> --primary <主库IP> --standby <备库IP1,IP2> \
--version <完整版本> --vip <VIP> --pool-id <池ID> --repl-pass <密码> --wait
成功打印 SUCCESS: cluster created (task N)。脚本内部: 登录 → 逐节点匹配 pg_bin_path → 取 setting_list(含 listen_addresses='*')→ preflight(目录空/端口/VIP)→ 组装 body(密码加密)→ 提交 → 轮询任务(state=1 成功、-1 失败)。| 子命令 | 作用 |
|---|---|
login | 验证登录 |
hosts | 列在线主机 |
vips | 列每池可选 VIP(空闲且非主机IP;末尾给 recommended)。可 --pool-id N 只看某池 |
binpaths --host IP | 列该主机 PG 路径+版本 |
template | 建库模板默认值 |
check --host IP --pgdata P [--port N] [--pool-id X --vip V] | preflight 校验 |
create ... | 建集群(--wait 轮询;端口/VIP 冲突会自动拦下不提交) |
task --task-id N | 查任务状态(0=进行中,1=成功,-1=失败) |
delete --cluster-id N | 完整拆除: 停所有 DB → 删数据目录 → 删集群 + 释放 VIP |
建库失败、想重新来 —— 先 delete 再重试。
delete --cluster-id N 会把该集群的 DB 全停掉、数据目录删掉、集群记录和 VIP 都清掉,干干净净可以重试。注意: 单独调 CLup 的 delete_cluster 只清表、不停 PG 不删数据;本 skill 的 delete 子命令已把 stop_db+delete_db(rm_pgdata)+delete_cluster 三步封装好,用它。
常见错误:
create_replication_user ... database not connected! → 99% 是 setting_list 问题(没 listen_addresses 导致新 PG 只听 localhost,CLup server 连不上)。本 skill 已自动从 get_init_db_conf 取 setting_list,正常不会再现;若改脚本时又复现,先查 setting_list 里有没有 listen_addresses='*'。error while loading shared libraries: libXXX.so(如 libicui18n.so.60 / libssl.so.1.1)→ 该主机的 PG 二进制是为别的 OS 版本编的(典型: EL8 的 PG 跑在 Rocky9)。换装对的 PG,或换一台 PG 编译正常的主机。The vip(X) is aready used by ... → VIP 被占。正常不该发生:vips 已用 get_free_vip_list 排除被占的、再排除主机IP。若仍撞上(两次 vips 之间被别处抢占),重跑 vips 换一个。port 5432 used on <host> → 端口被占(可能有没清掉的旧 PG)。换个 --port,或先 delete 掉占用它的集群。no pg_bin_path with version X → 某节点没装目标版本。跑 binpaths --host <ip> 看它实际装的,换版本或换主机。state=-1(失败) → 用 task --task-id N 拿状态;详细错误查 CLup 后端日志 /home/clup/clup-all/clup-server/logs/clup-server.log(搜 Connection refused/error)或任务日志接口。password authentication failed for user "postgres" → 别拿 CREATE BODY 顶层打印的 db_pass(如 XuMG5a13UrsgHiWFLVoMDoOOA)当登录密码,那是 to_db_text 的 AES 加密串,不是明文。实例真实密码 = 模板默认明文 postgres(= db_list 每节点那个 db_pass,也是没传 --db-pass 时的默认值)。连库用:
PGPASSWORD=postgres /usr/pgsql-14/bin/psql -h <VIP 或 主库IP> -U postgres
(验证复制:SELECT application_name,state,sync_state,sent_lsn,replay_lsn FROM pg_stat_replication;,备库 state=streaming 且 replay_lsn=sent_lsn 即健康。)clup_cluster.state=0 别误判为故障 → 现网 CLup 这版 clup_cluster.state 0 = 正常(库里所有健康集群都是 0);CLAUDE.md/cluster_state.so 写的 1=Normal 是逻辑 HA state,不是这个表的列。判健康看 clup_db.db_state=0(Running)+ 主备角色正确 + pg_stat_replication 在 streaming。--primary/--standby)。至少 2 台(1 主 1 备),建议 3 台(1 主 2 备)。create_vm_sr_cluster,留 v2)。主机不够时如实告诉用户。--pass 会出现在进程命令行,更推荐环境变量 CLUP_PASS。