Root Serviceの高可用性
OceanBaseクラスタでは、Root Serviceはクラスタのさまざまな管理サービスを提供します。Root Serviceサービスの高可用性は以下の方法で実現されます:Root ServiceサービスはPaxosプロトコルを使用して高可用性を実現し、クラスタ設定によりRoot Serviceサービスのレプリカ数を指定できます。Root Serviceの各レプリカはPaxosプロトコルに基づいてリーダーを選出し、リーダーレプリカが就任するとクラスタにRoot Serviceサービスを提供します。Root Serviceの現在のリーダーが障害で辞任した場合、他のRoot Serviceレプリカが新しいリーダーを再選出し、Root Serviceサービスの提供を継続することで、Root Serviceの高可用性を順次実現します。Root Serviceの各レプリカは独立したプロセスではなく、特定のノード上で起動するサービスにすぎません。
ノード状態監視
クラスタの中央制御サービスとして、Root Serviceはクラスタのノード管理を担当します。各ノードはハートビートパケット(heartbeat)を介して、定期的に(2秒ごとに)Root Serviceに自身のプロセス状態を報告します。Root Serviceはノードのハートビートパケットを監視することで、現在のobserverプロセスの動作状態を取得します。
ノードハートビート状態関連パラメータ
lease_time:Root Serviceが累計で
lease_time時間以上、特定のノードから任意のハートビートパケットを受信していない場合、Root Serviceはそのobserverプロセスが一時的に切断されたと判断し、ノードのハートビート状態をlease_expiredとマークします。server_permanent_offline_time:Root Serviceが累計で
server_permanent_offline_time時間以上、特定のノードから任意のハートビートパケットを受信していない場合、Root Serviceはそのobserverプロセスが切断されたと判断し、ノードのハートビート状態をpermanent_offlineとマークします。
Root ServiceによるOBServerノード障害の処理
Root Serviceはハートビートパケットからノードの以下の動作状態を取得できます:
ノードのハートビートパケットが存在し、パケット内のノードディスク状態が正常です。この状態では、Root Serviceはノードが正常に動作していると判断します。
ノードのハートビートパケットが存在し、パケット内のノードディスク状態が異常です。この状態では、Root Serviceはobserverプロセスは存在するがノードのディスクに障害があると判断します。この状態では、Root Serviceはそのノード上のすべてのリーダーレプリカを切り替えようと試みます。
ノードのハートビートパケットが存在せず、パケットの損失時間が比較的短く、ノードのハートビート状態が
lease_expiredの場合、Root Serviceはノードの動作状態をinactiveに設定するだけで、他の処理は行いません。ノードのハートビートパケットが存在せず、ノードのハートビートパケットの損失時間が
server_permanent_offline_timeを超え、ノードのハートビート状態がpermanent_offlineの場合、Root Serviceはそのノード上のデータレプリカを処理し、そのノードに含まれるデータレプリカをPaxosメンバーグループから削除し、他の利用可能なノードでデータを補完して、データレプリカのPaxosメンバーグループの完全性を保証します。
故障マシンの回復
クラスタ内で障害が発生したノードには、以下の2つの状況があります:
故障ノードは再起動可能です。この場合、故障マシンが以前どのようなハートビート状態にあったかにかかわらず、再起動後、OBServerノードとRoot Service間のハートビートパケットが回復すれば、ノードは再びサービスを提供できます。
故障ノードが破損し、再起動できません。この場合、ノードが破損して再起動できないことを確認した後、データベース管理者がクラスタ管理操作を実行して、そのノードを削除する必要があります。削除プロセスについては、alter system delete server管理操作を参照してください。