搭建 PostgreSQL 流复制主从指南(适用于 CentOS 7.x)

PostgreSQL 流复制(Streaming Replication)是一个强大且高效的高可用性解决方案。它可以在主服务器和一个或多个从服务器之间实现数据的实时复制,从而提高系统的可用性和容错能力。本文将详细介绍如何在 CentOS 7.9 上搭建一个 PostgreSQL 流复制主从环境,并包含一些常见问题及其解决方案。

目录

  1. 流复制简介
  2. 环境准备
  3. 主服务器配置
  4. 备份主服务器数据并复制到从服务器
  5. 从服务器配置
  6. 启动从服务器
  7. 验证配置
  8. 常见问题及解决方案
  9. 参考文件链接
  10. 结论

1. 流复制简介

流复制是 PostgreSQL 提供的一种数据复制机制,它允许从服务器实时接收主服务器的 WAL(Write-Ahead Logging)日志,以保持数据的一致性。流复制有助于提高数据库的高可用性,并能够实现读写分离,提高系统性能。

2. 环境准备

在开始配置之前,我们需要准备以下环境:

  • 两台服务器:主服务器(master)和从服务器(slave)。
  • CentOS 7.9 安装在两台服务器上。
iprole
192.168.110.11master
192.168.110.12slave
  • PostgreSQL 已安装在两台服务器上。
  • 配置网络,使得两台服务器能够相互通信。

3. 主服务器配置

首先,我们需要在主服务器上进行一些配置。

修改 postgresql.conf 文件

打开主服务器的 postgresql.conf 文件,添加或修改以下参数:

listen_addresses = '*'
wal_level = replica
max_wal_senders = 10
wal_keep_segments = 64
archive_mode = on
archive_command = 'cp %p /home/postgres/opt/archive/%f'

修改 pg_hba.conf 文件

打开主服务器的 pg_hba.conf 文件,添加以下行,允许从服务器连接进行复制:

host replication all 0.0.0.0/0 md5

创建复制用户

在主服务器的 PostgreSQL 控制台中,创建一个用于复制的用户:

CREATE USER replication_user REPLICATION LOGIN ENCRYPTED PASSWORD 'rep@31122';

重启主服务器

应用配置更改,需要重启 PostgreSQL 服务:

sudo systemctl restart postgresql

4. 备份主服务器数据并复制到从服务器

在从服务器上,使用 pg_basebackup 命令从主服务器备份数据:

pg_basebackup -h <主服务器IP> -U replication_user -D /home/postgres/opt/data -Fp -Xs -P

5. 从服务器配置

修改 postgresql.conf 文件

打开从服务器的 postgresql.conf 文件,添加或修改以下参数:

listen_addresses = '*'
hot_standby = on

创建 recovery.conf 文件

在从服务器的数据目录中创建 recovery.conf 文件,并添加以下内容:

standby_mode = 'on'
primary_conninfo = 'host=192.168.110.11 port=5432 user=replication_user password=rep@31122'
restore_command = 'cp /home/postgres/opt/archive/%f %p'

6. 启动从服务器

启动从服务器的 PostgreSQL 服务:

sudo systemctl start postgresql

7. 验证配置

在主服务器上检查复制状态

在主服务器上运行以下 SQL 查询,检查从服务器是否连接:

SELECT * FROM pg_stat_replication;

在从服务器上检查日志

检查从服务器的 PostgreSQL 日志,以确保没有错误并且流复制正常运行。

8. 常见问题及解决方案

问题一:从服务器无法连接到主服务器

解决方案

  • 检查 pg_hba.conf 文件是否正确配置并重载配置:
    sudo systemctl reload postgresql
    
  • 确保防火墙允许主从服务器之间的通信:
    sudo firewall-cmd --add-service=postgresql --permanent
    sudo firewall-cmd --reload
    

问题二:pg_basebackup 失败

解决方案

  • 确认复制用户具有足够权限。
  • 确保主服务器上的 WAL 日志可用且没有被删除。

问题三:从服务器启动失败

解决方案

  • 检查 postgresql.conf 文件的内容是否正确。
  • 确认从服务器的数据目录权限设置正确。

9. 参考文件链接

10. 结论

通过以上步骤,您已经成功搭建了一个 PostgreSQL 流复制的主从环境。这种配置能够有效提高系统的高可用性和容错能力,并支持读写分离,从而提升整体性能。希望这篇文章对您有所帮助,如果有任何问题或需要进一步的讨论,请随时联系我。

  • 20
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
好的,下面是 Docker PostgreSQL12 复制主从同步的配置和切换步骤: 1. 首先,在主数据库中修改 postgresql.conf 和 pg_hba.conf 文件,分别设置复制相关参数和允许从服务器连接。 postgresql.conf 文件中需要设置以下参数: ``` wal_level = replica max_wal_senders = 5 wal_keep_segments = 32 ``` pg_hba.conf 文件中需要添加以下规则: ``` host replication all <从服务器IP地址>/32 md5 ``` 2. 重新启动主服务器,使配置生效。 3. 在从服务器中创建一个空的目标数据库,并且在 postgresql.conf 文件中设置以下参数: ``` hot_standby = on ``` 4. 使用 pg_basebackup 命令将主服务器上的数据复制到从服务器上: ``` pg_basebackup -h <主服务器IP地址> -U <用户名> -D /var/lib/postgresql/data -P --xlog-method=stream ``` 5. 在从服务器中创建一个 recovery.conf 文件,指定复制配置参数: ``` standby_mode = on primary_conninfo = 'host=<主服务器IP地址> port=<主服务器端口> user=<用户名> password=<密码>' ``` 6. 启动从服务器。 7. 可以使用 pg_ctl 命令来检查主从同步状态: ``` pg_ctl status -D /var/lib/postgresql/data ``` 8. 如果需要切换主从角色,需要在从服务器上执行以下步骤: - 在主服务器上停止 PostgreSQL 服务; - 在从服务器上编辑 recovery.conf 文件,修改 primary_conninfo 参数为从服务器的连接信息; - 在从服务器上启动 PostgreSQL 服务; - 验证从服务器是否已成为新的主服务器。 希望这些步骤能够帮助到你,如果有任何问题,请随时问我。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

TechCraft

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值