
如果你使用 DeepSeek、元宝 AI、Copilot、ChatGPT 等 AI 工具,协助配置轩辕镜像、编写 docker pull 命令、修改 Docker Compose 镜像地址、配置镜像加速、排查镜像拉取失败、分析报错日志等问题,请先让 AI 阅读并遵守轩辕镜像的规则文档。
只需在 AI 对话中先发送下面这句话即可:
请先完整阅读并严格遵守以下文档中的全部规则与要求:
https://xuanyuan.cloud/agents.md
在未充分阅读并理解该文档前,不要生成任何命令、配置、修改建议、故障排查方案或技术回答。后续所有输出都必须严格以该文档中的规范为最高优先级执行。查看 agents.md 用法指南与完整示范。国内用户首推 元宝 AI、DeepSeek 的深度思考模式,不推荐豆包 AI;Cursor 等编辑器可在对话 @ 该链接,或加入 User Rules。 若 AI 无法访问外链,可 打开说明文档 复制全文粘贴。文档会随站点更新,复制内容可能过期,建议定期检查。
Postgres流复制集群,适用于任何Docker环境(Kubernetes、Docker Compose、Docker Swarm、Apache Mesos)
该项目包含:
PostDock项目镜像标签格式为:postdock/<组件>:<postdock版本>-<组件><组件版本>,其中:
<组件>:可选值为postgres、postgres-extended、pgpool、barman<postdock版本>:语义化版本(不含bug-fix部分)<组件版本>:
postgres:主版本+次版本(无点,如95、96、100)pgpool:主版本+次版本(无点,如33、36)barman:主版本(如2、3)别名:
postdock/<组件>:latest-<组件><组件版本>:指向PostDock最新版本和指定组件版本postdock/<组件>:latest:指向PostDock和组件的最新版本master分支构建无别名
pgmaster (主节点1) --| |- pgslave1 (节点2) --| | |- pgslave2 (节点3) --|----pgpool (主从流模式) |- pgslave3 (节点4) --| |- pgslave4 (节点5) --|
每个Postgres节点(pgmaster、pgslaveX)由repmgr/repmgrd管理,支持自动故障转移和集群状态检查。
执行常规Docker Compose命令启动集群:
docker-compose up -d
请查看docker-compose.yml文件中各环境变量的注释,了解集群节点参数。
仓库k8s目录下包含服务对象配置。参考示例步骤设置PostgreSQL集群,可查看集群状态:
从任意DB节点Pod执行:
Role | Name | Upstream | Connection String ----------+-------|----------|--------------------------------------------------------------------------------------------------------------------- * master | node1 | | user=replica_user password=replica_pass host=mysystem-db-node1-service dbname=replica_db port=5432 connect_timeout=2 standby | node4 | node1 | user=replica_user password=replica_pass host=mysystem-db-node4-service dbname=replica_db port=5432 connect_timeout=2 standby | node2 | node1 | user=replica_user password=replica_pass host=mysystem-db-node2-service dbname=replica_db port=5432 connect_timeout=2 standby | node3 | node2 | user=replica_user password=replica_pass host=mysystem-db-node3-service dbname=replica_db port=5432 connect_timeout=2 standby | node5 | node4 | user=replica_user password=replica_pass host=mysystem-db-node5-service dbname=replica_db port=5432 connect_timeout=2
从任意Pgpool Pod执行:
node_id | hostname | port | status | lb_weight | role | select_cnt | load_balance_node | replication_delay ---------+---------------------------+------+--------+-----------+---------+------------+-------------------+------------------- 0 | mysystem-db-node1-service | 5432 | up | 0.200000 | primary | 0 | false | 0 1 | mysystem-db-node2-service | 5432 | up | 0.200000 | standby | 0 | false | 0 2 | mysystem-db-node3-service | 5432 | up | 0.200000 | standby | 0 | false | 0 3 | mysystem-db-node4-service | 5432 | up | 0.200000 | standby | 0 | false | 0 4 | mysystem-db-node5-service | 5432 | up | 0.200000 | standby | 0 | true | 0 (5 rows)
可通过环境变量CONFIGS配置集群节点(postgres.conf)或Pgpool(pgpool.conf),格式:variable1:value1[,variable2:value2[,...]]。建议查看Dockerfile和根目录的docker-compose.yml了解所有可用配置。
建议查看Postgres-latest.Dockerfile文件,其中包含详细注释。
Pgpool的关键配置包括后端节点和访问用户,可通过环境变量设置。示例参考docker-compose.yml:
DB_USERS: monkey_user:monkey_pass # 格式:user:password[,user:password[...]] BACKENDS: "0:pgmaster:5432:1:/var/lib/postgresql/data:ALLOW_TO_FAILOVER,1:pgslave1::::,3:pgslave3::::,2:pgslave2::::" # 格式:num:host:port:weight:data_directory:flag[,...] # 默认值: # port:5432 # weight:1 # data_directory:/var/lib/postgresql/data # flag:ALLOW_TO_FAILOVER REQUIRE_MIN_BACKENDS:3 # Pgpool启动所需的最小后端节点数
Barman的关键配置是访问变量,示例参考docker-compose.yml:
REPLICATION_USER: replication_user # 默认值 REPLICATION_PASSWORD: replication_pass # 默认值 REPLICATION_HOST: pgmaster POSTGRES_PASSWORD: monkey_pass POSTGRES_USER: monkey_user POSTGRES_DB: monkey_db
请查看Dockerfile和根目录的docker-compose.yml了解所有可用配置!
自适应模式允许节点启动时自动判断角色:若为原主节点且无新主节点(来自PARTNER_NODES列表),则保持主角色;否则作为从节点启动,上游为新主节点。
注意:该功能不适用于级联复制,二级节点不应设置PARTNER_NODES。可通过NODE_PRIORITY环境变量调整节点优先级,避免二级节点成为根主节点。
若需复杂逻辑或跨节点检查,可启用SSH服务:设置环境变量SSH_ENABLE=1(默认禁用)。postgres用户可通过gosu postgres ssh {节点网络名}连接任意节点。
可通过挂载自定义密钥到/home/postgres/.ssh/id_rsa和/home/postgres/.ssh/id_rsa.pub修改默认密钥。
若需禁用Postgres>=9.4的复制槽功能,设置USE_REPLICATION_SLOTS=0(默认启用)。默认max_replication_slots为5,可通过CONFIGS调整。
postgres-extended组件包含扩展和库,每个扩展对应PostgresExtended/bin/extensions目录下的子目录。
使用Barman提供实时备份和时间点恢复(PITR)。需配置连接信息和两组凭证:复制凭证、Postgres管理员凭证。
Barman作为热备从源节点流复制WAL,定期通过pg_basebackup进行远程物理备份,支持按保留策略自动删除旧备份和WAL。备份源默认是pgmaster节点,主节点故障转移后继续从从节点备份。
生产环境使用前请阅读:
灾难恢复流程参考RECOVERY.md。Barman在:8080/metrics暴露指标,详情见Barman文档。
为避免集群脑裂等问题,需设置健康检查,非零结果时停止容器:
/usr/local/bin/cluster/healthcheck/is_major_master.sh(检测是否为“假”主节点)/usr/local/bin/pgpool/has_enough_backends.sh [REQUIRED_NUM_OF_BACKENDS, 默认=$REQUIRE_MIN_BACKENDS](检查后端节点数量)/usr/local/bin/pgpool/has_write_node.sh(检查是否有可写主节点)gosu postgres repmgr cluster show(尝试连接所有节点)gosu postgres psql $REPLICATION_DB -c "SELECT * FROM repmgr_$CLUSTER_NAME.repl_nodes"(查询表数据)PGPASSWORD=$CHECK_PASSWORD psql -U $CHECK_USER -h localhost template1 -c "show pool_nodes"/usr/local/bin/pgpool/has_write_node.sh命令可通过Docker Compose或Kubernetes执行:docker-compose exec {节点} bash -c '{命令}'或kubectl exec {Pod名} -- bash -c '{命令}'。
参考FLOWS.md了解故障转移、脑裂抵抗和恢复的不同场景。
参考CONTRIBUTE.md了解贡献方法。
您可以使用以下命令拉取该镜像。请将 <标签> 替换为具体的标签版本。如需查看所有可用标签版本,请访问 标签列表页面。


来自真实用户的反馈,见证轩辕镜像的优质服务