![阿里云数字新基建系列:云数据库架构](https://wfqqreader-1252317822.image.myqcloud.com/cover/967/43737967/b_43737967.jpg)
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人
1.1.9 半同步复制
半同步复制相比异步复制,主库需要等待至少一个备库节点接收到binlog并将其转存到relay log后,主节点才能返回客户端提交成功的消息,此时如果超过了rpl_semi_sync_master_timeout设置的超时时间,依然没有接收到来自备库节点的ACK,那么其将自动降级为异步复制,直到异常修复后又会自动变为半同步复制,如图1-8所示。
![](https://epubservercos.yuewen.com/2DE8B5/23020636209728806/epubprivate/OEBPS/Images/42119-00-66-1.jpg?sign=1738871876-5gplfEWQPtsMLM97jPtUPQX43VHfXi1C-0-c7e6095867b0e5e533e8dafcce6edfa4)
图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特有的特性。