阿里云数字新基建系列:云数据库架构
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

1.1.9 半同步复制

半同步复制相比异步复制,主库需要等待至少一个备库节点接收到binlog并将其转存到relay log后,主节点才能返回客户端提交成功的消息,此时如果超过了rpl_semi_sync_master_timeout设置的超时时间,依然没有接收到来自备库节点的ACK,那么其将自动降级为异步复制,直到异常修复后又会自动变为半同步复制,如图1-8所示。

图1-8 半同步复制

半同步主要有两种模式:after_commit和after_sync。我们先看一下after_commit。前面讲到,二阶段提交分为几个阶段,即Prepare→Flush→Sync→InnoDB Commit,半同步的after_commit是指在Commit阶段后将binlog发送到Slave节点并等待该节点的确认;after_sync则是指在Sync阶段后、Commit阶段前将binlog发送到Slave节点。由于after_commit在Commit阶段后推送binlog,所以在主备故障切换场景下有概率出现幻读,虽然after_sync可以避免这种场景的幻读,但在这种模式下依然有数据不一致的情况存在,这里我们不过多阐述细节。

下面介绍几个RDS特有的特性。