はじめに
Verticaで冗長化構成にしている場合、障害等でノードが停止し再起動すると、以下のような順番で停止したノードのステータスが遷移します。本稿では、障害からの復旧時、リカバリの状況を確認する方法を解説します。
※ノードが停止中に反映できなかったデータをコピーするため、一般的に「RECOVERING」の状態が最も時間がかかります。

[ステータスについて]
ステータス | 説明 |
|---|---|
DOWN | ノードは停止中の状態です。ノードを再起動した場合、Spreadデーモンを再起動します。また、ディスク上のカタログを読み込み、カタログで指定されたデータファイルをチェックします。 |
INITIALIZING | ノードは初期化中の状態です。Verticaのクラスタに参加し、未実行のカタログイベントをチェックして再実行します。 |
RECOVERING | ノードはリカバリ中の状態です。リカバリが必要なテーブル一覧を作成し、テーブルのリカバリを実行します。 |
READY | ノードは起動準備が完了した状態です。 |
UP | ノードは起動した状態です。すべてのデータベース上の処理に参加して、実行します。 |
リカバリ状況の確認
【1】停止しているノードを起動します。以下の実行例では、ノード1が停止しています。
[dbadmin@server02 ~]$ admintools -t list_allnodes
Node | Host | State | Version | DB
-------------------+-----------+-------+-----------------+--------
v_testdb_node0001 | 10.0.0.25 | DOWN | vertica-9.2.0.6 | testdb
v_testdb_node0002 | 10.0.0.26 | UP | vertica-9.2.0.6 | testdb
v_testdb_node0003 | 10.0.0.27 | UP | vertica-9.2.0.6 | testdb
[dbadmin@server02 ~]$ admintools -t restart_node -s v_testdb_node0001 -d testdb
Info: no password specified, using none
*** Restarting nodes for database testdb ***
Restarting host [10.0.0.25] with catalog [v_testdb_node0001_catalog]
Issuing multi-node restart
Starting nodes:
v_testdb_node0001 (10.0.0.25)
Starting Vertica on all nodes. Please wait, databases with a large catalog may take a while to initialize.
Node Status: v_testdb_node0001: (DOWN) v_testdb_node0003: (UP)
Node Status: v_testdb_node0001: (DOWN) v_testdb_node0003: (UP)
Node Status: v_testdb_node0001: (DOWN) v_testdb_node0003: (UP)
Node Status: v_testdb_node0001: (DOWN) v_testdb_node0003: (UP)
:【2】ノードのステータスを確認します。ノード1のステータスが「INITIALIZING」に遷移しました。
[dbadmin@server02]$ admintools -t list_allnodes
Node | Host | State | Version | DB
-------------------+-----------+--------------+-----------------+--------
v_testdb_node0001 | 10.0.0.25 | INITIALIZING | vertica-9.2.0.6 | testdb
v_testdb_node0002 | 10.0.0.26 | UP | vertica-9.2.0.6 | testdb
v_testdb_node0003 | 10.0.0.27 | UP | vertica-9.2.0.6 | testdb【3】ノードのステータスが「DOWN」または「INITIALIZING」の場合は、tailコマンドを「startup.log」に実行することで、リカバリの進捗状況を確認できます。「startup.log」は、リカバリが実行されているノードで確認してください。
[dbadmin@server01]$ tail -f /home/dbadmin/testdb/v_testdb_node0001_catalog/startup.log
...
{
"node" : "v_testdb_node0001",
"stage" : "Connecting to Spread",
"text" : "Connecting to spread /opt/vertica/spread/tmp/4803",
"timestamp" : "2019-04-12 15:07:47.920"
}
{
"node" : "v_testdb_node0001",
"stage" : "Waiting for Cluster Invite",
"text" : "Prepare to be invited",
"timestamp" : "2019-04-12 15:07:57.000"
}
...※後述の「TABLE_RECOVERY_STATUS」、「TABLE_RECOVERIES」、「PROJECTION_RECOVERIES」システムテーブルは、ノードのステータスが「DOWN」または「INITIALIZING」の場合は進捗状況を確認できません。
【4】ノードのステータスを確認します。ノード1のステータスが「RECOVERING」に遷移しました。
[dbadmin@server02 ~]$ admintools -t list_allnodes
Node | Host | State | Version | DB
-------------------+-----------+------------+-----------------+--------
v_testdb_node0001 | 10.0.0.25 | RECOVERING | vertica-9.2.0.6 | testdb
v_testdb_node0002 | 10.0.0.26 | UP | vertica-9.2.0.6 | testdb
v_testdb_node0003 | 10.0.0.27 | UP | vertica-9.2.0.6 | testdb【5】ノードのステータスが「RECOVERING」に遷移した場合は、システムテーブルを使用して、進捗状況を確認します。
【5】-①リカバリのサマリを確認する場合は、次のSQLを実行します。
SELECT * FROM TABLE_RECOVERY_STATUS;
[TABLE_RECOVERY_STATUS]
項目名 | 説明 |
|---|---|
NODE_NAME | ノード名 |
NODE_RECOVERY_START_TIME | 開始時刻 |
RECOVER_EPOCH | リカバリ対象のエポック |
RECOVERING_TABLE_NAME | 現在リカバリを実行中のテーブル名 |
TABLES_REMAIN | ノード上でリカバリが必要な残りのテーブル数 |
IS_RUNNING | 現在リカバリを実行中かどうか |
[実行例]
#リカバリ実行中の状態
dbadmin=> SELECT * FROM TABLE_RECOVERY_STATUS;
node_name | node_recovery_start_time | recover_epoch | recovering_table_name | tables_remain | is_running
-------------------+-------------------------------+---------------+---------------------------------------------------------------+---------------+------------
v_testdb_node0001 | 2019-04-12 15:08:01.751161+09 | 105 | public.t_p1; public.t_p2; public.t_p3; public.t4; public.t5; | 7 | t
v_testdb_node0002 | | | | 0 | f
v_testdb_node0003 | | | | 0 | f
(3 rows)
#リカバリ完了後の状態
dbadmin=> SELECT * FROM TABLE_RECOVERY_STATUS;
node_name | node_recovery_start_time | recover_epoch | recovering_table_name | tables_remain | is_running
-------------------+-------------------------------+---------------+-----------------------+---------------+------------
v_testdb_node0001 | 2019-04-12 15:08:01.751161+09 | 105 | | 0 | f
v_testdb_node0002 | | | | 0 | f
v_testdb_node0003 | | | | 0 | f
(3 rows)【5】-②テーブルのリカバリを確認する場合は、次のSQLを実行します。
SELECT * FROM TABLE_RECOVERIES;
[TABLE_RECOVERIES]
項目名 | 説明 |
|---|---|
NODE_NAME | ノード名 |
TABLE_OID | テーブルのOID |
TABLE_NAME | テーブル名 |
STATUS | テーブルのステータス、値は以下のいずれか。リカバリが開始前のテーブルはNULLが出力される。 |
PHASE | リカバリのフェーズ、値は以下のいずれか。 |
THREAD_ID | リカバリを実行したスレッドID |
START_TIME | 開始時刻 |
END_TIME | 完了時刻 |
RECOVER_PRIORITY | リカバリを実行するテーブルの優先度 |
RECOVER_ERROR | リカバリが失敗した場合のエラー内容 |
IS_HISTORICAL | 「t」の場合は、現在のプロセスのリカバリ情報が含まれる。 |
[実行例]
#リカバリ実行中の状態
dbadmin=> SELECT * FROM TABLE_RECOVERIES;
node_name | table_oid | table_name | status | phase | thread_id | start_time | end_time | recover_priority | recover_error | is_historical
-------------------+-------------------+-------------+------------+------------+--------------+-------------------------------+----------+----------------------+---------------+---------------
v_testdb_node0001 | 54043195528574598 | public.t_p1 | recovering | historical | 7f5b1d7fa700 | 2019-04-12 15:08:06.568041+09 | | 1000 | | f
v_testdb_node0001 | 54043195528574600 | public.t_p2 | recovering | historical | 7f5b1cff9700 | 2019-04-12 15:08:06.568105+09 | | 500 | | f
v_testdb_node0001 | 54043195528574602 | public.t_p3 | recovering | historical | 7f5b1dffb700 | 2019-04-12 15:08:06.568254+09 | | 1 | | f
v_testdb_node0001 | 54043195528574604 | public.t4 | recovering | historical | 7f5b13fff700 | 2019-04-12 15:08:06.568469+09 | | -9223372036854775807 | | f
v_testdb_node0001 | 54043195528574606 | public.t5 | recovering | historical | 7f5b137fe700 | 2019-04-12 15:08:06.568751+09 | | -9223372036854775807 | | f
(5 rows)
#リカバリ完了後の状態
dbadmin=> SELECT * FROM TABLE_RECOVERIES;
node_name | table_oid | table_name | status | phase | thread_id | start_time | end_time | recover_priority | recover_error | is_historical
-------------------+-------------------+-------------+-----------+-------+--------------+-------------------------------+-------------------------------+----------------------+---------------+---------------
v_testdb_node0001 | 54043195528574600 | public.t_p2 | recovered | | 7f5b1cff9700 | 2019-04-12 15:08:06.568105+09 | 2019-04-12 15:11:21.328437+09 | 500 | | t
v_testdb_node0001 | 54043195528574598 | public.t_p1 | recovered | | 7f5b1d7fa700 | 2019-04-12 15:08:06.568041+09 | 2019-04-12 15:11:21.981358+09 | 1000 | | t
v_testdb_node0001 | 54043195528574606 | public.t5 | recovered | | 7f5b137fe700 | 2019-04-12 15:08:06.568751+09 | 2019-04-12 15:11:22.182894+09 | -9223372036854775807 | | t
v_testdb_node0001 | 54043195528574604 | public.t4 | recovered | | 7f5b13fff700 | 2019-04-12 15:08:06.568469+09 | 2019-04-12 15:11:22.780779+09 | -9223372036854775807 | | t
v_testdb_node0001 | 54043195528578062 | public.t6 | recovered | | 7f5b1d7fa700 | 2019-04-12 15:11:22.271102+09 | 2019-04-12 15:11:24.712834+09 | -9223372036854775807 | | t
v_testdb_node0001 | 54043195528574602 | public.t_p3 | recovered | | 7f5b1dffb700 | 2019-04-12 15:08:06.568254+09 | 2019-04-12 15:11:50.740101+09 | 1 | | t
v_testdb_node0001 | 54043195528578064 | public.t7 | recovered | | 7f5b1dffb700 | 2019-04-12 15:11:50.777985+09 | 2019-04-12 15:11:51.865017+09 | -9223372036854775807 | | t
(7 rows)【5】-③プロジェクションのリカバリを確認する場合は、次のSQLを実行します。
SELECT * FROM PROJECTION_RECOVERIES;
[PROJECTION_RECOVERIES]
項目名 | 説明 |
|---|---|
NODE_NAME | ノード名 |
PROJECTION_ID | プロジェクションID |
PROJECTION_NAME | プロジェクション名 |
TRANSACTION_ID | トランザクションID |
STATEMENT_ID | 現在実行中のステートメントID。NULLは、現在ステートメントが実行されていないことを示す。 |
METHOD | Verticaが選択したリカバリ方法。値は以下のいずれか。 |
STATUS | プロジェクションのリカバリ状況。値は以下のいずれか。 |
PROGRESS | リカバリ・タスクが完了している割合([0~100]の範囲)。タスクが完了後の値は、NULLを出力する。 |
DETAIL | リカバリ計画のタイプによって値は異なり、以下のいずれか。完了後、NULLが出力される。 |
START_TIME | 開始時刻 |
END_TIME | 完了時刻 |
RUNTIME_PRIORITY | リソースプール内で処理を実行するために、割り当てるリソース(CPU、I/O)のサイズを示す。値は以下のいずれか。 |
[実行例]
#リカバリ実行中の状態
dbadmin=> SELECT * FROM PROJECTION_RECOVERIES;
node_name | projection_id | projection_name | transaction_id | statement_id | method | status | progress | detail | start_time | end_time | runtime_priority
-------------------+-------------------+-----------------+-------------------+--------------+-----------------------+----------+----------+--------------------------+-------------------------------+-------------------------------+------------------
v_testdb_node0001 | 49539595901204146 | public.t_p1_b1 | 45035996273705037 | 1 | recovery-by-container | running | | CopyStorage:4019673101/0 | 2019-04-12 15:08:06.579123+09 | | MEDIUM
v_testdb_node0001 | 49539595901204482 | public.t5_b1 | 45035996273705039 | 1 | recovery-by-container | running | | CopyStorage:4025510423/0 | 2019-04-12 15:08:06.579528+09 | | MEDIUM
v_testdb_node0001 | 49539595901204230 | public.t_p2_b1 | 45035996273705040 | 1 | recovery-by-container | running | | CopyStorage:4028087903/0 | 2019-04-12 15:08:06.579436+09 | | MEDIUM
v_testdb_node0001 | 49539595901204314 | public.t_p3_b1 | 45035996273705082 | 1 | recovery-by-container | running | | CopyStorage:756296184/0 | 2019-04-12 15:08:52.547789+09 | | HIGH
v_testdb_node0001 | 49539595901204188 | public.t_p2_b0 | 45035996273705041 | 1 | recovery-by-container | finished | | | 2019-04-12 15:08:06.579969+09 | 2019-04-12 15:08:52.727366+09 |
v_testdb_node0001 | 49539595901204398 | public.t4_b1 | 45035996273705042 | 1 | recovery-by-container | running | | CopyStorage:4004526404/0 | 2019-04-12 15:08:06.585342+09 | | MEDIUM
v_testdb_node0001 | 49539595901204104 | public.t_p1_b0 | 45035996273705036 | 1 | recovery-by-container | finished | | | 2019-04-12 15:08:06.580029+09 | 2019-04-12 15:08:52.970547+09 |
v_testdb_node0001 | 49539595901204440 | public.t5_b0 | 45035996273705038 | 1 | recovery-by-container | finished | | | 2019-04-12 15:08:06.579997+09 | 2019-04-12 15:08:52.778221+09 |
v_testdb_node0001 | 49539595901204356 | public.t4_b0 | 45035996273705043 | 1 | recovery-by-container | finished | | | 2019-04-12 15:08:06.585373+09 | 2019-04-12 15:08:52.928753+09 |
v_testdb_node0001 | 49539595901204272 | public.t_p3_b0 | 45035996273705044 | 1 | recovery-by-container | finished | | | 2019-04-12 15:08:06.585451+09 | 2019-04-12 15:08:52.545218+09 |
(10 rows)
#リカバリ完了後の状態
dbadmin=> SELECT * FROM PROJECTION_RECOVERIES;
node_name | projection_id | projection_name | transaction_id | statement_id | method | status | progress | detail | start_time | end_time | runtime_priority
-------------------+-------------------+-----------------+-------------------+--------------+-----------------------+----------+----------+--------+-------------------------------+-------------------------------+------------------
v_testdb_node0001 | 54043195528578144 | public.t7_b1 | 0 | | | ignored | | | | 2019-04-12 15:11:51.862788+09 |
v_testdb_node0001 | 54043195528578120 | public.t7_b0 | 0 | | | ignored | | | | 2019-04-12 15:11:51.862756+09 |
v_testdb_node0001 | 49539595901204188 | public.t_p2_b0 | 0 | | | ignored | | | | 2019-04-12 15:11:21.326003+09 |
v_testdb_node0001 | 49539595901204230 | public.t_p2_b1 | 0 | | | ignored | | | | 2019-04-12 15:11:21.326025+09 |
v_testdb_node0001 | 49539595901204104 | public.t_p1_b0 | 0 | | | ignored | | | | 2019-04-12 15:11:21.979298+09 |
v_testdb_node0001 | 49539595901204146 | public.t_p1_b1 | 0 | | | ignored | | | | 2019-04-12 15:11:21.979316+09 |
v_testdb_node0001 | 49539595901204440 | public.t5_b0 | 0 | | | ignored | | | | 2019-04-12 15:11:21.979371+09 |
v_testdb_node0001 | 49539595901204482 | public.t5_b1 | 0 | | | ignored | | | | 2019-04-12 15:11:21.979398+09 |
v_testdb_node0001 | 49539595901204356 | public.t4_b0 | 0 | | | ignored | | | | 2019-04-12 15:11:22.77903+09 |
v_testdb_node0001 | 49539595901204398 | public.t4_b1 | 0 | | | ignored | | | | 2019-04-12 15:11:22.779053+09 |
v_testdb_node0001 | 54043195528578068 | public.t6_b0 | 0 | | | ignored | | | | 2019-04-12 15:11:24.710685+09 |
v_testdb_node0001 | 54043195528578092 | public.t6_b1 | 0 | | | ignored | | | | 2019-04-12 15:11:24.710701+09 |
v_testdb_node0001 | 49539595901204272 | public.t_p3_b0 | 0 | | | ignored | | | | 2019-04-12 15:11:50.737441+09 |
v_testdb_node0001 | 49539595901204314 | public.t_p3_b1 | 0 | | | ignored | | | | 2019-04-12 15:11:50.737474+09 |
v_testdb_node0001 | 49539595901204230 | public.t_p2_b1 | 45035996273705040 | 1 | recovery-by-container | finished | | | 2019-04-12 15:08:06.579436+09 | 2019-04-12 15:11:21.276651+09 |
v_testdb_node0001 | 49539595901204188 | public.t_p2_b0 | 45035996273705041 | 1 | recovery-by-container | finished | | | 2019-04-12 15:08:06.579969+09 | 2019-04-12 15:08:52.727366+09 |
v_testdb_node0001 | 49539595901204398 | public.t4_b1 | 45035996273705042 | 1 | recovery-by-container | finished | | | 2019-04-12 15:08:06.585342+09 | 2019-04-12 15:11:22.270956+09 |
v_testdb_node0001 | 49539595901204314 | public.t_p3_b1 | 45035996273705082 | 1 | recovery-by-container | finished | | | 2019-04-12 15:08:52.547789+09 | 2019-04-12 15:11:50.628016+09 |
v_testdb_node0001 | 54043195528578068 | public.t6_b0 | 45035996273705197 | 1 | recovery-by-container | finished | | | 2019-04-12 15:11:23.051634+09 | 2019-04-12 15:11:24.511665+09 |
v_testdb_node0001 | 54043195528578092 | public.t6_b1 | 45035996273705198 | 1 | recovery-by-container | finished | | | 2019-04-12 15:11:23.008166+09 | 2019-04-12 15:11:24.421599+09 |
v_testdb_node0001 | 49539595901204104 | public.t_p1_b0 | 45035996273705036 | 1 | recovery-by-container | finished | | | 2019-04-12 15:08:06.580029+09 | 2019-04-12 15:08:52.970547+09 |
v_testdb_node0001 | 49539595901204146 | public.t_p1_b1 | 45035996273705037 | 1 | recovery-by-container | finished | | | 2019-04-12 15:08:06.579123+09 | 2019-04-12 15:11:21.751424+09 |
v_testdb_node0001 | 49539595901204440 | public.t5_b0 | 45035996273705038 | 1 | recovery-by-container | finished | | | 2019-04-12 15:08:06.579997+09 | 2019-04-12 15:08:52.778221+09 |
v_testdb_node0001 | 49539595901204482 | public.t5_b1 | 45035996273705039 | 1 | recovery-by-container | finished | | | 2019-04-12 15:08:06.579528+09 | 2019-04-12 15:11:21.536074+09 |
v_testdb_node0001 | 49539595901204356 | public.t4_b0 | 45035996273705043 | 1 | recovery-by-container | finished | | | 2019-04-12 15:08:06.585373+09 | 2019-04-12 15:08:52.928753+09 |
v_testdb_node0001 | 49539595901204272 | public.t_p3_b0 | 45035996273705044 | 1 | recovery-by-container | finished | | | 2019-04-12 15:08:06.585451+09 | 2019-04-12 15:08:52.545218+09 |
v_testdb_node0001 | 54043195528578144 | public.t7_b1 | 45035996273705234 | 1 | recovery-by-container | finished | | | 2019-04-12 15:11:51.380671+09 | 2019-04-12 15:11:51.772275+09 |
v_testdb_node0001 | 54043195528578120 | public.t7_b0 | 45035996273705233 | 1 | recovery-by-container | finished | | | 2019-04-12 15:11:51.337419+09 | 2019-04-12 15:11:51.602433+09 |
(28 rows)【6】ノードのステータスを確認します。ノード1のステータスが「UP」に遷移しました。
※「READY」は、基本的に時間がかからずに終了します。
[dbadmin@server02]$ admintools -t list_allnodes
Node | Host | State | Version | DB
-------------------+-----------+-------+-----------------+--------
v_testdb_node0001 | 10.0.0.25 | UP | vertica-9.2.0.6 | testdb
v_testdb_node0002 | 10.0.0.26 | UP | vertica-9.2.0.6 | testdb
v_testdb_node0003 | 10.0.0.27 | UP | vertica-9.2.0.6 | testdb参考情報
TABLE_RECOVERY_STATUS
https://www.vertica.com/docs/9.2.x/HTML/Content/Authoring/SQLReferenceManual/SystemTables/MONITOR/TABLE_RECOVERY_STATUS.htm
TABLE_RECOVERIES
https://www.vertica.com/docs/9.2.x/HTML/index.htm#Authoring/SQLReferenceManual/SystemTables/MONITOR/TABLE_RECOVERIES.htm
PROJECTION_RECOVERIES
https://www.vertica.com/docs/9.2.x/HTML/Content/Authoring/SQLReferenceManual/SystemTables/MONITOR/PROJECTION_RECOVERIES.htm
検証バージョンについて
この記事の内容はVertica 9.2で確認しています。
更新履歴
2019/12/11 table_recovery_status.tables_remainの説明修正
2019/04/25 本記事を公開