OceanBaseデータベースは、Paxosを最適化したMulti-Paxosを用いて、マルチレプリカデータの同期およびクラスタの高可用性を実現します。
Paxos一貫性プロトコルの原理
Paxosの原理については、以下のリンクを参照してください。
OceanBaseデータベースにおけるPaxosプロトコルと選挙プロトコルの関係
OceanBaseデータベースのPaxos実装は、選挙プロトコルと共に一貫性プロトコル(ログサービス)の実装を構成しています。両者には一定の関連性がありますが、実装上では結合を可能な限り減らすよう努めています。
選挙プロトコルはまず、複数のレプリカの中からリーダー(Leader)ノードを選出し、Leaseメカニズムによってリーダーの正当性を保証します。ログは選出されたリーダーに基づいてMulti-Paxosの状態機械を進め、未確認ログの復元を行い、復元フェーズ終了後にサービス提供を開始します。
Paxosプロトコルによるフォールト・トリンキングの回避方法
「フォールト・トリンキング」とは?
従来のデータベースのプライマリ/スタンバイ同期による災害復旧方式では、システムが正常に動作している間は、データの読み書きサービスを外部に提供するプライマリノード(Masterとも呼ばれる)が1つ存在し、残りのノードはスタンバイノード(Slaveとも呼ばれる)としてプライマリノードからログ形式でデータを同期し、災害復旧ノードとして待機します。
システムに異常が発生した場合、例えばプライマリノードとスタンバイノード間でネットワーク分断が発生した場合を挙げます:
プライマリノードは同一データセンター内のアプリケーションサーバーと正常に接続しており、引き続きプライマリノードとしてデータの読み書きサービスを提供します。
災害復旧を判断する人または自動管理ツールは、プライマリノードのネットワークが不通であることを検出した場合、サービスの継続性を保証するため、スタンバイノードをプライマリノードに昇格させてデータの読み書きサービスを提供しようと試みます。
このような場合、同時に2つ以上のプライマリノードが存在し、アプリケーションが複数回書き込むことで、深刻なデータの正確性問題が発生します。この現象は「フォールト・トリンキング」と呼ばれます。
「フォールト・トリンキング」の回避方法
OceanBaseデータベースは、Paxosプロトコルに基づいて高可用性の選挙およびログ同期プロトコルを実装しており、一方でデータの安全性を保証し、他方で優れたサービス継続性を提供します。
Paxosプロトコルは多数派に基づくプロトコルであり、簡単に言えば、いかなる決定も多数派ノードの合意によって成立します。
OceanBaseデータベースの高可用性選挙は、いかなる時点においても、多数派の承認を得た場合にのみ、あるノードがプライマリノードとして読み書きサービスを提供できるように保証します。集合内の任意の2つの多数派には必ず共通部分が存在するため、同時に2つのプライマリノードが選出されることはありません。
あるノードがプライマリノードに選出された後、サービスの継続性はリース(Leaseとも呼ばれる)メカニズムによって保証されます。
少数派のスタンバイノードに障害が発生した場合、プライマリノードのサービスは一切影響を受けません。
プライマリノードに障害が発生したり、ネットワークがパーティション化した場合、多数派を占めるスタンバイノードはまずレンタル期間の満了を待機します。レンタル期間が満了すると、元のプライマリノードは読み書きサービスを提供しなくなることが保証されており、その際、OceanBaseデータベースは残りのノード集合から新しいプライマリノードを自動的に選出してサービスを継続します。
OceanBaseデータベースのログ同期プロトコルでは、書き込み対象のデータが多数派ノードで正常に永続化されている必要があります。典型的な同一リージョン内の3データセンター構成を例にとると、任意のトランザクションのログが永続化されるためには、少なくとも2つのデータセンターに同期されなければならず、その後にトランザクションは最終的にコミットされます。
少数派を占めるスタンバイノードに障害が発生した場合でも、同様にプライマリノードのサービスは影響を受けず、データは失われません。
プライマリノードに障害が発生したり、ネットワークがパーティション化した場合でも、残りのノードには完全なデータが保持されています。高可用性選挙では、まず新しいプライマリノードが選出され、そのノードが復旧プロセスを実行して残りのノードから完全なデータを復元し、その後サービスを再開できます。このプロセスは完全に自動的です。
上記の分析に基づき、OceanBaseデータベースはPaxosプロトコルに基づいて実装された高可用性選挙およびログ同期プロトコルにより、「ブレイン・スプリット」を回避するとともに、データの安全性とサービスの連続性を保証します。