Set Up Disaster Recovery Replication
Disaster Recovery (spec.activeRedis.mode: peerof) is the hot-standby topology: an upstream instance fans out directed replication links to one or more downstream instances, each ready to be promoted if the upstream datacenter is lost. Setting it up involves two parts — enabling cross-datacenter replication on each Redis instance, and establishing a connection from the downstream instance to the upstream instance.
For the alternative topology, in which every datacenter accepts writes, see Set Up Active-Active Replication.
In a disaster recovery group, the role of each Redis instance is not fixed; it can be either an upstream or a downstream. The downstream does not restrict data writing, but data written to the downstream will be overwritten by data synchronized from the upstream or cause synchronization failure due to data type conflicts.
TOC
Choose the procedure for your Redis versionRedis 7.2 — new moduleStep 1: Confirm the default account in each datacenterStep 2: Enable replication on the upstream instanceStep 3: Expose the upstream proxyStep 4: Enable replication on the downstream instanceStep 5: Create the connection on the downstream sideStep 6: VerifyRedis 6.0 — legacy moduleUpstream sideUse LoadBalancer as the access address for the upstream ProxyDownstream sidePre-flight inspectionRemoving a connectionCredential rotationChoose the procedure for your Redis version
The setup procedure differs between the two module generations. Follow the section that matches your Redis version.
Replication between Redis 6.0 and Redis 7.2 is not supported. See Module generations and version applicability.
Redis 7.2 — new module
The new module requires a peer-auth credential: every instance in the replication group binds a RedisUser through spec.activeRedis.redisUserRef. The operator pushes that credential to every node, and both inbound and outbound peer links authenticate with it. Enabling replication without a binding is rejected at admission, and the module rejects all inbound peer replication.
Bind the instance's own default account. Every instance already has one — its own reconcile creates it — so nothing has to be provisioned; the binding only names it.
The module accepts an inbound peer only when the credential it presents matches the local peer-auth credential. Binding the default account therefore requires every member of the group to carry the same default password.
This is not automatic: default passwords are generated per instance. Set the same default password on every member before you wire the links.
Step 1: Confirm the default account in each datacenter
The default-account RedisUser is named after the instance:
Check that it is provisioned in both datacenters — the binding is rejected unless its phase is Success:
The binding itself is set in Step 2, along with the rest of the replication configuration.
Binding the default account widens what that password grants: anything holding it can act as a replication peer. A custom RedisUser narrows that, and lets the replication credential be rotated independently of the instance password. It must reference the local instance, carry a password Secret of its own that no other peer-auth RedisUser uses, reach status.phase: Success, and carry the same username and the same password value in every datacenter. A system account is always refused.
Step 2: Enable replication on the upstream instance
The range of serviceID is [0-15] and it must be unique within the replication group. It cannot be changed later, and replication cannot be turned off once enabled.
The instance must also satisfy the new module's constraints, which are enforced by admission:
customConfig.appendonlymust not beyes— the new module is RDB-only.customConfig.databasesmust be<= 16— the module refuses to load beyond 16 databases, and the pods would crash-loop.
Step 3: Expose the upstream proxy
After enabling replication, the proxy provides a NodePort access address by default. A single NodePort-based access address is not highly available. In a production environment, use a LoadBalancer address:
Each instance creates a proxy Service named activeredis-proxy-<instance-name>.
For Sentinel instances, the instance name needs to be prefixed with
rfr-.
The proxy Service of a peerof instance exposes a single port, 6379. The proxy carries the RESP control plane and the replication stream on it, telling the two apart per session, so the downstream needs to reach only that one address — the one you put in spec.addresses. No 7379 port is created in Disaster Recovery mode, and none has to be opened between datacenters.
Connection admission dials the endpoint it resolves for the replication stream and rejects the connection if it is unreachable. With spec.peerPort left unset, that is the address in spec.addresses[0] itself.
Step 4: Enable replication on the downstream instance
Confirm the downstream's default account as in Step 1, and make sure its default password matches the upstream's. Then enable replication with a different serviceID:
Step 5: Create the connection on the downstream side
The ActiveRedisConnection is created in the downstream cluster. spec.instance names the local (downstream) instance, and spec.addresses points at the upstream proxy's RESP endpoint.
The connection name becomes the module's peer name, which is stricter than Kubernetes naming:
- it must start with a letter —
1connis rejected; reset,clear,all, andlistare reserved words and are rejected.
An instance may hold at most one ActiveRedisConnection — its own upstream link. A one-upstream-to-many-downstreams fan-out is built by creating a connection in each downstream cluster, all pointing at the same upstream.
Step 6: Verify
The upstream instance's ActiveRedis resource reports the fan-out through status.downstreamPeerCount.
Inspect the connection for per-shard synchronization detail:
status.shards[].status indicates the connection status of the shard, and status.shards[].syncStatus indicates the data synchronization status: PartialSync (incremental synchronization of Oplog) or FullSync (RDB is being synchronized).
status.credentialMode: peer-auth-global records that the module-side peer records hold no inline credential — outbound dials read the node-local peer-auth credential, so a rotation is picked up on the next re-dial.
The native Redis Sentinel mode does not have the concept of shards. Here, a master-replica pair of Sentinel is abstracted as
shard 0to be compatible with the same data structure as the Redis cluster mode.
Redis 6.0 — legacy module
Redis 6.0 carries the frozen legacy module, kept for compatibility with existing instances. It supports Disaster Recovery only — no Active-Active mode, and no module-level peer authentication. Enabling replication on Redis 6.0 returns an admission warning recommending Redis 7.2. For new deployments, use Redis 7.2.
Upstream side
You need to create a Redis instance first.
Enable Disaster Recovery
Use LoadBalancer as the access address for the upstream Proxy
After enabling disaster recovery support for the instance, the disaster recovery Proxy provides a NodePort access address by default. A single NodePort-based access address is not highly available. In a production environment, you can use a LoadBalancer address to provide access to the Proxy.
Each disaster recovery instance will create a Proxy Service with a name that follows this format: activeredis-proxy-<instance-name>.
For Sentinel instances, the instance name needs to be prefixed with
rfr-
Downstream side
Enable Disaster Recovery
The range of serviceID is [0-15]. In the same disaster recovery cluster, the serviceID cannot be repeated.
Wait for the peer-auth binding
The operator adds the binding on a following reconcile, and the connection is rejected while it is still empty. Wait until this prints a name:
Configure Disaster Recovery Connection
Note to replace the upstream address.
A Redis 6.0 link authenticates as the instance's default account. The operator writes that down for you: the first time it reconciles an instance that has replication enabled and carries no binding, it sets spec.activeRedis.redisUserRef to the instance's own default-account RedisUser — drc-acl-<instance-name>-default for a cluster instance, rfr-acl-<instance-name>-default for a Sentinel one. Nothing is provisioned: that account already exists, and the password in it is the one the link uses. Both datacenters must therefore carry the same default password.
There is no credential field on the connection. spec.secretName has been removed, and a manifest that still sets it is rejected with unknown field "spec.secretName".
Check Disaster Recovery Connection Status
Here status.shards[0].status indicates the connection status of the shard, and status.shards[0].syncStatus indicates the data synchronization status. The synchronization status can be PartialSync (indicating incremental synchronization of Oplog) or FullSync (indicating that RDB is being synchronized).
The native Redis Sentinel mode does not have the concept of shards. Here, a master-slave of Sentinel is abstracted as
shard 0to be compatible with the same data structure as the Redis cluster mode.
Pre-flight inspection
Before a connection is accepted, the platform runs a set of pre-flight checks against the upstream. The Web Console exposes them through the Inspect button; they also run automatically during ActiveRedisConnection admission, and a failing check rejects the connection with the corresponding message. The checks are backed by the ActiveRedisInspection resource.
On Redis 7.2 the inspection dials with the peer-auth credential the data path will actually use, so a successful inspection also confirms that both datacenters carry the same credential. It additionally performs a plain TCP dial against the endpoint it resolves for the replication stream — the address in spec.addresses[0], unless spec.peerPort splits the two.
Removing a connection
Deleting an ActiveRedisConnection tears the link down according to its spec.teardownPolicy:
Decommission is the correct teardown for a datacenter that is gone for good — a detached-but-never-returning peer keeps holding garbage-collection floors on the survivors. It cannot be changed back to Detach, and a decommissioned peer that later returns is treated as a brand-new peer requiring a fresh full synchronization.
Credential rotation
On Redis 7.2, peer links carry no inline credential: outbound dials read the node-local peer-auth credential that the operator re-pushes on every reconcile. To rotate, update the password Secret of each datacenter's peer-auth RedisUser in place, to the same new value, one datacenter at a time. The RedisUser controller replays the ACL, the operator re-pushes the credential, and the proxy accepts the new credential on the next rebuild. Existing links stay healthy, and a link that drops after the rotation re-dials with the current credential.
Rotating an instance's own password Secret is independent and does not affect peer links.