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管理操作を参照してください。