再起動は一般的な運用保守作業の一つであり、マシンの短期間のメンテナンスやシステムパラメータを変更した後に有効にするための再起動が必要なシナリオに適しています。再起動中のノードのオフライン時間は、パラメータ 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より大きい)。クライアントがこれを認識すると、業務リクエストを当該ノードにルーティングしません。
最終的にStop 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ログの再生時間が短縮され、再起動が高速化されます。
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つのデプロイディレクトリでは、そのノード上の1つのobserverプロセスのみを停止できます。複数のノード上のobserverプロセスを停止する必要がある場合は、複数のマシンに順次ログインして操作を行う必要があります。
以下のコマンドを実行して、プロセスが停止したかどうかを確認します。
[admin@xxx oceanbase]$ ps aux | grep observerコマンド実行後に戻り値がない場合、プロセスは正常に停止したことを意味します。
(オプション)マシンのメンテナンスが必要な場合は、この手順でマシンを短時間メンテナンスします。
observerプロセスを起動します。
adminユーザーで、プロセスを起動するノードが存在するマシンにログインします。observerプロセスを起動します。
[admin@xxx oceanbase]$ cd /home/admin/oceanbase && ./bin/observer注意
1つのデプロイディレクトリでは、そのノード上の1つのobserverプロセスのみを起動できます。複数のノード上の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ビューの具体的な操作方法については、ノードの確認を参照してください。
関連ドキュメント
ノードに関するその他の運用操作については、以下を参照してください: