はじめに
Verticaは、3ノード以上の構成であれば、いずれかのノードがダウンした場合もサービスを継続(*)できます。バッチ処理は、データのロードを長時間おこなうため、ロード中に障害でノードがダウンする事も考えられます。本記事では、ロード中にノードダウンが発生した場合の動作を解説します。
(*)Verticaの可用性機能
https://www.ashisuto.co.jp/cm/analytics-database/data_fault_tolerant.html
Verticaの構成について
Verticaの複数ノード構成は、3ノードのケースが多いため、構成は以下のとおりとします。
項目名 | 条件 |
|---|---|
ノード数 | 3 |
K-Safety | 1 |
接続先ノード | ETLサーバからの最初の接続先は、ノード1とします。 |

障害発生パターンごとの動作
ロード処理が始まる前にVerticaがノードダウンしている場合やロード処理中にノードダウンしてしまった場合などが考えられます。本記事では、以下の4パターンを解説します。
①接続先ノードがダウン中の場合
障害発生状況
ノード1がダウン中に、ETLサーバからロード処理が実行されました。
ノード名 | ステータス |
|---|---|
ノード1 | DOWN |
ノード2 | UP |
ノード3 | UP |
実行結果
接続時フェイルオーバー(*)が設定されている場合は、接続先がノード2(またノード3)に変更されて、ロード処理が実行されます。接続時フェイルオーバーが設定されていない場合は、ノード1に接続できずエラー(例:”vsql: could not connect to server: 接続を拒否されました”)となり、ロード処理が開始されません。

(*)接続時フェイルオーバーの概要
https://www.ashisuto.co.jp/cm/analytics-database/failover.html
②接続先以外のノードがダウン中の場合
障害発生状況
ノード2がダウン中に、ETLサーバからロード処理が実行されました。
ノード名 | ステータス |
|---|---|
ノード1 | UP |
ノード2 | DOWN |
ノード3 | UP |
実行結果
接続時フェイルオーバーが設定されているかどうかに関わらず、ロード処理は実行されます。

③ロード処理中に接続先ノードがダウンした場合
障害発生状況
ETLサーバからロード処理が実行中に、ノード1がダウンしました。
ノード名 | ステータス |
|---|---|
ノード1 | ロード処理中にDOWN |
ノード2 | UP |
ノード3 | UP |
実行結果
接続時フェイルオーバーが設定されているかどうかに関わらず、ロード処理はエラー(例:”server closed the connection unexpectedly”)になり、ロールバックされます。

④ロード処理中に接続先以外のノードがダウンした場合
障害発生状況
ETLサーバからロード処理が実行中に、ノード2がダウンしました。
ノード名 | ステータス |
|---|---|
ノード1 | UP |
ノード2 | ロード処理中にDOWN |
ノード3 | UP |
実行結果
接続時フェイルオーバーが設定されているかどうかに関わらず、ロード処理はエラー(例:”ERROR 4142: Node failure during execution”)になり、ロールバックされます。ノード1とは、別のノード2もしくはノード3がノードダウンした場合も、ロード処理は失敗します。

参考情報
リカバリ中の「ロードバランス」と「接続時フェイルオーバー」の動作について
https://www.ashisuto.co.jp/cm/analytics-database/recovery_action.html
検証バージョンについて
この記事の内容はVertica 12.0で確認しています。
更新履歴
2023/07/04 「はじめに」の表現を修正
2023/06/16 本記事を公開