{
  "schema_version": 2,
  "id": "operate/rs/databases/active-active/disaster-recovery/proxy-based",
  "title": "Proxy-based disaster recovery",
  "url": "https://redis.io/docs/latest/operate/rs/8.0/databases/active-active/disaster-recovery/proxy-based/",
  "summary": "Proxy-based disaster recovery for Active-Active databases.",
  "content": "\nIf you add a lightweight proxy software component between the clients and the Active-Active database, applications can dynamically route requests to the optimal endpoint.\n\nAdvantages:\n\n- Proxies provide proactive and reactive health check methods, such as polling target health periodically using either a TCP connection or an HTTP request, or monitoring live operations for errors.\n\n- Proxies can be configured to run Active-Active health checks, such as the lag-aware database availability requests.\n\n- If an Active-Active database member fails, a proxy can automatically detect the issue and redirect traffic to a healthy Active-Active database member without requiring DNS propagation delays or client disconnections. This enables fast, controlled failover and minimizes downtime.\n\nConsiderations:\n\n- If you do not use DNS to resolve the Active-Active database members' FQDNs:\n\n    - The proxies must have static IPs.\n\n    - If you add a new node to the cluster, you must configure the proxy with the new endpoint.\n\n    - A configuration syncer component is required to discover topology changes and reconfigure the proxy.\n\n- Proxies introduce latency.\n\n- Proxy failures can disconnect clients and cause disruptions.\n\n## Avoid concurrent access across replicas\n\nIf concurrent access across replicas must be avoided in every scenario, you can use a centralized proxy with a standby proxy instance for high availability.\n\nAdvantages:\n\n- Prevents concurrent access across replicas.\n\n- Failover and failback are simultaneous regardless of the Active-Active health check policy.\n\nConsiderations:\n\n- Although the proxy can be monitored with a watchdog and restarted in case of failure, this setup does not grant high availability for the proxy.\n\n- Limited scalability.\n\nThe following diagram shows a centralized proxy architecture with a standby proxy instance:\n\n\u003cdiv class=\"flex justify-center\"\u003e\n\u003cimg src=\"../../../../../../images/active-active-disaster-recovery/centralized-proxy.svg\" alt=\"Diagram of a centralized proxy architecture with active and standby proxy instances routing to Active-Active database members\" width=\"50%\"\u003e\n\u003c/div\u003e\n\n## Co-locate to reduce latency and improve scalability\n\nTo reduce latency and improve scalability, you can use a proxy co-located in the application server.\n\nAdvantages:\n\n- Reduced latency.\n\n- Better scalability.\n\nConsiderations:\n\n- Failover and failback might not be simultaneous depending on the Active-Active health check policy.\n\nThe following diagram shows a co-located proxy architecture where each application server has its own proxy:\n\n\u003cdiv class=\"flex justify-center\"\u003e\n\u003cimg src=\"../../../../../../images/active-active-disaster-recovery/co-located-proxy-and-app.svg\" alt=\"Diagram of co-located proxy architecture where each application server has its own proxy instance\" width=\"50%\"\u003e\n\u003c/div\u003e\n\n## Pool proxies for scalability\n\nYou can use a pool of active proxies to scale the routing layer. Application servers can balance new connections to the pool of proxies using a round-robin distribution algorithm, such as DNS-based round robin.\n\nAdvantages:\n\n- High availability without complex monitoring and failover solutions.\n\n- Flexible scalability of the routing layer.\n\nConsiderations:\n\n- Concurrent access across replicas is possible, but can be mitigated using database availability API requests.\n\nThe following diagram shows a pool of proxies:\n\n\u003cdiv class=\"flex justify-center\"\u003e\n\u003cimg src=\"../../../../../../images/active-active-disaster-recovery/proxy-pool.svg\" alt=\"Diagram of a pool of active proxy instances\" width=\"50%\"\u003e\n\u003c/div\u003e\n",
  "tags": ["docs","operate","rs","rc"],
  "last_updated": "2026-08-24T11:13:03-07:00"
}
