【无标题】

(1)统一的日志系统。

在openGauss的存储引擎中,磁盘引擎和内存引擎共用同一套日志系统,以保证在数据库故障恢复场景下,各个引擎内和各个引擎间的数据持久性和一致性。基于上述统一的日志系统,openGauss支持主、备机(主、备数据库服务进程)之间的流式日志复制,并通过Quorum复制协议,在保证复制一致性的前提下,尽可能降低日志同步对主机业务的影响

openGauss Quorum一致性复制协议 - 墨天轮 (modb.pro)

为了保证数据库数据的可靠和高可用,当主机上执行的事务修改产生日志之后,在事务提交之前需要将本事务产生的日志同步到多个备机上。openGauss采用Quorum一致性复制协议,即当多数备机完成上述事务的日志同步之后主机事务方可提交。这个过程中作为事务提交参考的是同步备,其他备机是异步备,作为冗余备份。同步备和异步备的具体选择可以通过配置synchronus_standby_names参数实现。

                                                                                                             SyncRepGetSyncRecPtr() 

                                                                                                                                             |

图4-39 事务提交和一致性复制协议

主机上事务提交和一致性复制协议的工作运行机制如图4-39所示。主要涉及的数据结构是WalSndCtlData数据结构体,其定义代码如下:

typedef struct WalSndCtlData {

SHM_QUEUE SyncRepQueue[NUM_SYNC_REP_WAIT_MODE];

XLogRecPtr lsn[NUM_SYNC_REP_WAIT_MODE];

bool sync_standbys_defined;

bool most_available_sync;

bool sync_master_standalone;

DemoteMode demotion;

slock_t mutex;

WalSnd walsnds[FLEXIBLE_ARRAY_MEMBER];

} WalSndCtlData;

其中SyncRepQueue是等待不同同步方式(备机日志写入磁盘、备机日志接收、备机日志回放等同步方式)的业务线程等待队列,用于当某一种同步方式满足条件之后,唤醒该类型的业务线程完成事务提交。lsn是上述几种队列队头后台线程等待的日志同步位置。sync_standbys_defined表示是否配置了同步备机。most_available_sync表示是否配置了最大可用模式;如果已配置,则在没有同步备机连接的情况下,后台业务线程可以直接提交,不用阻塞等待。sync_master_standalone表示当前是否有同步备机连接。demotion表示主机的降备方式。mutex表示保护walsnds结构体并发访问的互斥锁。walsnds表示保存wal sender的具体同步状态和进度信息。

我们设置的是on 也就是正常情况下,主备机落盘的xlog位置是一样的,否则事务根本无法提交,备机落后主机xlog落盘,只能是在备机宕了重启的时候,这个时候主机会等备机xlog落盘跟上才能执行事务。问题在于1.备机宕机重启,判断xlog差距的逻辑。2.正常情况下,备机xlog刷盘会落后于主机很多吗,落后了会怎么影响主机。

synchronous_commit=on
on跟单实例下含义不同,表示流复制主库提交事务时,需等待备库接收主库发送的WAL日志流并写入WAL文件,之后才向客户端返回成功。

简单地说 on 表示本地和备库的WAL都已落盘,有两份持久化的WAL,但备库此时还没有完成apply,这个选项带来的事务响应时间较高 。
————————————————
版权声明:本文为CSDN博主「Hehuyi_In」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/Hehuyi_In/article/details/103449611

PostgreSQL 同步流复制原理和代码浅析

(252条消息) PostgreSQL 同步流复制原理和代码浅析_架构师成长营的博客-CSDN博客

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值