Hemanth Chinnadandluru / Integration & Security
← All Vault posts

Why Vault HA needs a load balancer — and the design decisions that matter

2026-08Vault11 min read

A three-node Vault cluster can survive a node failure, but that does not automatically give applications a highly available endpoint. The active Vault node can change during maintenance, upgrades, restarts, network failures or leader election. Applications should not need to know which physical node is active at any point in time.

That is where the load balancer fits. It gives clients one stable Vault address while the cluster is free to move leadership between nodes behind it.

The important part is that Vault is not a normal stateless web farm. There is one active node, standby nodes participate in the HA cluster, and Vault has its own request-forwarding path between servers. A good load-balancer design works with that model rather than trying to replace it.

The role of the load balancer

The load balancer is the stable front door. Vault still owns leader election, Raft replication and request forwarding inside the cluster.

Target architecture

Applications CLI · UI · Agents HTTPS Load Balancer VIP / FQDN Layer 4 · TLS passthrough TCP 8200 Vault Node 1 Active leader Vault Node 2 Standby / performance standby Vault Node 3 Standby / performance standby Direct node-to-node TCP 8201 · not load-balanced

Clients use the load-balanced address. Vault nodes use their own direct cluster_addr values for Raft, replication and request forwarding.

What happens when a request hits a standby?

With request forwarding enabled, a standby does not need the load balancer to find the active node for every request. The client connects through the load balancer, the selected Vault node terminates TLS, and if the request requires the active node, Vault forwards it internally over the cluster connection.

  1. The client connects to the Vault load-balancer endpoint.
  2. The load balancer selects a healthy Vault node on the API port.
  3. The selected Vault node terminates the client TLS session.
  4. If it is active, it processes the request.
  5. If it is standby, Vault forwards the request to the active node over port 8201.
  6. The response is returned through the node that originally received the client request.
Important distinction. The client load balancer handles port 8200. Vault's internal forwarding, Raft and replication traffic uses port 8201 and must travel directly between Vault nodes.

Layer 4 with TLS passthrough is the cleanest design

HashiCorp's validated VM design recommends a TCP-based Layer 4 load balancer with TLS passthrough. The load balancer forwards the encrypted TCP stream to Vault and Vault terminates TLS.

Client
  → HTTPS
Load balancer
  → encrypted TCP stream
Vault node :8200
  → TLS terminates here

Certificate design with TLS passthrough

Because Vault terminates TLS, the certificate presented by every Vault node must be valid for the hostname clients use. If clients connect to https://vault.example.com, that name should be present in the SAN of the listener certificate used by every Vault node.

NamePurposeCertificate consideration
vault.example.comClient-facing load-balanced endpointInclude in the Vault listener certificate SAN.
vault-01.example.comDirect node administrationInclude if direct node TLS access is required.
Node cluster_addrVault server-to-server trafficMust be directly routable between Vault nodes; do not point it at the LB.

Health checks are where most designs diverge

Vault exposes /v1/sys/health, which returns different status codes depending on node state.

Default codeVault stateRouting meaning
200Initialized, unsealed, activeHealthy active leader.
429Unsealed ordinary standbyHealthy HA member, but not active.
472DR secondaryTreat according to the DR endpoint design.
473Performance standbyCan serve qualifying reads locally in Enterprise.
474Standby cannot connect to activeDo not treat as a healthy HA member.
501Not initializedRemove from service.
503SealedRemove from service.
530Removed from clusterRemove from service.

TCP health check or HTTPS health check?

CheckStrengthLimitation
TCP 8200Simple and widely supported.A listening port does not prove that Vault is unsealed and HA-healthy.
HTTPS /v1/sys/healthUnderstands Vault state.The LB must support HTTPS probing while preserving TLS passthrough for client traffic.

HashiCorp's validated design prefers a load balancer that can combine TLS passthrough with an HTTPS health check.

Which nodes should remain in the pool?

Healthy HA members

This pattern lets Vault's request-forwarding model do its job. An ordinary standby returns 429 by default. If the load balancer only accepts 200, the health API can map standby state to the active code:

/v1/sys/health?standbyok=true

For Enterprise performance standbys:

/v1/sys/health?perfstandbyok=true

If both ordinary and performance standbys are intentionally eligible and the monitor expects only 200, use the appropriate health parameters for both node types.

Active only

A stricter monitor can mark only the active node as healthy. This eliminates the standby-to-active forwarding hop, but it is a design choice rather than a Vault requirement.

PropertyHealthy HA membersActive only
Vault request forwardingUsed when standby receives a request.Usually avoided for client requests.
Pool sizeMultiple nodes can remain eligible.Normally one node.
Health logicMust recognize valid standby states.Usually expects active status only.
Operational modelVault discovers the leader internally.LB monitor tracks leader state.

Performance standbys change the performance story

Vault Enterprise performance standbys can process many read-only requests locally. Requests that require a storage write are forwarded to the active node. With the right edition and health-check configuration, the load balancer can therefore contribute to read scaling as well as availability.

Do not assume every standby scales reads. Ordinary HA standbys and Enterprise performance standbys are different roles. Confirm the feature entitlement and actual node state before designing for horizontal read scaling.

The ports are simple — but the boundaries matter

SourceDestinationPortPurposeThrough LB?
ClientsLoad balancer443 or 8200/TCPVault API endpointYes
Load balancerVault nodes8200/TCPVault API trafficYes
Vault nodeVault node8201/TCPRaft, replication and request forwardingNo
Vault nodeVault node8200/TCPCluster bootstrap / API operations where requiredNo

api_addr and cluster_addr are not interchangeable

The cluster_addr must identify the individual Vault node and be directly reachable from its peers. It should not resolve to the load balancer.

For api_addr, HashiCorp distinguishes between clients that can directly reach individual nodes and environments where the load balancer is the only reachable address. Node-specific API addresses are preferable where direct access is possible because fallback client redirection can otherwise loop back through the load balancer. In normal modern HA operation, request forwarding should be the primary behavior.

What happens during leader failure?

  1. The current active Vault node becomes unavailable.
  2. Raft elects a new active node from the remaining eligible members.
  3. Standbys update their forwarding connection to the new leader.
  4. The load balancer health state converges as probes run.
  5. Applications continue using the same Vault DNS name or VIP.

There can still be a short period of retries while election and health detection converge. HA means the service recovers automatically; it does not guarantee that every in-flight request survives a node failure.

The load balancer must not become the new single point of failure

A three-node Vault cluster behind one non-redundant load-balancer instance still has a single point of failure. The client endpoint itself should therefore use the HA mechanism provided by the chosen platform.

Failure scenarios worth testing

TestExpected result
Stop the active Vault nodeA standby becomes active; clients keep the same endpoint.
Seal one standbyThe health monitor removes or avoids the sealed node.
Break 8201 connectivity for one standbyThe node becomes HA-unhealthy and should not remain eligible.
Restart a standbyIt rejoins and becomes eligible after Vault and the monitor consider it healthy.
Fail one LB componentThe Vault service endpoint remains available through the redundant LB path.
Rotate the Vault listener certificateClients still validate the load-balanced hostname on every node.

Validation checklist

Common design mistakes

Design recommendation

The load balancer should make Vault easier for clients to consume, not make the cluster more complicated. One stable endpoint, end-to-end TLS, state-aware health checks and direct server-to-server clustering are the design principles that matter.

Further reading


Questions or corrections? Feel free to send me a note.

Contact

Get in touch.

Questions, feedback or corrections on an article? Feel free to reach out.