PostgreSQL 流复制(Streaming Replication)是一个强大且高效的高可用性解决方案。它可以在主服务器和一个或多个从服务器之间实现数据的实时复制,从而提高系统的可用性和容错能力。本文将详细介绍如何在 CentOS 7.9 上搭建一个 PostgreSQL 流复制主从环境,并包含一些常见问题及其解决方案。
目录
流复制简介
环境准备
主服务器配置
备份主服务器数据并复制到从服务器
从服务器配置
启动从服务器
验证配置
常见问题及解决方案
参考文件链接
结论
流复制简介
流复制是 PostgreSQL 提供的一种数据复制机制,它允许从服务器实时接收主服务器的 WAL(Write-Ahead Logging)日志,以保持数据的一致性。流复制有助于提高数据库的高可用性,并能够实现读写分离,提高系统性能。环境准备
在开始配置之前,我们需要准备以下环境:
两台服务器:主服务器(master)和从服务器(slave)。
CentOS 7.9 安装在两台服务器上。
ip role
192.168.110.11 master
192.168.110.12 slave
PostgreSQL 已安装在两台服务器上。
配置网络,使得两台服务器能够相互通信。
- 主服务器配置
首先,我们需要在主服务器上进行一些配置。
修改 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'
1
2
3
4
5
6
修改 pg_hba.conf 文件
打开主服务器的 pg_hba.conf 文件,添加以下行,允许从服务器连接进行复制:
host replication all 0.0.0.0/0 md5
1
创建复制用户
在主服务器的 PostgreSQL 控制台中,创建一个用于复制的用户:
CREATE USER replication_user REPLICATION LOGIN ENCRYPTED PASSWORD 'rep@31122';
1
重启主服务器
应用配置更改,需要重启 PostgreSQL 服务:
sudo systemctl restart postgresql
1
- 备份主服务器数据并复制到从服务器
在从服务器上,使用 pg_basebackup 命令从主服务器备份数据:
pg_basebackup -h <主服务器IP> -U replication_user -D /home/postgres/opt/data -Fp -Xs -P
1
- 从服务器配置
修改 postgresql.conf 文件
打开从服务器的 postgresql.conf 文件,添加或修改以下参数:
listen_addresses = '*'
hot_standby = on
1
2
创建 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'
1
2
3
- 启动从服务器
启动从服务器的 PostgreSQL 服务:
sudo systemctl start postgresql
1
- 验证配置
在主服务器上检查复制状态
在主服务器上运行以下 SQL 查询,检查从服务器是否连接:
SELECT * FROM pg_stat_replication;
1
在从服务器上检查日志
检查从服务器的 PostgreSQL 日志,以确保没有错误并且流复制正常运行。
- 常见问题及解决方案
问题一:从服务器无法连接到主服务器
解决方案:
检查 pg_hba.conf 文件是否正确配置并重载配置:
sudo systemctl reload postgresql
1
确保防火墙允许主从服务器之间的通信:
sudo firewall-cmd --add-service=postgresql --permanent
sudo firewall-cmd --reload
1
2
问题二:pg_basebackup 失败
解决方案:
确认复制用户具有足够权限。
确保主服务器上的 WAL 日志可用且没有被删除。
问题三:从服务器启动失败
解决方案:
检查 postgresql.conf 文件的内容是否正确。
确认从服务器的数据目录权限设置正确。
- 参考文件链接
PostgreSQL 官方文档 - Streaming Replication
PostgreSQL 官方文档 - High Availability, Load Balancing, and Replication
PostgreSQL Wiki - Streaming Replication - 结论
通过以上步骤,您已经成功搭建了一个 PostgreSQL 流复制的主从环境。这种配置能够有效提高系统的高可用性和容错能力,并支持读写分离,从而提升整体性能。希望这篇文章对您有所帮助,如果有任何问题或需要进一步的讨论,请随时联系我。