2026-02-24 - Vault HA Phase 5 Overhaul
Summary
Phase 5 of Vault Enterprise Hardening roadmap was incomplete - it assumed Raft storage backend, but vault-01 uses file storage. Added complete file→raft migration procedure plus detailed VM deployment, TLS certificate issuance, cluster join, and failover verification steps.
Root Cause
Original Phase 5 documentation gap:
| Assumption | Reality |
|---|---|
vault-01 uses |
vault-01 uses |
Just add nodes and join |
Must migrate storage backend first |
2-node cluster is fine temporarily |
2-node Raft is WORSE than 1-node (both must be up for quorum) |
Changes
Added
-
5.2 File to Raft Storage Migration - Complete 9-step migration procedure:
-
5.2.1 Check current storage backend
-
5.2.2 Backup current Vault data
-
5.2.3 Create migration configuration
-
5.2.4 Prepare Raft directory
-
5.2.5 Run migration (
vault operator migrate) -
5.2.6 Update vault.hcl for Raft
-
5.2.7 Start Vault and unseal
-
5.2.8 Verify migration
-
5.2.9 Cleanup
-
-
5.3 Deploy vault-02 and vault-03 - VM deployment options:
-
Storage location decision matrix (local SSD vs NAS)
-
cloud-init pattern reference to k3s-deployment
-
Vault installation loop
-
Per-node vault.hcl configuration
-
-
5.4 TLS Certificates for New Nodes - Automated cert issuance loop using Vault PKI
-
5.5 Join Cluster - Step-by-step cluster formation:
-
Start Vault on new nodes
-
Join to leader
-
Unseal new nodes
-
-
5.6 Verify HA Cluster - Expected output examples
-
5.7 DNS Load Balancing - Optional HAProxy/VIP guidance
-
5.8 Verify Failover - Actual failover test procedure
Files Modified
| File | Type | Description |
|---|---|---|
|
Changed |
Added ~400 lines to Phase 5 (file→raft migration, VM deployment, cluster join, verification) |
|
Added |
This file |
Technical Details
Key Configuration Change
storage "file" {
path = "/opt/vault/data"
}
storage "raft" {
path = "/opt/vault/raft"
node_id = "vault-01"
retry_join {
leader_api_addr = "https://vault-02.inside.domusdigitalis.dev:8200"
}
retry_join {
leader_api_addr = "https://vault-03.inside.domusdigitalis.dev:8200"
}
}
Related
-
k3s Deployment (cloud-init pattern reference)