同机房双Cassandra数据中心使用LOCAL_QUORUM相较QUORUM的优势
问题结论
你的场景下用LOCAL_QUORUM替代QUORUM有明显优势,且完全可以满足强一致性要求。
核心前提说明
先明确两个一致性级别的计算逻辑,基于你当前的集群配置:
- 集群总副本数为 2(DC1 RF)+ 2(DC2 RF)= 4
QUORUM要求全局副本的多数应答:(总副本数 / 2) + 1 = 3,需要3个副本返回成功才算操作完成LOCAL_QUORUM仅要求请求发往的本地数据中心的多数副本应答:(本地DC RF / 2) + 1 = 2,只需要2个本地DC副本返回成功就算操作完成
核心优势
1. 可用性大幅提升
哪怕是同建筑部署,也存在单DC故障的可能(比如DC接入交换机故障、整DC电源回路故障):
若使用
QUORUM:单DC宕机后集群仅剩2个存活副本,达不到要求的3个应答数,所有读写请求直接失败,业务完全不可用。
若使用LOCAL_QUORUM:只要请求接入的DC存活,2个本地副本正常就能完成读写,单DC故障时只要切换请求到存活DC即可快速恢复,若客户端配置了DC粘滞+故障自动切换,业务几乎无感知。
2. 性能表现更优
即使是同建筑10 gbps互联,跨DC通信也存在额外的转发开销:
LOCAL_QUORUM不需要等待跨DC副本的应答,请求平均延迟、p99延迟都比QUORUM更低- 同等硬件配置下,集群可承载的读写吞吐量更高
3. 强一致性保障完全一致
只要你读写操作均使用LOCAL_QUORUM,且客户端配置了同DC粘滞路由(读写请求都发往同一个DC),就能满足Cassandra强一致性的判定公式 R + W > RF:
读一致性R=2,写一致性W=2,本地DC的RF=2,2+2>2,完全可以保证每次读取都能拿到最新写入的数据,不会出现一致性倒退。
额外注意事项
如果你后续有跨DC强一致读的需求(比如请求随机发往两个DC也需要读到最新数据),只需要把写入的一致性级别调整为EACH_QUORUM,读取依然用LOCAL_QUORUM即可,可用性依然高于全局QUORUM。
内容的提问来源于stack exchange,提问作者Klun
相关产品推荐
相关产品推荐

