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

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
云原生数据库 PolarDB PostgreSQL 版,标准版 2核4GB 50GB
云原生数据库 PolarDB MySQL 版,通用型 2核4GB 50GB
简介: 搭建 PostgreSQL 流复制主从指南(适用于 CentOS 7.x)

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 已安装在两台服务器上。
配置网络,使得两台服务器能够相互通信。

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

修改 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

  1. 备份主服务器数据并复制到从服务器
    在从服务器上,使用 pg_basebackup 命令从主服务器备份数据:

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

  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

  1. 启动从服务器
    启动从服务器的 PostgreSQL 服务:

sudo systemctl start postgresql
1

  1. 验证配置
    在主服务器上检查复制状态
    在主服务器上运行以下 SQL 查询,检查从服务器是否连接:

SELECT * FROM pg_stat_replication;
1
在从服务器上检查日志
检查从服务器的 PostgreSQL 日志,以确保没有错误并且流复制正常运行。

  1. 常见问题及解决方案
    问题一:从服务器无法连接到主服务器
    解决方案:

检查 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 文件的内容是否正确。
确认从服务器的数据目录权限设置正确。

  1. 参考文件链接
    PostgreSQL 官方文档 - Streaming Replication
    PostgreSQL 官方文档 - High Availability, Load Balancing, and Replication
    PostgreSQL Wiki - Streaming Replication
  2. 结论
    通过以上步骤,您已经成功搭建了一个 PostgreSQL 流复制的主从环境。这种配置能够有效提高系统的高可用性和容错能力,并支持读写分离,从而提升整体性能。希望这篇文章对您有所帮助,如果有任何问题或需要进一步的讨论,请随时联系我。
相关实践学习
使用PolarDB和ECS搭建门户网站
本场景主要介绍基于PolarDB和ECS实现搭建门户网站。
阿里云数据库产品家族及特性
阿里云智能数据库产品团队一直致力于不断健全产品体系,提升产品性能,打磨产品功能,从而帮助客户实现更加极致的弹性能力、具备更强的扩展能力、并利用云设施进一步降低企业成本。以云原生+分布式为核心技术抓手,打造以自研的在线事务型(OLTP)数据库Polar DB和在线分析型(OLAP)数据库Analytic DB为代表的新一代企业级云原生数据库产品体系, 结合NoSQL数据库、数据库生态工具、云原生智能化数据库管控平台,为阿里巴巴经济体以及各个行业的企业客户和开发者提供从公共云到混合云再到私有云的完整解决方案,提供基于云基础设施进行数据从处理、到存储、再到计算与分析的一体化解决方案。本节课带你了解阿里云数据库产品家族及特性。
相关文章
|
存储 安全 关系型数据库
CentOS7 如何离线安装PostgreSQL数据库
如果CentOS所在的服务器限于安全原因,客户并未给我们配置访问外网的权限,那么如何安装PostgreSQL数据库呢?本文将通过具体步骤来详细讲解如何在CentOS7 系统上离线安装PostgreSQL12数据库。
3873 0
CentOS7 如何离线安装PostgreSQL数据库
|
3月前
|
关系型数据库 Linux 数据库
在CentOS 7上安装和使用PostgreSQL的方法
在CentOS 7上安装和使用PostgreSQL的方法
289 0
|
SQL 关系型数据库 Linux
【PostgreSQL】基于CentOS系统安装PostgreSQL数据库
【PostgreSQL】基于CentOS系统安装PostgreSQL数据库
935 0
|
6月前
|
关系型数据库 Linux Shell
Centos系统上安装PostgreSQL和常用PostgreSQL功能
Centos系统上安装PostgreSQL和常用PostgreSQL功能
|
6月前
|
缓存 负载均衡 关系型数据库
postgresql|数据库|centos7下基于postgresql-12的主从复制的pgpool-4.4的部署和使用
postgresql|数据库|centos7下基于postgresql-12的主从复制的pgpool-4.4的部署和使用
179 0
|
存储 Oracle 关系型数据库
「PostgreSQL 」如何在CentOS 7 / CentOS 8上安装PostgreSQL 12
「PostgreSQL 」如何在CentOS 7 / CentOS 8上安装PostgreSQL 12
|
存储 关系型数据库 Linux
centos7 postgresql10 安装 zhparser,配置中文全文检索
centos7 postgresql10 安装 zhparser,配置中文全文检索
316 0
centos7 postgresql10 安装 zhparser,配置中文全文检索
|
监控 关系型数据库 Linux
CentOS7下Zabbix5.0+PostgreSQL12+TimescaleDB部署实践
CentOS7下Zabbix5.0+PostgreSQL12+TimescaleDB部署实践
672 0
CentOS7下Zabbix5.0+PostgreSQL12+TimescaleDB部署实践
|
存储 关系型数据库 Linux
在Centos7环境下进行搭建postgresql-xl集群环境
在Centos7环境下进行搭建postgresql-xl集群环境
146 0
在Centos7环境下进行搭建postgresql-xl集群环境
|
网络协议 关系型数据库 Linux
Centos7 PostgreSQL安装
Centos7 PostgreSQL安装
266 0