【DB宝60】PG12高可用之1主2从流复制环境搭建及切换测试

1    3386    11

Tags:

👉 本文共约4637个字,系统预计阅读时间或需18分钟。

[toc]

一、架构介绍

1.1、流复制简介

PostgreSQL在9.x之后引入了主从的流复制机制,所谓流复制,就是备服务器通过tcp流从主服务器中同步相应的数据,主服务器在WAL记录产生时即将它们以流式传送给备服务器,而不必等到WAL文件被填充。

流复制属于物理层面的复制,可以从实例级复制出一个与主库一模一样的实例级的从库,流复制同步方式有同步、异步两种。

  • 异步流复制模式中,主库提交的事务不会等待备库接收WAL日志流并返回确认信息,因此异步流复制模式下主库与备库的数据版本上会存在一定的处理延迟(毫秒级),当主库宕机,这个延迟就主要受到故障发现与切换时间的影响而拉长。该模式为默认模式。

  • 同步流复制模式中,要求主库把WAL日志写入磁盘,同时等待WAL日志记录复制到备库、并且WAL日志记录在任意一个备库写入磁盘后,才能向应用返回Commit结果。一旦所有备库故障,在主库的应用操作则会被挂起,所以此方式建议起码是1主2备。

物理复制优点∶
√物理层面完全一致,是主要的复制方式,其类似于Oracle的DG。
√延迟低,事务执行过程中产生REDO record,实时的在备库apply,事务结束时,备库立马能见到数据。
√物理复制的一致性、可靠性高,不必担心数据逻辑层面不一致。

物理复制缺点︰
√无法满足不同的版本之间、不同库名之间的表同步。
√无法满足指定库或部分表的复制需求
√无法满足将多个数据库实例同步到一个库,将一个库的数据分发到多个不同的库。

物理复制场景:
√适合于单向同步。
√适合于任意事务,任意密度写(重度写)的同步。√适合于HA、容灾、读写分离。
√适合于备库没有写,只有读的场景。

物理复制原理︰
√PG主备流复制的核心部分由walsender , walreceiver和startup三个进程组成。
√ walsender进程是用来发送WAL日志记录的,用于主库发送WAL日志记录至从库
√ walreceiver进程是用来接收WAL日志记录的,用于从库接收主库的WAL日志记录
√ startup进程用于从库apply日志

物理流复制的过程如下所示:

1.2、本文目标

1、先搭建1主1从异步模式,测试主从同步,再进行主从切换

2、再添加一个从库,变为1主2从

3、同步模式和异步模式相互切换

1主1从环境架构如下:

二、环境准备

三、主库操作

3.1、主库放开防火墙

? 注意添加replication

3.2、主库配置归档

执行结果:

  • 参数max_wal_senders介绍:

Specifies the maximum number of concurrent connections from standby servers or streaming base backup clients (i.e., the maximum number of simultaneously running WAL sender processes). The default is zero, meaning replication is disabled. WAL sender processes count towards the total number of connections, so the parameter cannot be set higher than max_connections. This parameter can only be set at server start. wal_level must be set to archive or hot_standby to allow connections from standby servers.

也就是说,这个参数是在主机上设置的,是从机连接到主机的并发连接数之总和,所以这个参数是个正整型。默认值是0,也即默认没有流复制功能。该并发连接数从进程上看,就是各个wal sender进程数之和,可以通过ps -ef|grep senders来查看,所以该值不能超过系统的最大连接数(max_connections,该BUG在9.1.5被修复),可以允许超过实际的流复制用户数。该参数更改需要重启DB,比如我只配了一个从机:

[postgres@ndb2 database]$ ps -ef|grep sender
postgres 21257 21247 0 20:57 ? 00:00:00 postgres: wal sender process repuser 192.25.10.71(46161) streaming 0/4018ED8
postgres 22193 20949 0 23:02 pts/0 00:00:00 grep sender

  • 参数wal_keep_segments=256介绍

表示保留多少个WAL文件。如果源库业务较繁忙,那么应该相应的增加这个值。

在PG13中,wal_keep_segments 已经取消,改用 wal_keep_size

  • 参数wal_sender_timeout=60s介绍

中断那些停止活动超过指定毫秒数的复制连接。这对发送服务器检测一个后备机崩溃或网络中断有用。设置为0将禁用该超时机制。这个参数只能在postgresql.conf文件中或在服务器命令行上设置。默认值是 60 秒。

3.3、主库创建复制用户

? 创建用户需要加上replication选项。

四、从库操作

4.1、在从库对主库进行备份

本人提供Oracle(OCP、OCM)、MySQL(OCP)、PostgreSQL(PGCA、PGCE、PGCM)等数据库的培训和考证业务,私聊QQ646634621或微信dbaup66,谢谢!
AiDBA后续精彩内容已被站长无情隐藏,请输入验证码解锁本文!
验证码:
获取验证码: 请先关注本站微信公众号,然后回复“验证码”,获取验证码。在微信里搜索“AiDBA”或者“dbaup6”或者微信扫描右侧二维码都可以关注本站微信公众号。

标签:

Avatar photo

小麦苗

学习或考证,均可联系麦老师,请加微信db_bao或QQ646634621

您可能还喜欢...

1 条回复

  1. 2021年6月24日

    […] 【DB宝60】PG12高可用之1主2从流复制环境搭建及切换测试 […]

发表回复