OceanBaseデータベースV4.xは、OceanBaseデータベースV3.xと比較して最大の変更点は、複数のデータパーティションを1つのログストリームに統合し、データパーティションを特定のログストリームに挂けることで、メモリ、CPU、ネットワーク帯域幅などのリソース使用量を大幅に節約できる点です。データパーティションはもはやロール情報を独立して保持せず、所属するログストリームのロールによって決定されます。ログストリームのロールは選挙プロトコルによって生成されます。したがって、OceanBaseデータベースV4.xにおけるリーダー切り替え動作はログストリーム単位で行われます。
OceanBaseデータベースはマルチテナントの概念を持ち、テナントはOceanBaseデータベースにおけるリソース分離の単位であり、ログストリームは各テナントが独立して保有します。そのため、V4.xでリーダー切り替え問題を調査する際には、まずテナントのIDとログストリームのIDを確認する必要があります。
ログストリームのLeader就任は、下から上へと3つのモジュールに依存します:
選挙モジュール
OceanBaseデータベース独自の選挙アルゴリズムに基づき、Leaderを生成し、その一意性を保証します。これをElection Leaderと呼びます。
CLOGモジュール
Election Leaderに基づき、まずreconfirmプロセスを実行して、CLOG Leaderが全量のログを保持していることを保証します。その後、CLOGの就任プロセスを実行し、この就任プロセスは非同期でRoleChangeServiceモジュールに通知されます。これにより、CLOG Leaderが有効となります。
RoleChangeServiceモジュール
CLOG Leaderが就任プロセスを実行する必要があることを検知すると、具体的な就任ロジックを実行します。リーダー切り替えを検知する必要があるモジュールはRoleChangeServiceモジュールに接続し、切り替え動作を検知して自身の切り替えロジックを実行します。