再起動は一般的な運用保守作業の一つであり、マシンの短期間のメンテナンスやシステム構成パラメータの変更後に再起動が必要な場合に適しています。再起動中のノードのオフライン時間は、構成パラメータ server_permanent_offline_time で設定された時間内である必要があります。そうでない場合、ノードは永続的にオフライン状態となります。マシンのメンテナンスが長期間に及ぶ場合は、マシン交換の手順を実行する必要があります。マシン交換の詳細な操作については、ノードの交換を参照してください。
説明
クラスタレベルの構成パラメータ server_permanent_offline_time は、ノードのハートビート中断時間のしきい値を設定します。これは、ノードのハートビートがどの程度中断したら永続的にオフラインとみなし、永続的にオフラインとなったノード上のデータレプリカを自動的に補完するかを決定します。デフォルト値は3600秒です。この構成パラメータの詳細については、server_permanent_offline_timeを参照してください。
背景
OceanBaseデータベースは分散型データベースとして、典型的なデプロイアーキテクチャとしてマルチレプリカ構成が採用されています(例えば、同一都市内の3センター構成では3つのレプリカ、3地域にまたがる5センター構成では5つのレプリカが配置されます)。トランザクションコミット時にはPaxosプロトコルを利用して複数のレプリカ間で過半数のコミットを達成し、レプリカ間のデータ一貫性を維持します。これにより、少数派のレプリカに異常が発生した場合でもRPO=0というSLAを保証します。
STOP SERVER コマンドは、マルチレプリカアーキテクチャに基づき、業務への影響を与えることなくサーバーを再起動する効果を実現します。このコマンドは以下のロジックを実行します:
再起動対象ノード上のリーダーをすべて切り替え、再起動ノード以外の他のノード上のレプリカが過半数を満たすようにします。
Root Service上で再起動対象ノードをstoppedとしてマークします(ノードの状態は
ACTIVEであり、stop_timeフィールドが0より大きい)。クライアントがこれを認識すると、業務リクエストをそのノードにルーティングしません。
最終的にServerの停止に成功すると、再起動ノードによってプライマリ選出やクライアントエラーなどの問題が発生せず、業務トラフィックに対して完全に透過的です。もしStop Server操作が失敗した場合は、再起動を中止し、原因を確認する必要があります。例えば、レプリカ不足、RedoLogの遅延、投票メンバーの総数が過半数未満などが考えられる原因となり得ます。
操作手順
ノードの再起動の主な手順は以下の通りです:サービスを停止 → ダンプ → プロセスを終了 → プロセスを開始 → サービスを開始。
本記事では、クラスタ内の1つのノードを再起動する例を挙げて操作方法を説明します。複数のノードを再起動する必要がある場合は、この操作を複数回実行してください。
rootユーザーでクラスタのsysテナントにログインします。接続例は以下のとおりです。データベースへの接続時は、実際の環境に基づいてください。
obclient -h10.xx.xx.xx -P2883 -uroot@sys#obdemo -p***** -Aデータベースへの接続に関するより詳細な操作ガイドについては、データベース接続の概要(MySQLモード)およびデータベース接続の概要(Oracleモード)を参照してください。
以下のコマンドを実行して、ノードを隔離します。
ノードの再起動中は、サービスの連続性に影響を与える可能性があります。例えば、クラスタに1つまたは2つのノードしかない場合や、テナントのデータが2つのノードにのみ分散されている場合、ノードの再起動中にシステムがサービスを提供できなくなる可能性があります。Stop Server操作を実行してノードを隔離すると、システムはセキュリティチェックを実行し、ノードの再起動中にシステムサービスの連続性に影響を与えないようにします。ノードが正常に隔離されると、そのノードではサービスが提供されなくなります。Stop Server操作が失敗した場合は、クラスタのデプロイ状況を確認するか、エラーメッセージに従って問題を解決した後に再度Stop Server操作を実行する必要があります。または、ノードのサービス停止を許容できる場合は、このステップをスキップすることもできます。
obclient [(none)]> ALTER SYSTEM STOP SERVER 'svr_ip:svr_port';関連パラメータの説明は以下のとおりです:
svr_ip:停止対象のノードのIPアドレスを表します。svr_port:停止対象のノードのRPCポートを表します。デフォルトは2882です。
例:
obclient [(none)]> ALTER SYSTEM STOP SERVER '172.xx.xx.xx:2882';実行が成功すると、
oceanbase.DBA_OB_SERVERSビューの該当ServerのSTATUSフィールドを照会すると、フィールド値は引き続きACTIVEのまま変更されず、STOP_TIMEフィールドの値はNULLからサービス停止時刻に変更されます。oceanbase.DBA_OB_SERVERSビューを照会する具体的な操作については、ノードの確認を参照してください。以下のコマンドを実行して、再起動対象のノードにダンプ操作を実行し、再起動後のRedo Logの再生時間を短縮して再起動を高速化します。
obclient [(none)]> ALTER SYSTEM MINOR FREEZE SERVER = ('svr_ip:svr_port');関連パラメータの説明は以下のとおりです:
svr_ip:再起動対象のノードのIPアドレスを表します。svr_port:再起動対象のノードのRPCポートを表します。デフォルトは2882です。
例:
obclient [(none)]> ALTER SYSTEM MINOR FREEZE SERVER = ('172.xx.xx.xx:2882');ダンプ操作を実行した後、次の操作を実行する前にダンプが完了するまで待機する必要があります。ダンプ進捗状況を確認する操作については、ダンプ情報の確認を参照してください。
ダンプに関する詳細な説明については、ダンプを参照してください。
observerプロセスを停止します。
adminユーザーで、プロセスを停止するノードが存在するマシンにログインします。コマンドラインツールを使用して、
/home/admin/oceanbaseディレクトリに移動します。[admin@xxx /]$ cd /home/admin/oceanbaseOceanBaseデータベースソフトウェアのインストールディレクトリの詳細については、OBServerインストールディレクトリ構造を参照してください。
以下のコマンドを実行して、ノードのプロセスIDを確認し取得します。
[admin@xxx oceanbase]$ ps -ef | grep observer | grep -v grep admin 103364 1 99 2022 ? 51-17:24:41 /home/admin/oceanbase/bin/observer例では、
103364がノードのプロセスIDです。observerプロセスを停止します。
コマンドは以下のとおりです:
[admin@xxx oceanbase]$ kill -9 pidここで、
pidは停止対象のノードのobserverプロセスIDです。例:
[admin@xxx oceanbase]$ kill -9 103364注意
1つのデプロイメントディレクトリでは、そのノード上のobserverプロセスを1つだけ停止できます。複数のノード上のobserverプロセスを停止する必要がある場合は、順番に複数のマシンにログインして操作を実行する必要があります。
以下のコマンドを実行して、プロセスが停止されたかどうかを確認します。
[admin@xxx oceanbase]$ ps aux | grep observerコマンド実行後に返信がない場合、プロセスは正常に停止されたことを意味します。
(オプション) マシンのメンテナンスが必要な場合は、このステップでマシンを短時間メンテナンスします。
observerプロセスを起動します。
adminユーザーで、プロセスを起動するノードが存在するマシンにログインします。observerプロセスを起動します。
[admin@xxx oceanbase]$ cd /home/admin/oceanbase && ./bin/observer注意
1つのデプロイメントディレクトリでは、そのノード上のobserverプロセスを1つだけ起動できます。複数のノード上のobserverプロセスを起動する必要がある場合は、順番に複数のマシンにログインして操作を実行する必要があります。
OceanBaseデータベースソフトウェアのインストールディレクトリの詳細については、OBServerインストールディレクトリ構造を参照してください。
実行が成功すると、
oceanbase.DBA_OB_SERVERSビューのSTART_SERVICE_TIMEフィールドを照会できます。この値がNULLでない場合、observerプロセスの起動に成功したことを意味します。
以下のコマンドを実行して、ノードサービスを起動します。
obclient [(none)]> ALTER SYSTEM START SERVER 'svr_ip:svr_port';ここで:
svr_ip:起動対象のノードのIPアドレスを表します。svr_port:起動対象のノードのRPCポートを表します。デフォルトは2882です。
例:
obclient [(none)]> ALTER SYSTEM START SERVER '172.xx.xx.xx:2882';実行が成功すると、
oceanbase.DBA_OB_SERVERSビューのSTOP_TIMEフィールドを照会できます。この値がNULLである場合、そのノードのサービス起動に成功し、外部にサービスを提供できることを意味します。oceanbase.DBA_OB_SERVERSビューを照会する具体的な操作については、ノードの確認を参照してください。
関連ドキュメント
ノード関連の運用保守操作の詳細については、以下を参照してください: