PostgreSQL 流复制(Streaming Replication)是一个强大且高效的高可用性解决方案。它可以在主服务器和一个或多个从服务器之间实现数据的实时复制,从而提高系统的可用性和容错能力。本文将详细介绍如何在 CentOS 7.9 上搭建一个 PostgreSQL 流复制主从环境,并包含一些常见问题及其解决方案。
目录
- 流复制简介
- 环境准备
- 主服务器配置
- 备份主服务器数据并复制到从服务器
- 从服务器配置
- 启动从服务器
- 验证配置
- 常见问题及解决方案
- 参考文件链接
- 结论
1. 流复制简介
流复制是 PostgreSQL 提供的一种数据复制机制,它允许从服务器实时接收主服务器的 WAL(Write-Ahead Logging)日志,以保持数据的一致性。流复制有助于提高数据库的高可用性,并能够实现读写分离,提高系统性能。
2. 环境准备
在开始配置之前,我们需要准备以下环境:
- 两台服务器:主服务器(master)和从服务器(slave)。
- CentOS 7.9 安装在两台服务器上。
ip | role |
---|---|
192.168.110.11 | master |
192.168.110.12 | slave |
- 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. 参考文件链接
- PostgreSQL 官方文档 - Streaming Replication
- PostgreSQL 官方文档 - High Availability, Load Balancing, and Replication
- PostgreSQL Wiki - Streaming Replication
10. 结论
通过以上步骤,您已经成功搭建了一个 PostgreSQL 流复制的主从环境。这种配置能够有效提高系统的高可用性和容错能力,并支持读写分离,从而提升整体性能。希望这篇文章对您有所帮助,如果有任何问题或需要进一步的讨论,请随时联系我。