本文详细介绍了高可用与容灾的特性。

在生产环境部署数据库时,往往会搭建多个副本(Replica),保证数据库集群的高可用性以及数据的持久性。传统的部署方式是一主一备,即主备间通过日志同步数据变更。但是主备复制存在先天性缺陷,以常见的MySQL半同步复制为例,一旦网络延迟超出阈值,同步就会退化到异步复制。此时如果主节点宕机,副本可能丢失已提交的数据,也就是常说的副本不一致。

为了保证副本间的强一致性,现代数据库往往采用以Paxos为代表的多数派复制协议。Paxos通常要求集群中至少存在3个节点,每次写入都要获得超过半数节点的确认,即便其中1个节点宕机,集群也仍然能正常提供服务。Paxos算法能够保证副本间的强一致性,彻底解决副本不一致问题。

PolarDB-X在副本复制方面采用了X-Paxos协议。X-Paxos是阿里巴巴自研的Paxos协议实现,起源于AliSQL(阿里内部的MySQL分支)。基于朴素的Paxos实现,它在功能、性能上都做了大量优化,且经历了数十载的双十一考验,稳定可靠。456789

X-Paxos实现了Multi-Paxos算法,一般每个节点都包含了 Proposer、Accepter、Learner三种功能,每一个节点都是全功能节点。但是PolarDB-X并不需要所有节点都拥有全部的功能,对部分节点的功能进行了裁剪,每个节点的功能介绍如下:

  • 通常有一个相对稳定的Leader角色的节点用于处理读写请求。
  • 如果Leader角色的节点因为某些意外情况发生宕机或超时,Follower角色的节点就会重新发起选主投票,如果得到超过半数的选票则成为新的Leader角色节点。
  • Logger节点只保留Accepter和Learner功能,负责保存日志以及参与Paxos投票。
  • 只读实例中的节点仅支持Learner功能,只负责接受主机群的变更日志,不参与Paxos投票。

此外,X-Paxos还支持动态添加删除节点、权重化选主、Leader主动回切等企业级特性,允许用户根据业务需求灵活定义部署方式。

多机房部署

基于Paxos复制协议,PolarDB-X可以部署到多个机房中,以实现机房级容灾。常见的部署方式有同城三机房、两地三中心等,其中后者主要应用在混合云部署中。由于Paxos协议的特性,通常三个机房中有一个主机房负责对外提供服务。

跨地域多活

如果业务有多活需求,出于性能考虑,通常建议在不同地域分别部署PolarDB-X实例,彼此之间通过DTS等数据同步工具相连接。数据要根据实际业务需求做合理的分区,以保证各个地域的数据不会相互冲突。PolarDB-X日志特性支持实例到实例的数据同步。