上次版本写错了,正确的版本: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。(也许是触发读修复,导致最终稳定了)
这个期间,我们做过大规模的扩容。而且确保每台机器都做了clean up。
而且我们还发现,在不同机器使用getEndpoint <keyspace> <table> <key> 的结果是不一致的。
最终,我们发现 getEndpoint 的结果在dc1有4个机器。
然后我们对应的4台机器上执行getSstable 只有3台机器显示了结果。
与此同时,我们遇到另外一个partitionKey有类似问题,但是这个 partitionKey 只做过一次查询,因为我们在另外的地方记录这个 partitionKey 的总条数,可以确认这个 partitionKey 总数不对。当我们逐一重启dc1的每一台机器之后,这个问题解决了。 partitionKey 的总条数 和 我们记录的结果一致了,而且多次做相同的查询,结果不再变化。
所以,我怀疑gossip同步节点的信息过于缓慢,导致可能选择节点查询时候导致最终的结果不一致。