【发布时间】:2021-09-11 23:26:07
【问题描述】:
cassandra 版本:2.1.15
节点数:dc1:80,dc2:80
问题:
我们的复制策略如下:
WITH REPLICATION = {'class':'NetworkTopologyStrategy','dc1': 3,'dc2': 3};
我们在使用 Cassandra 时遇到问题,使用 local_quorum 查询时出现不一致。我们只会在 dc1 中读写。 我们也用 local_quorum 写,然后用 local_quorum 查询。
但是有一个现象,用下面的说法:
select count from table where partitionKey=?
查询的结果最初不一致,最终一致。
假设第一个是10000,第二个是9998,第三个是9997,最后可能保持在10001(可能是触发读修复,导致最终稳定)。 在此期间,我们进行了大规模的扩张。并确保每台机器都已清理干净。而且我们还发现在不同机器上使用getEndpoint的结果不一致。最后我们发现getEndpoint的结果在dc1中有4台机器。
然后我们在对应的4台机器上执行getSstable,只有3台机器显示结果,另一台机器没有显示结果。同时我们在另一个partitionKey也遇到了类似的问题,但是这个partitionKey只查询了一次,因为我们在别的地方记录了partitionKey的总数,可以确认partitionKey的总数不正确。
我们将dc1的每台机器一一重启后,这个问题就解决了。 partitionKey 的总数和我们记录的结果是一致的,如果多次查询同一个查询,结果是不会改变的。 所以我怀疑gossip同步节点信息太慢,可能导致选择节点查询时最终结果不一致。
【问题讨论】:
标签: cassandra