我们有三个节点卡桑德拉集群。欧盟(种子)有2个节点,美国有1个节点。有时我们会遇到网络问题--欧盟( EU )和美国( US )节点之间的平差损失。网络问题后的影响是美国节点上丢失了一些数据。我们需要手动启动nodetool repair来修复损失。有人能建议我如何处理这个案子吗?
下面是我们的关键空间创建:
CREATE KEYSPACE test WITH replication = {'class': 'NetworkTopologyStrategy', 'dc1': '2', 'dc2': '1'} AND durable_writes = false;dc1 - EU服务器-2个节点
dc2 - US服务器-1节点
发布于 2017-12-25 15:18:55
我们通过自动修复卡桑德拉解决了类似的问题。
我们从cassandra操作机器上运行cron作业(它不是集群的一部分,但我们可以从它运行指向正在考虑的集群的nodetool命令)。
每到午夜,cron的工作都会进行nodetool的修复。它每天都在进行增量维修,但在每个月的第一天,当它进行全面修理的时候除外。你可以根据你的需要来决定时间表。
我看不出还有什么解决办法。当节点面临最基本的问题-平差时,您能做些什么?
您还能做的是重新考虑多区域集群的决定。试着考虑拥有多个区域(位于不同物理位置但位于区域内的节点)集群。
发布于 2018-02-01 20:56:28
看来我们的问题是在gc_grace_seconds。我们的表创建如下:
default_time_to_live = 7200 gc_grace_seconds = 60
如果美国节点处于关闭状态,则在gc_grace_seconds期间数据无法同步之后。我们试图将gc_grace_seconds的值提高到7200,并且似乎当美国节点处于up时,数据是同步的。
https://stackoverflow.com/questions/47961381
复制相似问题