强制来自本地节点的请求

时间:2016-01-25 16:29:53

标签: cassandra datastax

我可以强制查询从本地获取。我们有两个复制因子为3和3的数据中心,我希望看到复制是否正确完成1)跨节点和2)跨数据中心。我是否可以强制查询仅从特定节点进行检查,并查看该节点中是否存在数据?我知道getendpoints将获取,如果我给id,但如果想检查表更新一般,看看是否正在复制数据,我怎么能这样做?来自local_quorum的APart我们还有其他选择吗?感谢

1 个答案:

答案 0 :(得分:0)

我可以理解为什么有人可能会这样做(完整性检查),我会在下面说明如何执行此操作。但首先,它并不是必需的;原因是因为Cassandra是一个分布式系统,在正常情况下它不需要检查给定节点上的数据,复制将根据snitch确定放置的位置在给定节点上放置给定行。因此,对于给定的复制因子,如DC1:3和DC2:3,每行中的任何 3节点上可以有一行。只要您可以查询集群作为整体每个DC 并获得正确的结果,那么您就知道您的复制正常运行。

话虽如此,这里是你找到密钥的方法,但需要注意的是它必须刷新到光盘(你可能需要调用nodetool flush)。这可能看似令人费解,但这就是你如何将它追溯到sstable,所以你可能会发现这很有用:

  1. 使用nodetool getendpoints找到密钥所在的节点
  2. 使用nodetool getsstables查找
  3. 中密钥存在的sstables
  4. 在光盘上找到该文件,然后使用sstable2json查看该表的内容,或使用sstablekeys仅查看密钥
  5. 注意:sstable2json工具仅在Cassandra 1.2文档中列出,但它们应该仍然存在于2.1中,至少我验证过它们并且已经在DSE4.7和4.8中使用过它们。