Linux Cassandra多数据中心与跨区域复制运维
一、多数据中心架构原理
1.1 Cassandra 多DC 优势
典型场景:
1.2 关键组件
- Replication Strategy:NetworkTopologyStrategy(NTS)
- 一致性级别:LOCAL_QUORUM / LOCAL_ONE
二、Snitch 配置与拓扑规划
2.1 推荐Snitch:GossipingPropertyFileSnitch
cassandra.yaml:
endpoint_snitch:GossipingPropertyFileSnitch
配套文件:/opt/cassandra/conf/cassandra-rackdc.properties
每个节点配置:
dc=DC1 # 数据中心名
rack=RACK1 # 机架名
prefer_local=true
- 动态生效(nodetool reloadsnitch)
云环境替代:
- Ec2MultiRegionSnitch(AWS)
2.2 种子节点规划
示例:
seeds:"10.0.1.10,10.0.1.11,10.0.2.10,10.0.2.11"# BJ + SH
2.3 拓扑验证
nodetool status # 显示Datacenter: DC1 / DC2
nodetool gossipinfo # 查看每个节点DC/Rack
三、Keyspace 创建与复制策略
3.1 NetworkTopologyStrategy(NTS)
CREATE KEYSPACE multi_dc WITHreplication = {
'class': 'NetworkTopologyStrategy',
'DC1': 3,
'DC2': 3,
'DC3': 2
};
更改现有Keyspace:
ALTER KEYSPACE multi_dc WITHreplication = {'class': 'NetworkTopologyStrategy', 'DC1': 3, 'DC2': 3};
nodetool repair -full# 迁移数据
3.2 一致性级别选择
生产黄金组合:
- 读:LOCAL_QUORUM(强一致)或 LOCAL_ONE(高性能)
客户端驱动配置:DataStax Java Driver支持自动LOCAL_*。
3.3 一致性计算表(RF=3 per DC,双DC)
四、跨DC 数据同步与维护
4.1 Repair 在多DC
- 跨DC repair:加-dc参数,或每个DC独立调度
- 频率:本DC每周增量,跨DC每月full(带宽评估)
命令:
nodetool repair -pr -inc -dc DC2 # 修指定DC范围
Reaper工具:支持多DC并行。
4.2 备份在多DC
- 灾备恢复:从备份DC sstableloader到新DC
4.3 跨DC 流量评估
公式:
- 写流量:写QPS × 行大小 × (总RF - 本DC RF)
- Repair流量:数据量 / 修复周期 × 峰值系数
生产:万兆+专线,internode_compression: all压缩。
五、故障切换与流量路由
5.1 单DC故障处理
- 客户端驱动:token aware + 数据中心感知(prefer local DC)
- 切换:应用配置fallback DC,或DNS/LB切换
5.2 全球多DC路由
- LB:HAProxy/Geolocation路由就近DC
5.3 扩容多DC
- 新节点指定DC/Rack(cassandra-rackdc.properties)
- bootstrap自动streaming跨DC数据
六、生产多DC 最佳实践
- 网络:专线+压缩+限速(stream_throughput)
常见坑: