High availability
For production deployments, you can run multiple replicas of a Mesh node in active-passive mode. All replicas share the same node identity and advertise the same routes. If the active replica goes down, Cloudflare automatically promotes a standby replica.
High availability provides resilience for CIDR route prefixes advertised by a Mesh node. When the active replica disconnects, Cloudflare promotes a standby so that traffic to the advertised subnets continues to flow.
This means HA is useful for nodes that have routes configured — nodes acting as subnet gateways for private networks behind them. If a node is only used for direct Mesh IP connectivity (no routes), HA has limited benefit because the node's Mesh IP is tied to the individual replica.
When you create a Mesh node with high availability enabled, Cloudflare generates a single token for that node. You install the Cloudflare One Client on multiple Linux hosts using this token. Each host registers as a replica of the same node.
- All replicas advertise the same CIDR routes.
- One replica is active at a time. The others are passive standby.
- If the active replica disconnects, Cloudflare automatically promotes a passive replica.
- Failover is handled by Cloudflare's network.
flowchart LR
subgraph replicas["Mesh node: web-server"]
R1["Replica 1 <br> (active)"]
R2["Replica 2 <br> (standby)"]
R3["Replica 3 <br> (standby)"]
end
CF((Cloudflare)) <--> R1
CF -. failover .-> R2
CF -. failover .-> R3
client["Client device"] <--> CF
When you create a Mesh node through the dashboard, high availability is enabled by default. To create a new node:
-
In the Cloudflare dashboard, go to Networking > Mesh.
Go to Mesh -
Select Add a node.
-
Follow the setup wizard. The node is created with HA enabled automatically.
-
Copy the install commands and run them on your Linux host.
To create a node with high availability via the API, set ha: true in the request body:
curl -X POST "https://api.cloudflare.com/client/v4/accounts/{account_id}/warp_connector" \ -H "Authorization: Bearer {api_token}" \ -H "Content-Type: application/json" \ -d '{ "name": "web-server", "ha": true }'The response includes a token field. Use this token to register replicas.
To add a replica to an existing high-availability node, install the Cloudflare One Client on a new Linux host and register it using the same node token.
-
In the Cloudflare dashboard, go to Networking > Mesh.
Go to Mesh -
Select your Mesh node.
-
Select Add a replica.
-
A dialog shows the install commands and the node's token.
-
On a new Linux host, run the install commands shown in the dialog.
Installation commands
curl -fsSL https://pkg.cloudflareclient.com/pubkey.gpg | sudo gpg --yes --dearmor -o /usr/share/keyrings/cloudflare-warp-archive-keyring.gpgecho "deb [signed-by=/usr/share/keyrings/cloudflare-warp-archive-keyring.gpg] https://pkg.cloudflareclient.com/ $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/cloudflare-client.listsudo apt-get update && sudo apt-get install -y cloudflare-warpsudo warp-cli connector new <TOKEN> && sudo warp-cli connectsudo rpm -ivh https://pkg.cloudflareclient.com/cloudflare-release-el8.rpmsudo yum install -y cloudflare-warpsudo warp-cli connector new <TOKEN> && sudo warp-cli connect-
Retrieve the node's token:
Terminal window curl "https://api.cloudflare.com/client/v4/accounts/{account_id}/warp_connector/{node_id}/token" \-H "Authorization: Bearer {api_token}"The response contains the token string.
-
Install the client and register on a new Linux host:
Terminal window curl -fsSL https://pkg.cloudflareclient.com/pubkey.gpg | sudo gpg --yes --dearmor -o /usr/share/keyrings/cloudflare-warp-archive-keyring.gpgecho "deb [signed-by=/usr/share/keyrings/cloudflare-warp-archive-keyring.gpg] https://pkg.cloudflareclient.com/ $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/cloudflare-client.listsudo apt-get update && sudo apt-get install -y cloudflare-warpTerminal window sudo warp-cli connector new <TOKEN> && sudo warp-cli connectTerminal window sudo rpm -ivh https://pkg.cloudflareclient.com/cloudflare-release-el8.rpmsudo yum install -y cloudflare-warpTerminal window sudo warp-cli connector new <TOKEN> && sudo warp-cli connect
The new replica will be in standby mode until the active replica disconnects.
To view all replicas and their HA status, query the connections API endpoint:
curl "https://api.cloudflare.com/client/v4/accounts/{account_id}/warp_connector/{node_id}/connections" \ -H "Authorization: Bearer {api_token}"The response includes each replica with its ha_status (active or passive), connection details, and the Cloudflare data center it is connected to:
{ "success": true, "result": [ { "id": "bf69f118-238e-11f1-b113-ee02f3be4a5b", "conns": [ { "colo_name": "lhr16", "origin_ip": "34.105.147.200", "opened_at": "2026-03-19T12:25:47.400Z" } ], "run_at": "2026-03-19T12:25:47.400Z", "ha_status": "active" }, { "id": "e07272a6-21fc-11f1-8997-e28f01ba3991", "conns": [ { "colo_name": "lhr14", "origin_ip": "35.246.81.139", "opened_at": "2026-03-19T02:38:37.203Z" } ], "run_at": "2026-03-19T02:38:37.203Z", "ha_status": "passive" } ]}- High availability is set at node creation time and cannot be changed afterward.
- You must install the client on at least two hosts for failover to work. A single replica means no redundancy.
- High availability requires the MASQUE transport protocol. WireGuard does not support HA. Mesh nodes use MASQUE by default.
- All replicas must be on the same subnet and have the same network routing configuration (Split Tunnels, static routes).
- HA provides resilience for CIDR route prefixes. Nodes without routes do not benefit from HA failover.
- Failover time depends on how quickly Cloudflare detects the active replica has disconnected (typically seconds).
- Inbound traffic (from Mesh clients to the subnet) fails over automatically on Cloudflare's network. Cloudflare routes traffic to the newly promoted active replica.
- Outbound traffic (from devices on the subnet through the Mesh node) does not fail over automatically. Your environment must detect that a different replica has been promoted to active and update routing tables to send traffic through the now-active host. There is no client-side failover for on-ramp traffic at this time.