Ubuntu PostgreSQL集群搭建实践
Ubuntu PostgreSQL集群搭建实践(以物理流复制+repmgr为例)
PostgreSQL集群通过主从复制实现高可用和读写分离,repmgr作为集群管理工具可自动化故障转移。以下是在Ubuntu系统上搭建PostgreSQL物理流复制集群的详细步骤:
一、环境准备
1. 基础环境
- 操作系统:Ubuntu 22.04/24.04 LTS(需开启SSH服务)
- 节点规划(以3节点为例):
节点角色 主机名/IP 说明 主库 pg-master
负责写操作,初始集群 从库1 pg-standby1
同步主库数据 从库2 pg-standby2
同步主库数据 - 网络要求:所有节点间网络互通,关闭防火墙或开放PostgreSQL端口(默认5432)。
2. 安装PostgreSQL
在所有节点执行以下命令,安装最新稳定版PostgreSQL及contrib工具(包含实用脚本):
sudo apt update
sudo apt install -y postgresql postgresql-contrib
安装完成后,默认会创建postgres
系统用户和/var/lib/postgresql/<
version>
/main
数据目录。
二、配置主库(pg-master)
1. 修改PostgreSQL核心配置
编辑主库配置文件(路径:/etc/postgresql/<
version>
/main/postgresql.conf
),调整以下参数:
# 允许远程连接
listen_addresses = '*'
# 设置WAL日志级别(物理复制必需)
wal_level = replica
# 允许的最大WAL发送进程数(从库数量+1)
max_wal_senders = 10
# 保留WAL日志文件的最小大小(避免从库滞后时日志被删除)
wal_keep_size = 1GB
# 开启热备模式(从库可执行查询)
hot_standby = on
2. 配置客户端认证
编辑pg_hba.conf
(路径:/etc/postgresql/<
version>
/main/pg_hba.conf
),添加复制用户和普通用户的访问规则:
# 允许从库通过复制连接(IP替换为从库实际IP)
host replication replicator pg-standby1/32 md5
host replication replicator pg-standby2/32 md5
# 允许所有客户端连接(生产环境建议限制IP段)
host all all 0.0.0.0/0 scram-sha-256
3. 重启PostgreSQL服务
sudo systemctl restart postgresql
4. 创建复制用户
切换至postgres
用户,执行SQL创建专用于复制的用户(密码强度需符合要求):
sudo -u postgres psql
CREATE USER replicator WITH REPLICATION LOGIN PASSWORD 'YourStrongPassword123!';
\q
5. 创建repmgr所需数据库和用户
repmgr用于管理集群状态,需创建专用数据库和用户:
sudo -u postgres psql
CREATE DATABASE repmgr;
CREATE USER repmgr WITH SUPERUSER REPLICATION PASSWORD 'YourRepmgrPassword123!';
ALTER USER repmgr SET search_path TO repmgr, "$user", public;
\q
三、配置从库(pg-standby1/pg-standby2)
1. 停止PostgreSQL服务并清空数据目录
sudo systemctl stop postgresql
sudo rm -rf /var/lib/postgresql/<
version>
/main/*
2. 使用pg_basebackup拉取主库数据
通过pg_basebackup
工具从主库同步数据(需替换主库IP、用户名和密码):
pg_basebackup -h pg-master -D /var/lib/postgresql/<
version>
/main \
-U replicator -P -R --wal-method=stream
-R
:自动创建standby.signal
文件(标识从库)和postgresql.auto.conf
(包含主库连接信息)。--wal-method=stream
:实时流式传输WAL日志,避免数据丢失。
3. 验证从库配置
检查从库数据目录下的postgresql.auto.conf
,应包含主库连接信息:
primary_conninfo = 'host=pg-master port=5432 user=replicator password=YourStrongPassword123!'
4. 启动从库服务
sudo systemctl start postgresql
5. 验证复制状态
切换至postgres
用户,执行SQL查看从库状态:
sudo -u postgres psql
SELECT * FROM pg_stat_replication;
若返回结果包含主库的WAL发送进程信息,则说明复制成功。
四、部署repmgr集群管理
1. 在所有节点安装repmgr
sudo apt install -y repmgr
2. 配置主库的repmgr
编辑主库的repmgr配置文件(路径:/etc/repmgr/<
version>
/repmgr.conf
):
node_id=1
node_name='pg-master'
conninfo='host=pg-master user=repmgr dbname=repmgr'
data_directory='/var/lib/postgresql/<
version>
/main'
log_level=INFO
3. 初始化主库集群
在主库上执行以下命令,注册主库到repmgr集群:
sudo -u postgres repmgr -f /etc/repmgr/<
version>
/repmgr.conf primary register
4. 配置从库的repmgr
编辑从库的repmgr配置文件(以pg-standby1
为例):
node_id=2
node_name='pg-standby1'
conninfo='host=pg-standby1 user=repmgr dbname=repmgr'
data_directory='/var/lib/postgresql/<
version>
/main'
failover=automatic
promote_command='repmgr standby promote -f /etc/repmgr/<
version>
/repmgr.conf --log-to-file'
follow_command='repmgr standby follow -f /etc/repmgr/<
version>
/repmgr.conf --log-to-file --upstream-node-id=%n'
5. 注册从库到集群
在从库上执行以下命令,将自身注册到主库集群:
sudo -u postgres repmgr -f /etc/repmgr/<
version>
/repmgr.conf standby register
6. 启动repmgr守护进程
在所有节点上启动repmgr服务,用于监控集群状态:
sudo systemctl enable repmgrd
sudo systemctl start repmgrd
7. 验证集群状态
在主库上执行以下命令,查看集群节点信息:
sudo -u postgres repmgr -f /etc/repmgr/<
version>
/repmgr.conf cluster show
应返回类似以下结果,显示主库和从库的状态:
ID | Name | Role | Status | Upstream | Location | Priority | Timeline | Connection String
----+-------------+---------+-----------+----------+----------+----------+----------+---------------------------------
1 | pg-master | primary | * running | | default | 100 | 1 | host=pg-master user=repmgr dbname=repmgr
2 | pg-standby1 | standby | running | 1 | default | 100 | 1 | host=pg-standby1 user=repmgr dbname=repmgr
五、测试故障转移
1. 模拟主库故障
停止主库的PostgreSQL服务:
sudo systemctl stop postgresql
2. 触发故障转移
在从库上执行以下命令,手动触发故障转移(自动故障转移需配置repmgr的failover=automatic
):
sudo -u postgres repmgr -f /etc/repmgr/<
version>
/repmgr.conf standby promote
3. 验证新主库状态
在新主库(原从库)上执行以下命令,确认其角色已切换:
sudo -u postgres repmgr -f /etc/repmgr/<
version>
/repmgr.conf cluster show
应显示原从库已成为主库,其他从库会自动跟随。
4. 恢复原主库(可选)
若原主库恢复,可将其重新注册为从库:
sudo systemctl start postgresql
sudo -u postgres repmgr -f /etc/repmgr/<
version>
/repmgr.conf standby register
注意事项
- 版本一致性:所有节点的PostgreSQL和repmgr版本需保持一致,避免兼容性问题。
- 数据同步:定期备份集群数据,建议使用
pg_basebackup
或pgBackRest
工具。 - 监控告警:通过
repmgr
的log_level=DEBUG
或第三方工具(如Prometheus+Granafa)监控集群状态。 - 安全加固:禁用
trust
认证方式,使用scram-sha-256
加密密码;限制客户端IP访问范围。
通过以上步骤,可在Ubuntu系统上搭建高可用的PostgreSQL物理流复制集群,结合repmgr实现自动化故障转移,保障业务连续性。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: Ubuntu PostgreSQL集群搭建实践
本文地址: https://pptw.com/jishu/722105.html