搞了一个公众号PostgreSQL运维技术,欢迎来踩~
悄悄放一张:
PostgreSQL运维技术
原文:https://www.interdb.jp/pg/pgsql11.html
同步流复制的特性是从9.1版本开始实现的,这种本地复制特性是基于log shipping,这是一种通用的复制技术。其中主服务器持续地发送wal数据,然后备库在本地对接收到的wal数据进行重放。
这一章文字比较多,也是PG实现高可用(一主多从)的基石,很重要......
这章包括以下几个主题:
流复制如何启动
数据如何在主和备之间传输
主服务器如何管理多个备用服务器
主服务器如何检测备用服务器的故障
11.1. 启动流复制
在流复制中,有三种流程协同工作。主服务器上的walsender进程向备服务器发送WAL数据;然后,一个walreceiver和一个启动进程在备用服务器上接收并回放这些数据。walsender和walreceiver使用单个TCP连接进行通信。
在本节中,我们将探索流复制的启动顺序,以理解这些进程是如何启动的,以及如何建立它们之间的连接。流复制的启动顺序图如图11.1所示:
图11.1 流复制启动的时序图
图片来源:
https://www.interdb.jp/pg/pgsql11.html
(1)启动主备服务器。
(2)备用服务器启动startup 进程。
(3)备服务器启动walreceiver进程。
(4)walreceiver向主服务器发送连接请求。如果主服务器没有运行,walreceiver会定期发送这些请求。
(5)当主服务器接收到连接请求时,它启动walsender进程,并在walsender和walreceiver之间建立TCP连接。
(6) walreceiver发送standby数据库集群的最新LSN。一般来说,这个阶段在信息技术领域被称为握手。
(7)如果备节点的最新LSN小于主节点的最新LSN (standby's LSN < primary's LSN),则walsender将发送最新LSN的WAL数据给备库。这些WAL数据由存储在主节点pg_xlog子目录(version 10或更高版本为pg_wal子目录)中的WAL段提供。然后,备用服务器回放接收到的WAL数据。在这个阶段中,备用程序会追赶主程序,因此称为追赶。
(8)流式复制开始工作。
每个walsender进程保持一个已连接的walreceiver或任何应用程序的工作阶段的状态(