分散システムの設計において、最も重要な問題の一つは単一障害点(single point of failure (SPOF))です。あるノードがダウンした場合でもシステムが正常に動作し続けるためには、通常、ノードに複数のレプリカをデプロイし、互いにプライマリとスタンバイとして構成します。選挙プロトコルを用いて複数のレプリカの中からプライマリレプリカを選出し、プライマリレプリカに障害が発生した場合は選挙プロトコルにより自動的にスタンバイレプリカへ切り替えます。
プライマリレプリカをリーダー(Leader)、スタンバイレプリカをフォロワー(Follower)と呼びます。
分散システムにおいて、適切に機能する選挙プロトコルは、以下の二つの要件を満たす必要があります:
正確性
つまり、あるレプリカが自分自身をリーダーだと認識している場合、他のレプリカも同時に自分自身をリーダーだと認識してはなりません。クラスタ内で同時に二つのレプリカが自分自身をリーダーだと認識する状態を「スプリットブレイン」と呼びます。例えばRaftプロトコルの選挙メカニズムでは、各Termに対して1つのリーダーのみを割り当てることでスプリットブレインを回避します。しかし、ネイティブのRaftでは同一時刻に複数のレプリカが自分自身をリーダーだと認識する可能性があります(それらは異なるTermを担当しており、より小さいTermのプライマリレプリカが既に失敗しているにもかかわらず、それに気づいていない場合)。ネイティブのRaftプロトコルを使用する場合は、多数派の内容を読み取る必要があり、読み取ったデータが最新であることを保証する必要があります。OceanBaseデータベースはLeaseメカニズムを用いて多数派へのアクセスを回避し、任意の時点で常に1つのレプリカのみが自分自身をリーダーだと認識できるようにします。
活性
つまり、任意の時点でリーダーがダウンした場合、クラスタ内に多数派のレプリカが生存している限り、有限時間内に生存しているレプリカの中からリーダーとなり得るレプリカが現れるべきです。
正確性と活性を満たす基盤の上で、OceanBaseデータベースの選挙プロトコルは優先順位メカニズムとリーダー切り替えメカニズムも提供します。優先順位メカニズムは、現在リーダーが存在しない場合に、現在リーダーに選出され得る複数のレプリカの中から、優先順位が最も高いレプリカをリーダーとして選択します。リーダー切り替えメカニズムは、現在リーダーが存在する場合に、指定されたレプリカへのシームレスなリーダー切り替えを可能にします。
リース期間
リーダーと多数派が1つのリース期間以上連携できない場合、新たな選挙が開始され、次期リーダーが選出されます。デフォルトの選挙リース期間は4秒です。
優先順位
選挙プロセスにおいて、リーダーはリニューアル契約の動作を通じてフォロワーレプリカの優先順位変化を感知します。フォロワーレプリカの優先順位が自分より高い場合、リーダーは主動的な切り替え動作を通じて、リーダーをフォロワーレプリカへ移行します。
現在の優先順位は高い順に以下のみ含まれます:
ユーザー指定のリーダー。
プライマリゾーン。
リーダー切り替え
ユーザーは ALTER SYSTEM SWITCH REPLICA コマンドを使用してログストリームリーダーの分散を制御できます。内部ではスムーズなリーダー切り替えメカニズムを通じて、外部から感知されないようにリーダーの位置を変更するよう努めます。
ユーザーはプライマリゾーンも変更できます。選挙はプライマリゾーンの変更を感知し、リーダーをターゲットレプリカへ切り替えます。