Apache Cassandra

Multi-Datacenter Deployment

Understand the design considerations and configuration required to run Cassandra reliably across multiple datacenters or cloud regions.

Cassandra was designed from the outset to support multi-datacenter deployments natively, making it a popular choice for globally distributed applications, active-active geo-redundancy, and workload isolation (e.g., separating analytics traffic from live application traffic).

It's like a multinational company keeping a full copy of important records in every regional office, letting each office's staff work from their local copy at full speed for day-to-day business, while a background courier service keeps quietly syncing updates between all the offices so no single office's records ever fall permanently behind.

Key Concepts

1
A multi-DC deployment uses NetworkTopologyStrategy to define independent replication factors per datacenter, and LOCAL_QUORUM/LOCAL_ONE consistency levels to allow applications to achieve strong consistency guarantees within their local datacenter without incurring the latency of waiting for cross-region acknowledgments on every request. Writes are still asynchronously replicated to all configured datacenters regardless of the consistency level used, ensuring eventual convergence.
withinNetworkTopologyStrategyLOCAL_QUORUMLOCAL_ONE
2
A common pattern is deploying a dedicated analytics datacenter that receives a full replica of the data but is isolated from live application traffic — application clients simply never route requests there, and heavy analytical or batch (e.g., Spark) workloads run against it without impacting production read/write latency.
analytics datacenter
3
Key operational considerations include configuring the snitch correctly (e.g., GossipingPropertyFileSnitch or a cloud-specific snitch), setting appropriate dc_local_read_repair_chance, ensuring driver load-balancing policies prefer the local datacenter, and carefully planning cross-DC bandwidth for streaming operations like repair, bootstrap, and hinted handoff replay.
dc_local_read_repair_chance