PostgreSQL数据库异步的流复制

本文涉及的产品
云原生数据库 PolarDB MySQL 版,通用型 2核4GB 50GB
云原生数据库 PolarDB PostgreSQL 版,标准版 2核4GB 50GB
简介: 一、虚拟主机安装1.使用VMware虚拟机安装CentOS操作系统操作系统环境CentOS Linux release 7.2.1511 (Core)软件选择 选择安装GNOME桌面安装位置 选择自动分区2.通过克隆的方式,生成主备两台主机。

一、虚拟主机安装

1.使用VMware虚拟机安装CentOS操作系统
操作系统环境
CentOS Linux release 7.2.1511 (Core)

  • 软件选择 选择安装GNOME桌面
  • 安装位置 选择自动分区

2.通过克隆的方式,生成主备两台主机。
192.168.238.132_master
192.168.238.133_slave

3.使用NAT网络方式

注意事项:
1) 开启服务,否则配置网络时,总是显示网线被拔出
1553504215_1_

2) DHCP方式自动获取IP
测试连接,存在失败的情况,注意是否已经关闭了防火墙

psql -h192.168.238.133 -dtest -Upostgres
psql: could not connect to server: 拒绝连接
    Is the server running on host "192.168.238.133" and accepting
    TCP/IP connections on port 5432?

3) 修改网卡自启动
vi /etc/sysconfig/network-scripts/ifcfg-ens33

ONBOOT=yes

二、数据库安装配置步骤

先在192.168.238.132_master和192.168.238.133_slave均安装PostgreSQL。
安装步骤见【PostgreSQL 10.0 源码安装

主服务器
主服务器地址:192.168.238.132

先创建一个新目录:

mkdir /usr/local/pgsql/pg_archive/

1.首先需要创建一个数据库用户进行主从同步。创建用户replica,并赋予登录和复制的权限

postgres# CREATE ROLE replica login replication encrypted password 'replica'

2.修改pg_hba.conf,允许replica用户来同步
在pg_hba.conf里增加两行:

host     all             all          192.168.238.133/32          trust   #允许133连接到主服务器
host   replication      replica       192.168.238.133/32          md5   #允许133使用replica用户来复制

这样,就设置了replica这个用户可以从192.168.238.133进行流复制请求。
注:
第二个字段必须要填replication

3.修改postgresql.conf

listen_addresses = '*'   # 监听所有IP
archive_mode = on  # 允许归档
archive_command = 'cp %p /opt/pgsql/pg_archive/%f'  # 用该命令来归档logfile segment
wal_level = hot_standby 
max_wal_senders = 32 # 这个设置了可以最多有几个流复制连接,差不多有几个从,就设置几个
wal_keep_segments = 256 #设置流复制保留的最多的xlog数目
wal_sender_timeout = 60s #设置流复制主机发送数据的超时时间
max_connections = 100 # 这个设置要注意下,从库的max_connections必须要大于主库的

配置完两个文件后重启服务器。

pg_ctl restart

4.测试slave能否连接到master数据库。在slave上运行如下命令:

psql -h 192.168.238.133 -U postgres

如提示无法连接,请检查是否关闭了防火墙。
关闭防火墙

启动: systemctl start firewalld
关闭: systemctl stop firewalld
查看状态: systemctl status firewalld 
开机禁用  : systemctl disable firewalld
开机启用  : systemctl enable firewalld

看看是否能进入数据库。若可以,则正常

2.2 从服务器

1.从主节点拷贝数据到从节点

su - postgres
rm -rf /usr/local/pgsql/data/*   #先将data目录下的数据都清空
pg_basebackup -h 192.168.238.132 -U replica -D /usr/local/pgsql/data -X stream -P  # 从master拷贝数据到slave(基础备份)
mkdir /usr/local/pgsql/pg_archive

2.配置recovery.conf
复制/usr/local/pgsql/share/recovery.conf.sample 到 /usr/local/pgsql/data/recovery.conf

cp /usr/local/pgsql/share/recovery.conf.sample  /usr/local/pgsql/data/recovery.conf

修改recovery.conf

standby_mode = on    # 说明该节点是从服务器
primary_conninfo = 'host=192.168.238.132 port=5432 user=replica password=replica'  # 主服务器的信息以及连接的用户
recovery_target_timeline = 'latest'

3.配置postgresql.conf

wal_level = hot_standby
max_connections = 1000 #一般查多于写的应用从库的最大连接数要比较大
hot_standby = on #说明这台机器不仅仅是用于数据归档,也用于数据查询
max_standby_streaming_delay = 30s # 数据流备份的最大延迟时间
wal_receiver_status_interval = 10s # 多久向主报告一次从的状态,当然从每次数据复制都会向主报告状态,这里只是设置最长的间隔时间
hot_standby_feedback = on # 如果有错误的数据复制,是否向主进行反馈

2.3 验证是否部署成功
在主节点上执行:

select client_addr,sync_state from pg_stat_replication;

结果如下:

[postgres@localhost data]$ psql
psql (10.7)
Type "help" for help.

postgres=# select client_addr,sync_state from pg_stat_replication;
   client_addr   | sync_state 
-----------------+------------
 192.168.238.133 | async
(1 row)

postgres=#

说明192.168.238.133是从服务器,在接收流,而且是异步流复制。

此外,还可以分别在主、从节点上运行 ps aux | grep postgres 来查看进程:
主服务器上:

postgres 27480  2536  0 10:40 ?        00:00:00 postgres: wal sender process replica 192.168.238.133(55304) streaming 0/8000140

可以看到有一个 wal sender 进程。

从服务器上:

postgres 24721 24716  0 10:40 ?        00:00:00 postgres: wal receiver process   streaming 0/8000140

可以看到有一个 wal receiver 进程。

至此,PostgreSQL主从流复制安装部署完成。

在主服务器上插入数据或删除数据,在从服务器上能看到相应的变化。从服务器上只能查询,不能插入或删除。

参考文章:
https://www.jianshu.com/p/2d07339774c0

相关实践学习
使用PolarDB和ECS搭建门户网站
本场景主要介绍基于PolarDB和ECS实现搭建门户网站。
阿里云数据库产品家族及特性
阿里云智能数据库产品团队一直致力于不断健全产品体系,提升产品性能,打磨产品功能,从而帮助客户实现更加极致的弹性能力、具备更强的扩展能力、并利用云设施进一步降低企业成本。以云原生+分布式为核心技术抓手,打造以自研的在线事务型(OLTP)数据库Polar DB和在线分析型(OLAP)数据库Analytic DB为代表的新一代企业级云原生数据库产品体系, 结合NoSQL数据库、数据库生态工具、云原生智能化数据库管控平台,为阿里巴巴经济体以及各个行业的企业客户和开发者提供从公共云到混合云再到私有云的完整解决方案,提供基于云基础设施进行数据从处理、到存储、再到计算与分析的一体化解决方案。本节课带你了解阿里云数据库产品家族及特性。
相关文章
|
1月前
|
存储 关系型数据库 MySQL
一个项目用5款数据库?MySQL、PostgreSQL、ClickHouse、MongoDB区别,适用场景
一个项目用5款数据库?MySQL、PostgreSQL、ClickHouse、MongoDB——特点、性能、扩展性、安全性、适用场景比较
|
2月前
|
NoSQL 关系型数据库 MySQL
微服务架构下的数据库选择:MySQL、PostgreSQL 还是 NoSQL?
在微服务架构中,数据库的选择至关重要。不同类型的数据库适用于不同的需求和场景。在本文章中,我们将深入探讨传统的关系型数据库(如 MySQL 和 PostgreSQL)与现代 NoSQL 数据库的优劣势,并分析在微服务架构下的最佳实践。
|
12天前
|
关系型数据库 分布式数据库 数据库
PostgreSQL+Citus分布式数据库
PostgreSQL+Citus分布式数据库
44 15
|
2月前
|
SQL 关系型数据库 数据库
PostgreSQL数据库报错 ERROR: multiple default values specified for column "" of table "" 如何解决?
PostgreSQL数据库报错 ERROR: multiple default values specified for column "" of table "" 如何解决?
310 59
|
20天前
|
SQL 关系型数据库 数据库
PostgreSQL性能飙升的秘密:这几个调优技巧让你的数据库查询速度翻倍!
【10月更文挑战第25天】本文介绍了几种有效提升 PostgreSQL 数据库查询效率的方法,包括索引优化、查询优化、配置优化和硬件优化。通过合理设计索引、编写高效 SQL 查询、调整配置参数和选择合适硬件,可以显著提高数据库性能。
121 1
|
23天前
|
存储 关系型数据库 MySQL
MySQL vs. PostgreSQL:选择适合你的开源数据库
在众多开源数据库中,MySQL和PostgreSQL无疑是最受欢迎的两个。它们都有着强大的功能、广泛的社区支持和丰富的生态系统。然而,它们在设计理念、性能特点、功能特性等方面存在着显著的差异。本文将从这三个方面对MySQL和PostgreSQL进行比较,以帮助您选择更适合您需求的开源数据库。
90 4
|
24天前
|
关系型数据库 MySQL 数据处理
探索Python中的异步编程:从asyncio到异步数据库操作
在这个快节奏的技术世界里,效率和性能是关键。本文将带你深入Python的异步编程世界,从基础的asyncio库开始,逐步探索到异步数据库操作的高级应用。我们将一起揭开异步编程的神秘面纱,探索它如何帮助我们提升应用程序的性能和响应速度。
|
1月前
|
SQL 关系型数据库 数据库
使用 PostgreSQL 和 Python 实现数据库操作
【10月更文挑战第2天】使用 PostgreSQL 和 Python 实现数据库操作
|
2月前
|
Oracle NoSQL 关系型数据库
主流数据库对比:MySQL、PostgreSQL、Oracle和Redis的优缺点分析
主流数据库对比:MySQL、PostgreSQL、Oracle和Redis的优缺点分析
402 2
|
2月前
|
缓存 关系型数据库 数据库
如何优化 PostgreSQL 数据库性能?
如何优化 PostgreSQL 数据库性能?
110 2