暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

postgresql流复制

原创 Oracle 2022-12-05
313

pg流复制主要分为2个阶段,实例恢复阶段和主备同步阶段。
实例恢复阶段:当pg库异常宕机后,数据库启动时,pg会重放宕机前的最后一个checkpoint之后的所有WAL日志(这跟oracle、mysql等关系型数据库实例恢复是同样的原理,目的就是把数据库置为一致性状态)。pg备库在搭建时,一般主库都是不停机的,此时备份主库出来的备份库处于不一致状态,在备库启动时statup进程将进行实例恢复操作
主备同步阶段:wal receiver进程将备库最新的LSN号传递给主库,wal sender将主库最新LSN到备库最新的LSN之间的wal 传递给wal receiver,wal receiver接收WAL并将WAL写入到磁盘上,startup进程根据磁盘上的WAL日志在备库上重放

同步和异步
pg主从有5种模式,由synchronous_commit 参数控制。synchronous_commit 参数的本质就是控制主库什么时候提交。
remote_apply:所有备库上均已应用完WAL时,主库提交。所以这个模式是同步模式,主从是一致的,主库上能查到的数据备库上一定也可以查到,这种模式下主备没有延时,但对主库提交时间有影响,因为主库commit需要等待网络传输和备库应用时间
synchronous_commit的含义分2种情况,有从库和无从库时(synchronous_standby_name空或非空时)

当synchronous_standby_name为非空时:
remote_apply:从库已应用了wal,主库才可以提交。这种模式主从是同步的
on:default。主从的wal都写到磁盘上时,主库提交。类似半同步,不会丢数据。
remote_write:备库接收到wal并将wal日志写到文件系统cache上时,主库提交。此时从库的接收到wal但是还没有落盘,如果操作系统crash,会丢失数据。
local:主库wal刷到磁盘时提交。这种模式是异步的,主库不需要确认备库状态就可以提交。
off:本机wal没有刷到磁盘就可以提交,存在数据丢失风险,不推荐。

当synchronous_standby_name为空时:
(当synchronous_standby_name为空时,synchronous_commit只有on和off有效,如果是remote_apply, remote_write and local ,那么仍然被认为是on)
on:default。数据库wal写到磁盘上,事务才可以提交
off:本机wal没有刷到磁盘就可以提交,存在数据丢失风险,不推荐。
————————————————
版权声明:本文为CSDN博主「liuzhilong_62」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_40687433/article/details/120000817

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论