Bringing together the Apache Cassandra experts from the community and DataStax.

Want to learn? Have a question? Want to share your expertise? You are in the right place!

Not sure where to begin? Getting Started

 

question

HDC avatar image
HDC asked HDC edited

cassandra local_quorum 查询不一致

上次版本写错了,正确的版本: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同步节点的信息过于缓慢,导致可能选择节点查询时候导致最终的结果不一致。


cassandra
10 |1000 characters needed characters left characters exceeded

Up to 8 attachments (including images) can be used with a maximum of 1.0 MiB each and 10.0 MiB total.

0 Answers