Ubuntu PostgreSQL集群搭建步骤
导读:Ubuntu环境下PostgreSQL集群搭建步骤(以流复制+repmgr高可用为例) 1. 环境准备 1.1 节点规划 假设搭建1主2从+1见证节点的高可用集群,节点信息如下: 主节点:192.168.254.110(u24-pg-11...
Ubuntu环境下PostgreSQL集群搭建步骤(以流复制+repmgr高可用为例)
1. 环境准备
1.1 节点规划
假设搭建1主2从+1见证节点的高可用集群,节点信息如下:
- 主节点:192.168.254.110(u24-pg-110)
- 从节点:192.168.254.111(u24-pg-111)、192.168.254.112(u24-pg-112)
- 见证节点:192.168.254.113(u24-pg-113,用于仲裁,不存储数据)
1.2 系统配置
- 更新系统包:所有节点执行
sudo apt update & & sudo apt upgrade -y
。 - 配置hosts文件:在所有节点的
/etc/hosts
中添加节点映射:192.168.254.110 u24-pg-110 192.168.254.111 u24-pg-111 192.168.254.112 u24-pg-112 192.168.254.113 u24-pg-113
- 配置SSH免密登录:在主节点生成密钥并对所有节点分发:
su - postgres ssh-keygen -t rsa # 按回车生成默认密钥 ssh-copy-id u24-pg-110 # 依次复制到所有节点 ssh-copy-id u24-pg-111 ssh-copy-id u24-pg-112 ssh-copy-id u24-pg-113 # 测试免密登录 ssh u24-pg-110 hostname # 应返回u24-pg-110
1.3 安装PostgreSQL与repmgr
在所有节点执行以下命令安装PostgreSQL(以14为例)和repmgr工具:
sudo apt install -y postgresql postgresql-contrib
sudo apt install -y libcurl4-openssl-dev libjson-c-dev flex libselinux1-dev libzstd-dev liblz4-dev libxslt1-dev libxml2-dev libpam0g-dev libssl-dev libkrb5-dev zlib1g-dev libreadline-dev
tar -xf repmgr-5.5.0.tar.gz # 下载对应版本的repmgr源码
cd repmgr-5.5.0/
./configure
make
sudo make install
2. 主节点配置
2.1 修改PostgreSQL主配置文件
编辑/etc/postgresql/14/main/postgresql.conf
,调整以下参数:
listen_addresses = '*' # 允许所有IP连接
wal_level = replica # 启用WAL日志(流复制必需)
max_wal_senders = 10 # 允许的最大WAL发送进程数(从节点数量+1)
wal_keep_size = 128MB # 保留的WAL日志大小(确保从节点能拉取)
archive_mode = on # 开启归档(可选,用于备份)
archive_command = 'test ! -f /postgresql/arch/%f &
&
cp %p /postgresql/arch/%f' # 归档命令(可选)
hot_standby = on # 允许从节点处于热备状态(必需)
2.2 修改pg_hba.conf允许复制连接
编辑/etc/postgresql/14/main/pg_hba.conf
,添加以下规则:
# 允许从节点(111、112)连接复制
host replication replicator 192.168.254.111/32 md5
host replication replicator 192.168.254.112/32 md5
# 允许repmgr用户(所有节点)连接
host repmgr repmgr 192.168.254.0/24 trust
# 允许客户端连接(可选)
host all all 0.0.0.0/0 scram-sha-256
2.3 创建复制用户与repmgr数据库
切换到postgres用户,执行以下SQL:
su - postgres
psql
CREATE USER replicator WITH REPLICATION LOGIN PASSWORD 'StrongReplicatorPass123!';
CREATE DATABASE repmgr WITH OWNER=repmgr;
ALTER USER repmgr SET search_path TO repmgr, "$user", public;
\q
2.4 配置repmgr主节点
创建/etc/repmgr/14/repmgr.conf
(主节点专属配置):
node_id=1
node_name='primary'
conninfo='host=u24-pg-110 user=repmgr dbname=repmgr'
data_directory='/var/lib/postgresql/14/main'
2.5 初始化repmgr主节点
sudo systemctl restart postgresql # 重启PostgreSQL使配置生效
repmgr -f /etc/repmgr/14/repmgr.conf primary register # 注册主节点
2.6 启动repmgr守护进程(可选但推荐)
sudo systemctl enable repmgrd
sudo systemctl start repmgrd
3. 从节点配置
3.1 在主节点克隆数据到从节点
在主节点执行(以从节点111为例):
repmgr -f /etc/repmgr/14/repmgr.conf standby clone -h u24-pg-110 -U replicator -d repmgr -R # -R自动创建standby.signal
注:-R
参数会自动在从节点数据目录创建standby.signal
文件(标识为从节点),并配置primary_conninfo
。
3.2 修改从节点数据目录权限
sudo chown -R postgres:postgres /var/lib/postgresql/14/main
3.3 配置从节点postgresql.conf
编辑/etc/postgresql/14/main/postgresql.conf
,确保以下参数(与主节点一致):
listen_addresses = '*'
hot_standby = on
3.4 配置从节点pg_hba.conf
与主节点类似,添加复制连接规则:
host replication replicator 192.168.254.110/32 md5
host repmgr repmgr 192.168.254.0/24 trust
3.5 启动从节点服务
sudo systemctl restart postgresql
repmgr -f /etc/repmgr/14/repmgr.conf standby register # 注册从节点
sudo systemctl enable repmgrd
sudo systemctl start repmgrd
3.6 验证从节点同步状态
在从节点执行:
psql -U postgres -c "SELECT * FROM pg_stat_replication;
" # 查看主节点同步的从节点
psql -U postgres -c "SELECT pg_is_in_recovery();
" # 应返回t(表示从节点)
4. 见证节点配置(可选但推荐)
见证节点不存储数据,仅用于仲裁,提升故障转移的可靠性。
4.1 安装PostgreSQL与repmgr
与主从节点相同,安装PostgreSQL和repmgr。
4.2 配置repmgr见证节点
创建/etc/repmgr/14/repmgr.conf
:
node_id=4
node_name='witness'
conninfo='host=u24-pg-113 user=repmgr dbname=repmgr'
data_directory='/var/lib/postgresql/14/main'
4.3 注册见证节点
sudo systemctl restart postgresql
repmgr -f /etc/repmgr/14/repmgr.conf witness register -h u24-pg-110 -U replicator
5. 验证集群状态
5.1 查看集群拓扑
在任意节点执行:
repmgr -f /etc/repmgr/14/repmgr.conf cluster show
输出应显示主节点、从节点和见证节点的状态(如primary
、standby
、witness
)。
5.2 测试故障转移(模拟主节点宕机)
- 停止主节点服务:
sudo systemctl stop postgresql
。 - 在从节点查看状态:
repmgr -f /etc/repmgr/14/repmgr.conf cluster show
,应显示某个从节点升级为primary
。 - 恢复原主节点:
sudo systemctl start postgresql
,它会自动变为standby
。
注意事项
- 版本一致性:所有节点的PostgreSQL和repmgr版本必须一致。
- 网络连通性:确保节点间TCP端口(5432、repmgr默认端口)互通。
- 数据安全:定期备份WAL日志(
archive_mode=on
)和数据库(pg_dumpall
)。 - 监控:使用
pg_stat_replication
、repmgr cluster show
等命令监控集群状态,或集成Prometheus+Granafa实现可视化。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: Ubuntu PostgreSQL集群搭建步骤
本文地址: https://pptw.com/jishu/733171.html