Console deployments: Clustering is not available natively in the Maverics Console. To enable clustering for Console-deployed Orchestrators, use the config override feature. Config override requires enablement for your organization — contact your Strata account team or Strata support to enable it.
How It Works
Clustering uses two network channels:- Membership channel — A gossip protocol for discovering and monitoring cluster members. Nodes exchange heartbeats to detect failures and maintain a consistent membership view.
- Data channel — A dedicated plane for replicating session data, cache entries, and routing decisions across nodes.
encryption.psk pre-shared key. All nodes in a cluster must use the same PSK value. The optional nodeKey.file provides a persistent identity for the node across restarts.
The
experimental.clusters feature flag must be set to true in the features map. Without the flag, the Orchestrator ignores cluster configuration and runs as a standalone instance. See Feature Flags for details.Discovery Methods
The Orchestrator supports two methods for cluster members to find each other.Static Discovery
Static discovery lists known node addresses directly. Use this when cluster members have stable, known IP addresses or hostnames.static.nodes array provides the membership endpoint of a peer. The current node’s own address can be included — the gossip protocol ignores self-connections.
DNS SRV Discovery
DNS SRV discovery queries DNS SRV records to find cluster members dynamically. Use this in container orchestration environments (Kubernetes, ECS) where node addresses change.pollInterval controls how frequently the Orchestrator queries DNS for updated membership records. Shorter intervals detect new nodes faster but increase DNS load.
Cluster-Backed Services
Once a cluster is defined, other configuration sections can reference it by name to share state across nodes.Session Store
Store user sessions in the cluster for shared session state across all nodes:Cache
Create a cluster-backed cache store for distributed data sharing:HTTP Routing
Route incoming requests across cluster nodes so that any node can handle any request:Field Reference
| Key | Type | Default | Required | Description |
|---|---|---|---|---|
clusters[].name | string | — | Yes | Cluster name, referenced by session store, cache, and routing configuration |
clusters[].disabled | boolean | false | No | Disable the cluster without removing its configuration |
clusters[].addresses.membership | string (multiaddr) | — | Yes | Gossip protocol bind address for cluster membership |
clusters[].addresses.data | string (multiaddr) | — | Yes | Data plane bind address for session, cache, and routing traffic |
clusters[].discovery.method | string | — | Yes | Discovery method: "static" or "srvdns" |
clusters[].discovery.static.nodes[].endpoints.membership | string (multiaddr) | — | Yes (static) | Peer node membership address |
clusters[].discovery.srvDNS.dnsAddress | string | — | No (srvdns) | DNS server address and port for SRV lookups |
clusters[].discovery.srvDNS.pollInterval | duration string | — | No (srvdns) | How often to poll DNS for membership changes |
clusters[].discovery.srvDNS.names | array of strings | — | Yes (srvdns) | SRV record names to query for peer discovery |
clusters[].encryption.psk | string | — | Yes | Pre-shared key for establishing trust between cluster nodes (use a secret reference) |
clusters[].encryption.nodeKey.file | string | — | No | File path for a persistent node key pair |
/ip4/<address>/tcp/<port>.