OpenText Analytics Database 旧Vertica

技術情報サイト

Analytics Database

ノードのリカバリ状況を確認する方法について

公開日:
更新日:
バックアップ・リカバリ
#トラブルシューティング リカバリ

はじめに

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が出力される。
・RECOVERED:リカバリ完了
・RECOVERING:リカバリ中
・ERROR_RETRY:リカバリ失敗

PHASE

リカバリのフェーズ、値は以下のいずれか。
・Historical:「DOWN」または「INITIALIZING」ステータス時に見逃した可能性のある履歴データをコピーする。 (ロック=未発生)
・Historical Dirty:リカバリが開始された後で、コミットされたDMLトランザクションを全てリカバリしなおす。(ロック=未発生)
・Current Replay Delete:リカバリ中に発生した削除トランザクションを全て再生する。(ロック="T"発生)
・Aggregate Projections:アグリゲートプロジェクションをリカバリする。(ロック="T"発生)

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は、現在ステートメントが実行されていないことを示す。
TRANSACTION_IDとSTATEMENT_IDの組み合わせで、セッション内のステートメントを一意に識別できる。

METHOD

Verticaが選択したリカバリ方法。値は以下のいずれか。
・incremental
・incremental-replay-delete
・split
・recovery-by-container

STATUS

プロジェクションのリカバリ状況。値は以下のいずれか。
・queued
・running
・finished
・ignored
・error-retry
・error-fatal

PROGRESS

リカバリ・タスクが完了している割合([0~100]の範囲)。タスクが完了後の値は、NULLを出力する。

DETAIL

リカバリ計画のタイプによって値は異なり、以下のいずれか。完了後、NULLが出力される。
・General recovery plans:計画(スキャン、ソート、書込み)の進捗状況(%)
・Recovery-by-container plans:「CopyStorage:総バイト数/コピーされたバイト数」
・Replay delete plans:「Delete:Replay deleteの合計数/Replay deleteされた数」

START_TIME

開始時刻

END_TIME

完了時刻

RUNTIME_PRIORITY

リソースプール内で処理を実行するために、割り当てるリソース(CPU、I/O)のサイズを示す。値は以下のいずれか。
・HIGH
・MEDIUM
・LOW

[実行例]

#リカバリ実行中の状態
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 本記事を公開