首页主机资讯Ubuntu PostgreSQL集群搭建实践

Ubuntu PostgreSQL集群搭建实践

时间2025-10-10 08:13:04发布访客分类主机资讯浏览1367
导读:Ubuntu PostgreSQL集群搭建实践(以物理流复制+repmgr为例) PostgreSQL集群通过主从复制实现高可用和读写分离,repmgr作为集群管理工具可自动化故障转移。以下是在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

注意事项

  1. 版本一致性:所有节点的PostgreSQL和repmgr版本需保持一致,避免兼容性问题。
  2. 数据同步:定期备份集群数据,建议使用pg_basebackuppgBackRest工具。
  3. 监控告警:通过repmgrlog_level=DEBUG或第三方工具(如Prometheus+Granafa)监控集群状态。
  4. 安全加固:禁用trust认证方式,使用scram-sha-256加密密码;限制客户端IP访问范围。

通过以上步骤,可在Ubuntu系统上搭建高可用的PostgreSQL物理流复制集群,结合repmgr实现自动化故障转移,保障业务连续性。

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


若转载请注明出处: Ubuntu PostgreSQL集群搭建实践
本文地址: https://pptw.com/jishu/722105.html
MongoDB在Ubuntu上如何进行版本兼容性测试 Ubuntu PostgreSQL索引优化建议

游客 回复需填写必要信息