VaultのIntegrated StorageはRaftベースの内蔵ストレージで、外部のキー・バリューストア無しでHAを実現します。小中規模〜標準的な構成では第一選択肢になり得ます。
Ops観点では、奇数ノードの配置、アドレス(api_addr/cluster_addr)の整合、スナップショット運用、障害時のクォーラム復旧フローが頻出論点です。
Integrated Storage (Raft) はVaultプロセスに内蔵された分散ログ複製エンジンです。リーダーが書き込みを直列化し、フォロワーへレプリケーションすることで一貫性を担保します。外部のConsulなどに依存しないため、構成要素が少なくデプロイが容易です。
選定の考えどころは「外部依存を減らしたい」「標準的な可用性(3または5ノード)を確保したい」「データセンター内での低レイテンシ通信が見込める」ケースです。多目的KVとしてConsulを既に運用しているならConsulバックエンドも候補になりますが、新規にVault専用で組むならRaftが実務的にシンプルです。
基本は同一リージョン内の複数AZに3ノード分散です。5ノードはより高可用ですがコストとレイテンシが上がります。コントロールプレーン(クラスタ通信: 8201/TCP)はノード間で相互到達、データプレーン(API: 8200/TCP)はクライアント/LBから到達可能にします。
クォーラムは3ノードなら2、5ノードなら3が必要です。ノードは同一のVaultバージョンで揃え、時刻同期(NTP)とTLSを必須化します。APIアドレス(api_addr)はクライアント向け、クラスタアドレス(cluster_addr)はRaftピア間で使用される点を混同しないことが重要です。
3ノードRaftクラスタ (3 AZ, LB経由アクセス)
設定はserver.hclでapi_addr/cluster_addr、listener(8200/8201, TLS)、storage "raft"(path、node_id、retry_join)を定義します。初期化は最初のノードでvault operator init、以降のノードはvault operator raft joinで参加します。
join後はunsealを行い、peersが揃っていることを確認します。スナップショットはリーダーから取得するのが安全です。
Vault server.hcl (Raft) と初期化コマンド例
# /etc/vault.d/server.hcl
ui = true
api_addr = "https://vault-1.example.com:8200"
cluster_addr= "https://vault-1.example.com:8201"
listener "tcp" {
address = "0.0.0.0:8200"
tls_disable = 0
tls_cert_file = "/etc/vault.d/certs/vault.crt"
tls_key_file = "/etc/vault.d/certs/vault.key"
}
storage "raft" {
path = "/opt/vault/data"
node_id = "vault-1"
# 複数エントリ可。いずれかのリーダーに到達できれば自動参加を試行
retry_join {
leader_api_addr = "https://vault-1.example.com:8200"
# tls_servername や ca_cert_file などを必要に応じて指定
}
retry_join {
leader_api_addr = "https://vault-2.example.com:8200"
}
}
# 初期化(1台目)
$ export VAULT_ADDR=https://vault-1.example.com:8200
$ export VAULT_CACERT=/etc/vault.d/certs/ca.crt
$ vault operator init -key-shares=5 -key-threshold=3 > init.txt
$ vault operator unseal # しきい値回数実施
# 2台目以降(例: vault-2)
$ export VAULT_ADDR=https://vault-2.example.com:8200
$ vault operator raft join https://vault-1.example.com:8200
$ vault operator unseal
# ピア確認(どのノードでも)
$ vault operator raft list-peersRaftは強整合リーダー方式です。書き込みはリーダーで受け付け、過半数にレプリケートされてコミットされます。スタンバイはリクエストをリーダーへ転送します。したがって、リーダーと各ピア間のレイテンシがスループットと待ち時間に直結します。
スナップショットはログ肥大化を防ぎ、再起動や再参加時の復元時間を短縮します。高IOPS/低レイテンシの永続ディスクを選び、CPU/メモリはワークロード(トークン発行・暗号操作)に見合うように見積もります。
バックアップはRaftスナップショットで取得します。原則リーダーから取得し、安全なストレージに世代管理します。復元は新規またはクリーンなデータディレクトリに対して行います。
アップグレードは一度に1ノードずつのローリングで実施し、常にクォーラムを維持します。ノードを停止→アップグレード→起動→安定化を確認し、次ノードへ進みます。リリースノートの互換性事項に従います。
クォーラム喪失やハード障害でノードを除去する場合、peer一覧を確認し、該当ノードをremoveし、必要であればスナップショットから再構築します。
Raft統合ストレージは外部依存を排しHAを実現しますが、既存のConsul運用資産やKVを兼用したい場合はConsulバックエンドも合理的です。Fileバックエンドは単一ノード向けでHA用途には不適です。
試験では、奇数ノード原則、api_addrとcluster_addrの混同、スナップショットの取得先、クォーラム喪失時の対処(ピア除去と再参加)が狙われます。
| 項目 | Raft統合ストレージ | Consulバックエンド | Fileバックエンド |
|---|---|---|---|
| HA対応 | 対応(内蔵Raftでリーダー選出/複製) | 対応(Consulのセッション/ロックを利用) | 非対応(単一ノード用途) |
| 外部依存 | 不要(追加ミドルなし) | 必要(Consulクラスター) | 不要 |
| 運用複雑度 | 低(構成要素が少ない) | 中〜高(Consul運用が別途必要) | 低(ただしHA不可) |
| バックアップ | vault operator raft snapshot | consul snapshot など | ファイルコピー(一貫性課題あり) |
| 適合シナリオ | Vault専用で簡素・標準HAを実現 | 既存Consulを活用/多目的KVと統合 | 検証/単体用途で簡易に |
Raftピア通信とAPIの双方でTLSを必須化し、証明書のSANにapi_addr/cluster_addrのFQDNまたはIPを含めます。TLS検証が失敗するとjoinやレプリケーションが不安定になります。
保存データはVaultのストレージバリアにより暗号化されます。スナップショットも機微情報を含むため、取得権限の厳格化と保管先の暗号化・アクセス制御が必要です。監視はヘルスエンドポイントとtelemetryを組み合わせ、ピア数、リーダー遷移、レプリケーション遅延を継続観測します。
Ops
問題 1
外部ミドルウェアを増やさずにVault OSSで高可用(HA)を実現したい。標準的かつ推奨度の高い構成はどれか。
正解: A
HAをシンプルに実現する推奨構成は、奇数ノード(一般に3)でのIntegrated Storage (Raft) です。LBはAPI(8200)向け、ピア間は8201で相互到達が必要。FileはHA非対応、2ノードはクォーラム喪失リスク、8201閉鎖はクラスタ不全を招きます。
api_addrとcluster_addrの違いは?
api_addrはクライアント/LBがアクセスするエンドポイント、cluster_addrはVaultノード間(Raftピア)の通信に使用されるアドレスです。証明書のSANと到達性が双方で満たされている必要があります。
スナップショットはどこで取得・復元すべき?
原則リーダーノードで取得・復元を実施します。取得は vault operator raft snapshot save、復元は停止状態でデータディレクトリをクリーンにしてから vault operator raft snapshot restore を用います。
ノード障害で戻らない場合の対処は?
vault operator raft list-peers でピアを確認し、恒久故障なら remove-peer でクラスタから除去します。その後、新しいノードをクリーンなデータディレクトリで起動し、raft join で再参加させます。常にクォーラムを維持する順序で進めてください。
NicheeLab編集部
データエンジニアリング・クラウド資格の専門家。Databricks・Snowflake等の認定資格を保有し、実務経験に基づいた問題作成・解説を行っています。NicheeLab運営。
Vault のコア概念を最短距離で理解する:Secret / Auth / Policy / Token
HashiCorp Vault Associate レベルで押さえるべきコア概念(Secret Engine、Auth ...
Vault Operations Professional: 上位資格としての範囲を実務目線で押さえる
HashiCorp Vault Operations Professional(Ops Pro)の出題範囲を、Assoc...
Vaultにおけるパスベースのルーティング: マウントとAPI構造を読み解く
HashiCorp Vaultのパスベースのルーティングを、マウント設計とAPIパスの観点から整理。Associateレ...
Vault Tokens の基礎: 認証の起点となる概念
HashiCorp Vault におけるトークンの役割、種類、ライフサイクル、ポリシー連携、設計パターンをAssocia...
Vault のトークン種類を正しく使い分ける: service / batch 実践
HashiCorp Vault Associate 向けの試験対策と実務運用を両立させた、service トークンと b...