在生產環境部署數據庫時,往往會搭建多個副本(Replica),保證數據庫集群的高可用性以及數據的持久性。傳統的部署方式是一主一備,即主備間通過日志同步數據變更。但是主備復制存在先天性缺陷,以常見的MySQL半同步復制為例,一旦網絡延遲超出閾值,同步就會退化到異步復制。此時如果主節點宕機,副本可能丟失已提交的數據,也就是常說的副本不一致。
為了保證副本間的強一致性,現代數據庫往往采用以Paxos為代表的多數派復制協議。Paxos通常要求集群中至少存3個節點,每次寫入都要獲得超過半數節點的確認,即便其中1個節點宕機,集群也仍然能正常提供服務。Paxos算法能夠保證副本間的強一致性,徹底解決副本不一致問題。
PolarDB-X在副本復制方面采用了X-Paxos。X-Paxos是阿里巴巴自研的Paxos協議實現,起源于AliSQL(阿里內部的 MySQL 分支)。基于樸素的Paxos實現,它在功能、性能上都做了大量優化,且經歷了數十載的雙十一考驗,穩定可靠。
X-Paxos實現了Multi-Paxos算法,通常存在一個相對穩定的Leader節點用于處理讀寫請求。如果Leader節點因為某些意外情況發生宕機或超時,Follower節點就會重新發起選主投票,如果得到超過半數的選票則成為新的Leader。Logger節點只負責保存日志以及參與Paxos投票。Learner節點通常用在只讀實例中,它僅僅接受主機群的變更日志,不參與Paxos投票。
此外,X-Paxos還支持動態添加刪除節點、權重化選主、Leader主動回切等企業級特性,允許用戶根據業務需求靈活定義部署方式。
多機房部署
基于Paxos復制協議,PolarDB-X可以部署到多個機房中,以實現機房級容災。常見的部署方式有同城三機房、兩地三中心等,其中后者主要應用在混合云部署中。由于Paxos協議的特性,通常三個機房中有一個主機房負責對外提供服務。
跨地域多活
如果業務有多活需求,出于性能考慮,通常建議在不同地域分別部署PolarDB-X實例,彼此之間通過數據同步工具相連接。數據要根據實際業務需求做合理的分區,以保證各個地域的數據不會相互沖突。