適用対象
この内容はOceanBaseデータベースEnterprise Editionにのみ適用されます。OceanBaseデータベースCommunity Editionは現在、アービトレーションサービス機能をサポートしていません。
OceanBaseデータベースでは、現行バージョンからアービトレーションサービス(Arbitration Service)が導入されました。これにより、同一リージョン内の3リージョン構成において2リージョンで障害が発生した場合のRT増大問題を解決するとともに、都市間の帯域幅コストを削減し、第3リージョンのコストを極限まで抑えることが可能になります。
アービトレーションサービスでは、テナントログストリームに対応するアービトレーションメンバーが維持されており、アービトレーションメンバーには以下の特徴があります:
選出、Paxos Prepare、およびメンバーグループ変更の投票にのみ参加し、ログ多数派投票(Paxos Accept)には参加しません。
ログを格納せず、MemTableやSSTableもないため、リソース(帯域幅/メモリ/ディスク/CPU)のコストは非常に小さいです。
プライマリとして選出されてサービスを提供することはできません。
全機能リプリカの半数が障害によりログ同期に失敗し、かつログストリームのダウングレード制御時間に達した場合、アービトレーションサービスは自動的にログストリームのダウングレードプロセスを実行し、障害リプリカをメンバーリストから削除します(ただし、テナントのローカリティは変更されません)。これによりサービスが復旧し、RPO = 0を実現します。障害が発生した全機能リプリカが復旧すると、アービトレーションサービスは再びログストリームのアップグレードプロセスを実行し、ダウングレードされたリプリカを再びメンバーリストに追加することで、より高い可用性を保証します。
説明
ログストリームのダウングレード制御時間は、テナントレベルの構成パラメータarbitration_timeoutによって制御されます。デフォルト値は5秒で、値の範囲は[3秒, +∞)です。arbitration_timeoutの詳細な構成パラメータについては、arbitration_timeoutを参照してください。
ログストリームのダウングレードポリシー
現在、半数のレプリカに以下の異常が発生し、ログの同期ができなくなった場合、アービトレーションサービスはログストリームのダウングレード操作を実行します:
レプリカが配置されているサーバーが停止した場合
レプリカが配置されているノードに対して
ALTER SYSTEM STOP SERVERコマンドが実行された場合、またはレプリカが配置されているゾーンに対してALTER SYSTEM STOP ZONEコマンドが実行された場合レプリカが配置されているオブザーバープロセスに対して
kill -9、kill -15、kill -19などの操作が実行された場合レプリカが配置されているサーバーのネットワークが切断された場合
レプリカが配置されているサーバー上のテナントログディスクが上限になった場合
レプリカが長時間の障害によりログがリーダーに遅れた場合、障害復旧後にレプリカの再構築がトリガーされます。再構築期間中は、そのレプリカのデータとログが不完全であるため、ログストリームのアップグレードを実行できません。
ログストリームのダウングレードの主なプロセスは以下のとおりです:
ログストリームリーダー上で実行されているアービトレーションサービスは、一部のレプリカが
arbitration_timeout内にリーダーにログ確認メッセージを返信していないことを検出すると、さらなるチェックを実行し、ログが同期されていないレプリカに対してログストリームのダウングレード操作を準備します。アービトレーションサービスは定期的な検出を通じて、ログが同期されていないレプリカにダウングレードポリシーに記載されている異常が存在するかどうかをチェックします。異常が存在する場合、ログストリームのダウングレード操作を実行します。
注意
障害レプリカ(ダウングレード済みのレプリカを含む)の総数がフル機能レプリカの総数の半分に等しい場合にのみ、アービトレーションサービスはログストリームのダウングレード操作を実行します。例えば、4F1Aデプロイメントシナリオでは:
- 1つのFレプリカに異常が発生した場合、アービトレーションサービスはログストリームのダウングレードを実行しません。この時点で4Fの過半数である3Fは依然として稼働しており、ログの同期を正常に行うことができます。
- 2つのFレプリカに異常が発生した場合(例:2つのFレプリカのネットワークが切断されたり、1つのFレプリカが再構築されたり、もう1つのFレプリカが配置されているサーバーが停止したりした場合)、アービトレーションサービスはログストリームのダウングレードを実行します。
- 3つ以上のFレプリカに異常が発生した場合、この時点で稼働しているのは1つのFレプリカとアービトレーションサービスのみであり、過半数を満たしていないため、ログストリームは無主となり、ログストリームのダウングレードを実行できません。
クラスタ内でログストリームのダウングレードが発生したかどうかは、ステートメント SELECT * FROM oceanbase.GV$OB_LOG_STAT WHERE DEGRADED_LIST NOT LIKE ''; を使用して確認できます。クエリ結果にログストリームに対応する DEGRADED_LIST のレコードが空でない場合、そのログストリームがダウングレードされたことを示します。
ログストリームのアップグレードポリシー
現在のログストリームがすでにダウングレード状態にある場合、アービトレーションサービスは定期的に DEGRADED_LIST 内のレプリカを検出します。ダウングレードされたレプリカのログ同期が回復し、かつそのレプリカにダウングレードポリシーに記載されている異常が存在しないことが確認された場合、ログストリームのアップグレードを許可します。
ログストリームのアップグレードの主なプロセスは以下のとおりです:
ログストリームリーダー上で実行されているアービトレーションサービスは定期的に
DEGRADED_LIST内のレプリカを検出します。ダウングレードされたレプリカがリーダーにログ確認メッセージを返信した場合、アービトレーションサービスはさらなるチェックを実行し、ダウングレードされたレプリカに対してログストリームのアップグレードを準備します。アービトレーションサービスは、ダウングレードされたレプリカにログストリームのダウングレードポリシーに記載されている異常が存在するかどうかをチェックします。異常が存在しない場合、ログストリームのアップグレード操作を実行します。
注意
ログストリームのアップグレード時には、すべてのダウングレードされたレプリカに異常がない必要はありません。例えば、4F1Aデプロイメントシナリオでは、2つのFレプリカが配置されているサーバーの停止によりダウングレードされました。その後、1つのFレプリカのみが復旧してログの同期を開始した場合でも、アービトレーションサービスは依然としてログストリームのアップグレード操作を実行します。
関連ドキュメント
アービトレーションサービスに関するその他の操作については、以下を参照してください: