Ubuntu PostgreSQL集群搭建方法
导读: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 端口(或内网互通)。
- 主库配置
- 安装 sudo apt update & & sudo apt install -y postgresql postgresql-contrib
- 修改 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 = ‘*’
- 创建复制用户并授权 sudo -u postgres psql -c “CREATE ROLE repl WITH REPLICATION LOGIN PASSWORD ‘replpass’; ”
- 配置 pg_hba.conf(允许从库复制) host replication all 192.168.1.11/32 md5
- 重启主库 sudo systemctl restart postgresql
- 从库配置
- 停止并清空数据目录 sudo systemctl stop postgresql rm -rf /var/lib/postgresql/15/main/*
- 拉取主库基础备份(会自动创建 standby.signal 与 primary_conninfo) pg_basebackup -h 192.168.1.10 -D /var/lib/postgresql/15/main -U repl -P -R
- 启动从库 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 按负载与连接数调优(避免过大导致内存压力)
- postgresql.conf:
- 认证与安全
- 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
