温馨提示×

Ubuntu PostgreSQL集群搭建步骤

小樊
47
2025-10-23 04:29:00
栏目: 云计算

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

输出应显示主节点、从节点和见证节点的状态(如primarystandbywitness)。

5.2 测试故障转移(模拟主节点宕机)

  1. 停止主节点服务:sudo systemctl stop postgresql
  2. 在从节点查看状态:repmgr -f /etc/repmgr/14/repmgr.conf cluster show,应显示某个从节点升级为primary
  3. 恢复原主节点:sudo systemctl start postgresql,它会自动变为standby

注意事项

  • 版本一致性:所有节点的PostgreSQL和repmgr版本必须一致。
  • 网络连通性:确保节点间TCP端口(5432、repmgr默认端口)互通。
  • 数据安全:定期备份WAL日志(archive_mode=on)和数据库(pg_dumpall)。
  • 监控:使用pg_stat_replicationrepmgr cluster show等命令监控集群状态,或集成Prometheus+Granafa实现可视化。

0