はじめに

Verticaは、3ノード以上の構成であれば、いずれかのノードがダウンした場合もサービスを継続(*)できます。バッチ処理は、データのロードを長時間おこなうため、ロード中に障害でノードがダウンする事も考えられます。本記事では、ロード中にノードダウンが発生した場合の動作を解説します。

(*)Verticaの可用性機能
  http://vertica-tech.ashisuto.co.jp/data_fault_tolerant/

Verticaの構成について

Verticaの複数ノード構成は、3ノードのケースが多いため、構成は以下のとおりとします。
項目名条件
ノード数3
K-Safety1
接続先ノードETLサーバからの最初の接続先は、ノード1とします。

障害発生パターンごとの動作

ロード処理が始まる前にVerticaがノードダウンしている場合やロード処理中にノードダウンしてしまった場合などが考えられます。本記事では、以下の4パターンを解説します。

①接続先ノードがダウン中の場合

障害発生状況

ノード1がダウン中に、ETLサーバからロード処理が実行されました。
ノード名ステータス
ノード1DOWN
ノード2UP
ノード3UP

実行結果

接続時フェイルオーバー(*)が設定されている場合は、接続先がノード2(またノード3)に変更されて、ロード処理が実行されます。接続時フェイルオーバーが設定されていない場合は、ノード1に接続できずエラー(例:”vsql: could not connect to server: 接続を拒否されました”)となり、ロード処理が開始されません。



(*)接続時フェイルオーバーの概要
  http://vertica-tech.ashisuto.co.jp/failover/

②接続先以外のノードがダウン中の場合

障害発生状況

ノード2がダウン中に、ETLサーバからロード処理が実行されました。
ノード名ステータス
ノード1UP
ノード2DOWN
ノード3UP

実行結果

接続時フェイルオーバーが設定されているかどうかに関わらず、ロード処理は実行されます。

③ロード処理中に接続先ノードがダウンした場合

障害発生状況

ETLサーバからロード処理が実行中に、ノード1がダウンしました。
ノード名ステータス
ノード1ロード処理中にDOWN
ノード2UP
ノード3UP

実行結果

接続時フェイルオーバーが設定されているかどうかに関わらず、ロード処理はエラー(例:”server closed the connection unexpectedly”)になり、ロールバックされます。


④ロード処理中に接続先以外のノードがダウンした場合

障害発生状況

ETLサーバからロード処理が実行中に、ノード2がダウンしました。
ノード名ステータス
ノード1UP
ノード2ロード処理中にDOWN
ノード3UP

実行結果

接続時フェイルオーバーが設定されているかどうかに関わらず、ロード処理はエラー(例:”ERROR 4142: Node failure during execution”)になり、ロールバックされます。ノード1とは、別のノード2もしくはノード3がノードダウンした場合も、ロード処理は失敗します。

参考情報

リカバリ中の「ロードバランス」と「接続時フェイルオーバー」の動作について
http://vertica-tech.ashisuto.co.jp/recovery_action/

検証バージョンについて

この記事の内容はVertica 12.0で確認しています。

更新履歴

2023/07/04 「はじめに」の表現を修正
2023/06/16 本記事を公開