OceanBase 数据库使用 Paxos 的优化 Multi-Paxos 实现多副本数据同步以及集群的高可用。
Paxos一致性协议的原理
有关 Paxos 的原理,可以参考以下链接中的内容。
OceanBase 数据库的 Paxos 协议与选举协议的关系
OceanBase 数据库的 Paxos 实现和选举协议一起构成了一致性协议(日志服务)的实现。两者有一定的相关性,但在实现上又尽量做到减少耦合。
选举协议会首先在多个副本中选出一个 Leader 节点,并通过 Lease 机制保证 Leader 的合法性。日志会基于选出的 Leader 推进 Multi-Paxos 的状态机,做未确认日志的恢复,并在恢复阶段完成后开始提供服务。
如何通过Paxos协议避免脑裂
什么是"脑裂"?
在传统数据库主备同步容灾方案中,系统正常工作时,会存在一个主节点(又称作 Master)对外提供数据读写服务,其余节点作为备节点(又称作 Slave)从主节点以日志的形式同步数据,作为容灾节点备用。
在系统出现异常时,以主节点和备节点之间出现网络分区为例:
主节点和同机房的应用服务器连接正常,仍作为主节点提供数据的读写服务。
作容灾决策的人或自动管控工具,在检查到主节点网络不通的场景下,为了保证服务的连续性,会尝试将备节点提升成主节点提供数据读写服务。
在这种场景下,同时存在两个或多个主节点,应用出现多写,会造成严重的数据正确性问题。这个现象被称作"脑裂"。
如何避免"脑裂"?
OceanBase 数据库基于 Paxos 协议实现了高可用选举和日志同步协议,一方面保证数据安全,另一方面提供了很好的服务连续性保证。
Paxos 协议是基于多数派的协议,简单来说,任何决策的达成均需要多数派节点达成一致。
OceanBase 数据库的高可用选举,保证在任一时刻,只有得到多数派的认可,一个节点才能成为主节点提供读写服务。由于集合中任意两个多数派均会存在交集,保证不会同时选举出两个主节点。
在一个节点当选为主节点后,通过租约(又称作 Lease)机制保证服务的连续性。
在少数派的备节点出现故障时,主节点的服务不受任何影响。
在主节点故障或网络分区时,多数派的备节点会首先等待租约过期;在租约过期后,原主节点保证不再提供读写服务,此时 OceanBase 数据库会自动从剩余节点集合中选举一个新的主节点继续提供服务。
OceanBase 数据库的日志同步协议,要求待写入的数据在多数派节点持久化成功。以 OceanBase 数据库典型的同城三机房部署为例,任意事务持久化的日志,均需要同步到至少两个机房,事务才会最终提交。
在少数派的备节点出现故障时,同样,主节点的服务不受任何影响,数据不会丢失。
在主节点故障或网络分区时,余下节点中仍保留有完整的数据;高可用选举会首先选出一个新的主节点,该节点会执行恢复流程,从余下节点中恢复出完整数据,在此之后可以继续提供服务,整个过程是完全自动的。
基于上述分析,OceanBase 数据库通过基于 Paxos 协议实现的高可用选举和日志同步协议,避免了"脑裂",同时保证了数据安全性和服务连续性。




