OceanBase 的每个分区都维护了多个副本,一般为三个,且部署到多个不同的数据中心(Zone)。整个系统中有成千上万个分区,这些分区的多个副本之间通过 Paxos 协议进行日志同步。每个分区和它的副本构成一个独立的 Paxos 复制组(Paxos Replication Group),其中一个副本为主(Leader),其它副本为备(Follower)。每台OBServer 服务的一部分分区为 Leader,一部分分区为 Follower。当 OBServer 出现故障时,Follower 分区不受影响,Leader分区的写服务短时间内会受到影响,直到通过 Paxos 协议将该分区的某个 Follower 选为新的 Leader。
OceanBase 复制协议分为两个部分:Paxos 分布式选举以及日志同步。Paxos 分布式选举确保每个分区总是能够选出唯一的 Leader,由 Leader 将日志同步到 Follower。只有日志同步到多数派并且写盘成功,才认为事务执行成功。
假设总共有三个副本(N = 3),那么,需要确保 Leader 写盘成功以及其中某个 Follower 同步完成且写盘成功。如果某个 Follower 出现故障,Leader 和剩余的一个 Follower 还能够构成多数派,系统继续提供服务。如果Leader 出现故障,那么,Leader 最后执行的少量事务可能没有同步到多数派,这些事务的状态不确定,称为未决事务,需要等到某个 Follower 接替为新的 Leader 后才能最终确定。Follower 接替为Leader 后的第一步操作就是明确前一任Leader产生的未决事务的状态,这个过程称为重新确认(Reconfirm)。等到 Reconfirm 过程全部完成后,新的 Leader 才开始正式提供服务,系统恢复正常。
当分区发生复制或者迁移时,该分区对应的 Paxos 复制组发生了成员变更,需要执行成员变更操作,成员变更操作也是一个投票。