人大金仓数据库KingbaseES 浅谈wal日志和流复制启动

关键字:

WAL、流复制

WAL日志

预写式日志(Write-Ahead Logging(WAL))是保证数据完整性、实现事务日志的一种标准方法。当发生故障时,数据库服务器能够通过重放事务日志中的变更与行为来恢复数据库集群。

从数据安全角度来说,当集群节点宕机时,可通过WAL日志尽最大努力恢复节点数据;

从数据库性能角度来说,wal日志先行,先写日志再将数据落盘达到提高数据库整体性能的目的。

如下图所示,为wal日志的变更逻辑

  • 当需要更新数据时,先将变更后的内容写入WAL Buffer、再将更新后的数据写入Data Buffer
  • 当提交变更时(commit),会将WAL Buffer刷新到Disk,Data Buffer写磁盘会推迟
  • 当checkpoint时,会将Data Buffer刷新到Disk

WAL流复制启动

如何在主备节点中实现wal日志同步?主要是通过以下组件:

Walsender(WAL发送器)进程将WAL数据发送到备库

Walreceiver(WAL接收器)接收这些数据,在备库上的startup进程重放这些数据

  • 启动主、备服务器
  • 备库服务器启动startup进程
  • 备库服务器启动walreceiver进程
  • Walreceiver向主库服务器发送连接请求。如果主库尚未启动,walreceiver会定期重发该请求
  • 当主库服务器接收到连接请求时,将启动walsender进程,建立walsender和walreceiver之间的TCP连接
  • walreceiver 发送备节点最新的 LSN
  • 如果备库最新 LSN 小于主库最新 LSN(落后),walsender 会将前一个 LSN 到后一个 LSN 之间 的 wal 数据发送到 walreceiver。这个阶段就是备库追赶主库的阶段
  • 流复制开始工作

通过重启备节点,查看数据库实例当中的sys_stat_replication()中的sync_state字段可以看到三种流复制状态的转变也就是启动、追赶、流复制。

参考资料

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值