首页主机资讯Ubuntu PostgreSQL集群搭建方法

Ubuntu PostgreSQL集群搭建方法

时间2025-11-19 11:26:03发布访客分类主机资讯浏览516
导读:Ubuntu 上搭建 PostgreSQL 集群的可落地方案 一、方案选型与架构 流复制一主多从(基础高可用):基于 PostgreSQL 原生 Streaming Replication,主库可读写,从库只读,部署与维护简单,适合大多数...

Ubuntu 上搭建 PostgreSQL 集群的可落地方案

一、方案选型与架构

  • 流复制一主多从(基础高可用):基于 PostgreSQL 原生 Streaming Replication,主库可读写,从库只读,部署与维护简单,适合大多数业务起步与中小规模场景。
  • repmgr 管理的高可用集群:在流复制之上引入 repmgr 做节点注册、监控、切换与故障转移,提供 CLI 与守护进程,便于自动化运维与快速故障恢复。
  • Patroni + etcd + HAProxy/Keepalived(企业级自动故障转移):由 Patroni 管理数据库实例生命周期与选主,etcd 保存集群状态,HAProxy/Keepalived 提供统一的读写分离入口与 VIP 漂移,适合对高可用与自动化要求较高的生产环境。

二、方案一 流复制一主多从(手动切换)

  • 环境准备
    • 节点示例:主库 192.168.1.10,从库 192.168.1.11(可扩展多从)。
    • 建议 Ubuntu 22.04/24.04,PostgreSQL 14/15/16 保持一致;同步系统时间(如 NTP),放通 5432 端口(或内网互通)。
  • 主库配置
    1. 安装 sudo apt update & & sudo apt install -y postgresql postgresql-contrib
    2. 修改 postgresql.conf(路径随版本可能为 /etc/postgresql/15/main/ 或 /var/lib/postgresql/15/main/) wal_level = replica max_wal_senders = 10 wal_keep_size = 128MB hot_standby = on listen_addresses = ‘*’
    3. 创建复制用户并授权 sudo -u postgres psql -c “CREATE ROLE repl WITH REPLICATION LOGIN PASSWORD ‘replpass’; ”
    4. 配置 pg_hba.conf(允许从库复制) host replication all 192.168.1.11/32 md5
    5. 重启主库 sudo systemctl restart postgresql
  • 从库配置
    1. 停止并清空数据目录 sudo systemctl stop postgresql rm -rf /var/lib/postgresql/15/main/*
    2. 拉取主库基础备份(会自动创建 standby.signal 与 primary_conninfo) pg_basebackup -h 192.168.1.10 -D /var/lib/postgresql/15/main -U repl -P -R
    3. 启动从库 sudo systemctl start postgresql
  • 验证
    • 主库:sudo -u postgres psql -c “SELECT pg_is_in_recovery(); ” 应返回 f
    • 从库:sudo -u postgres psql -c “SELECT pg_is_in_recovery(); ” 应返回 t
    • 在主库写入数据,在从库验证是否同步。

三、方案二 repmgr 高可用集群(自动故障转移)

  • 安装组件
    • 所有节点安装 PostgreSQL 与 repmgr(示例为 14/15/16): sudo apt update & & sudo apt install -y postgresql postgresql-contrib sudo apt install -y repmgr # 或按发行版仓库/源码安装
  • 主库配置
    • 基本参数(同方案一):wal_level、max_wal_senders、hot_standby、listen_addresses 等。
    • 创建 repmgr 用户与库并授权: sudo -u postgres psql -c “CREATE USER repmgr WITH REPLICATION LOGIN PASSWORD ‘repmgrpass’; ” sudo -u postgres psql -c “CREATE DATABASE repmgr OWNER repmgr; ”
    • pg_hba.conf 增加: host replication repmgr 192.168.1.0/24 md5 host repmgr repmgr 192.168.1.0/24 md5
    • 修改 repmgr.conf(示例): node_id=1 node_name=‘pg01’ conninfo=‘host=192.168.1.10 user=repmgr dbname=repmgr password=repmgrpass’ data_directory=‘/var/lib/postgresql/14/main’ service_start_command=‘sudo systemctl start postgresql’ service_stop_command=‘sudo systemctl stop postgresql’
    • 注册主节点并启动守护进程: sudo -u postgres repmgr -f /etc/repmgr/14/repmgr.conf primary register repmgrd -f /etc/repmgr/14/repmgr.conf --daemonize
  • 从库配置
    • repmgr.conf(示例): node_id=2 node_name=‘pg02’ conninfo=‘host=192.168.1.11 user=repmgr dbname=repmgr password=repmgrpass’ data_directory=‘/var/lib/postgresql/14/main’
    • 克隆并注册为备库: sudo -u postgres repmgr -f /etc/repmgr/14/repmgr.conf standby clone sudo -u postgres repmgr -f /etc/repmgr/14/repmgr.conf standby register repmgrd -f /etc/repmgr/14/repmgr.conf --daemonize
  • 常用运维
    • 查看集群状态:repmgr -f /etc/repmgr/14/repmgr.conf cluster show
    • 手动切换主从:repmgr -f /etc/repmgr/14/repmgr.conf standby promote(在目标备库执行),其余备库执行 repmgr standby follow。

四、方案三 Patroni + etcd + HAProxy/Keepalived(企业级自动故障转移)

  • 组件与端口
    • Patroni(集群管理/选主)、etcd(分布式一致性存储)、HAProxy(读写分离与健康检查)、Keepalived(VIP 漂移);数据库 5432,Patroni REST API 8008,etcd 2379
  • 部署要点
    • 至少 3 节点 etcd 形成 quorum;数据库节点部署 Patroni(配置 etcd 连接、复制参数、故障策略等);在 2 个入口节点部署 HAProxy 与 Keepalived,对外暴露 VIP
    • HAProxy 示例片段(简化): listen postgres_write bind :5432 mode tcp option httpchk /master http-check expect status 200 server pg01 192.168.1.10:5432 check fall 3 rise 2 server pg02 192.168.1.11:5432 check fall 3 rise 2 backup listen postgres_read bind :5433 mode tcp balance roundrobin server pg01 192.168.1.10:5432 check server pg02 192.168.1.11:5432 check
    • 启动顺序建议:etcd → Patroni → HAProxy → Keepalived;通过 Patroni API 或 patronictl 查看/切换集群状态。

五、关键参数与运维要点

  • 基础参数建议
    • postgresql.conf:
      • wal_level = replica(或 logical,若需逻辑复制)
      • max_wal_senders ≥ 10(按从库数量与备份并发调整)
      • wal_keep_size = 128MB(或启用 WAL 归档与归档清理策略)
      • hot_standby = on(从库只读)
      • listen_addresses = ‘*’(按需限制网段)
      • shared_buffers ≈ 物理内存的 25%(如 16GB 内存可设 4GB)
      • work_mem 按负载与连接数调优(避免过大导致内存压力)
  • 认证与安全
    • pg_hba.conf 对复制用户与业务网段放行,使用 md5/ scram-sha-256;限制来源网段,避免 0.0.0.0/0 在生产环境开放。
  • 时间同步与网络
    • 启用 NTP/chrony 保证节点时间一致性;放通 5432(数据库)、8008(Patroni API)、2379(etcd)等端口。
  • 备份与恢复
    • 定期基础备份(如 pg_basebackup)与 WAL 归档;验证备份可恢复性;从库异常可重建:停库 → 清空数据目录 → pg_basebackup 拉取 → 启动。
  • 监控与切换
    • 流复制:监控复制延迟与从库恢复状态;repmgr/Patroni:监控节点健康、自动/手动切换、回切策略与最小可用备库数。

声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!


若转载请注明出处: Ubuntu PostgreSQL集群搭建方法
本文地址: https://pptw.com/jishu/750993.html
Ubuntu PostgreSQL扩展功能介绍 Ubuntu PostgreSQL数据迁移注意事项

游客 回复需填写必要信息