温馨提示×

Ubuntu下PostgreSQL集群搭建指南

小樊
44
2025-12-18 18:01:44
栏目: 云计算

Ubuntu 下 PostgreSQL 集群搭建指南

一 方案选型与适用场景

  • 原生流复制 Streaming Replication:一主多备,支持同步/异步复制,部署简单,适合高可用 + 读写分离
  • 逻辑复制 Logical Replication:表级复制,支持跨版本/跨库,适合迁移/分发/部分表同步
  • 自动化高可用:
    • Patroni + etcd/ZooKeeper:自动故障切换、弹性伸缩、REST API 与监控集成。
    • pg_repmgr:围绕流复制的集群管理工具,提供克隆/跟随/故障转移与守护进程。
    • Pgpool-II:连接池、读写分离、负载均衡与高可用中间件。
  • 分布式数据库:
    • Citus:PostgreSQL 扩展,实现自动分片 + 协调节点,适合大规模 OLAP/HTAP
    • Postgres-XL/XC:多组件架构(含 GTM/GTM-Proxy/Coordinator/Data Node),适合大规模 OLTP
  • 选型建议:
    • 以高可用与读写分离为主:优先选流复制 + Patroni/pg_repmgr
    • 需要跨库/跨版本/部分表同步:选逻辑复制
    • 需要水平扩展与透明分片:选Citus;若已有历史沉淀或特定需求,再考虑 Postgres-XL/XC

二 快速落地 一主一从流复制

  • 环境准备(示例):
    • 主库:192.168.22.131,备库:192.168.22.215,版本:PostgreSQL 14
  • 安装 PostgreSQL 14(两台机器):
    • 添加官方源并安装:
      • echo “deb https://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main” | sudo tee /etc/apt/sources.list.d/pgdg.list
      • wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -
      • sudo apt update && sudo apt install -y postgresql-14 postgresql-client-14
      • sudo systemctl start postgresql@14-main && sudo systemctl enable postgresql@14-main
  • 主库配置:
    • 创建复制用户:
      • sudo -u postgres psql -c “CREATE USER replicator WITH REPLICATION ENCRYPTED PASSWORD ‘StrongPass123’;”
    • 修改 /etc/postgresql/14/main/postgresql.conf:
      • listen_addresses = ‘*’
      • wal_level = replica
      • max_wal_senders = 10
      • max_replication_slots = 10(可选,强烈建议启用)
      • hot_standby = on
    • 修改 /etc/postgresql/14/main/pg_hba.conf(允许备库复制):
      • host replication replicator 192.168.22.215/32 md5
    • 重启主库:sudo systemctl restart postgresql@14-main
  • 备库配置:
    • 清空数据目录并拉取基础备份:
      • sudo systemctl stop postgresql@14-main
      • sudo -u postgres rm -rf /var/lib/postgresql/14/main/*
      • sudo -u postgres pg_basebackup -h 192.168.22.131 -U replicator -D /var/lib/postgresql/14/main -F p -X stream -v -R -P
    • 说明:-R 会自动在备库生成 standby.signal 与 primary_conninfo。
  • 验证:
    • 主库:sudo -u postgres psql -c “SELECT * FROM pg_stat_replication;”(应看到备库连接与状态)
    • 备库:sudo -u postgres psql -c “SELECT pg_is_in_recovery();”(应返回 t
  • 可选增强:
    • 启用同步复制(零数据丢失,性能下降):
      • 主库 postgresql.conf:synchronous_standby_names = ‘standby1’(备库名可在 recovery.conf 的 primary_slot_name 设置)
      • synchronous_commit = on
    • 使用复制槽避免 WAL 过早回收:
      • 主库:SELECT pg_create_physical_replication_slot(‘standby1_slot’);
      • 备库 recovery.conf/standby.signal 同级目录创建 standby.slot_name = ‘standby1_slot’。

三 自动化高可用与中间件

  • Patroni(推荐):
    • 组件:Patroni + etcd/ZooKeeper/Consul(DCS)。
    • 特性:自动故障切换、弹性伸缩、REST API、与 Ansible/K8s 友好。
    • 快速要点:
      • 安装:sudo apt install -y patroni
      • 配置 /etc/patroni.yml(定义 scope、etcd、bootstrap、postgresql 参数、HA 策略等)
      • 启动:patroni /etc/patroni.yml
      • 建议开启:use_pg_rewind、use_slots、ttl/loop_wait 等参数。
  • pg_repmgr:
    • 安装:sudo apt install -y postgresql--repmgr(或社区包)。
    • 主库:创建 repmgr 库与用户,配置 repmgr.conf(node_id、node_name、conninfo、data_directory)。
    • 备库:repmgr standby clone 拉取数据,repmgr standby follow 跟随;启动 repmgrd 守护进程实现自动故障转移。
  • Pgpool-II:
    • 作用:连接池、负载均衡、健康检查、自动故障转移(配合流复制)。
    • 部署:安装 pgpool2,配置后端节点与健康检查,启用 pgpool_hba.conf 与 pc.conf,建议与 Patroni/pg_repmgr 分工(Pgpool-II 负责连接与负载,Patroni/pg_repmgr 负责选主与切换)。

四 分布式与分片方案

  • Citus:
    • 特性:PostgreSQL 扩展,提供分布式表/引用表、协调节点、分片并行查询,对多租户与实时分析友好。
    • 部署:在协调节点与数据节点安装 Citus 扩展,使用 CREATE DISTRIBUTED TABLE 分布数据,结合复制与分片策略实现高可用与扩展。
  • Postgres-XL/XC:
    • 架构:包含 GTM(全局事务管理)/GTM-Proxy/Coordinator/Data Node
    • 特点:支持分布式事务与 SQL 解析分离,适合大规模 OLTP;部署与运维复杂度较高,需关注 GTM 单点与扩展策略。

五 运维与故障演练清单

  • 日常巡检:
    • 复制状态:SELECT * FROM pg_stat_replication;(检查 state、sent_lsn、write_lsn、flush_lsn、replay_lsn)
    • 备库恢复:SELECT pg_is_in_recovery();(t 表示在恢复)
    • 复制槽:SELECT * FROM pg_replication_slots;(确认 active、restart_lsn)
    • WAL 与空间:监控 pg_wal/ 目录与 archive_command 成功与否。
  • 安全加固:
    • 仅开放必要网段与账户;使用强口令/证书;限制 replication 权限;pg_hba.conf 采用最小权限原则。
  • 备份恢复:
    • 物理备份:pg_basebackup + WAL 归档(PITR);定期验证备份可恢复性。
    • 逻辑备份:pg_dump/pg_dumpall 用于迁移与部分对象恢复。
  • 切换与演练:
    • 计划内切换(switchover):主备角色平滑切换,验证应用无感。
    • 故障演练(failover):停主库或断网,验证 Patroni/pg_repmgr 自动切换与数据一致性;演练后复盘并修正参数(如超时、重试、slots、网络)。

0