
PG_REWIND 是PG 9.6 开始提供的功能,主要的作用在于通过PG_REWIND 让PG 复制中的数据库快速的与预定的“主库”进行数据同步,而复制的方式是是文件块的方式,并且可以避过重复的数据块。所以复制的速度是快的,在不少的高可用方式中都被作为主库失败后的快速的将主库加入原有集群并作为从库继续工作的方案。

从PG_ REWIND 的源代码就中的可以看到引用了 pg_control.h, controldata_utils.h 等文件。那我们就从这里说起。

首先PG 的复制初始时基于文件复制的方式进行的, system identifier是系统在 initdb 初始化时生成的,此后这个system identifier 是不会被改变的,也就是说,pg_rewind 如果想进行数据的复制,则前提的条件是这两个PG的数据库的 system identifier 是要一致的,否则PG_REWIND 是无法进行工作的。

PG_REWIND是PostgreSQL 9.6开始引入的功能,用于在主从复制环境中快速同步数据库,尤其在主库故障后恢复。该功能基于文件块复制,避开重复数据,确保两个数据库的system_identifier一致。在执行前,需确认目标数据库关闭,且版本匹配。PG_REWIND通过比较checkpoint和timeline确定复制起点,利用哈希表找出需要复制的文件,然后逐个复制。操作完成后,目标数据库启动并进行数据恢复,最终达到与源库一致的状态。使用PG_REWIND时,需开启full_page_writes和wal_log_hints选项,并确保PG_control文件完整无损。
最低0.47元/天 解锁文章
1893

被折叠的 条评论
为什么被折叠?



