在 cassandra 中,有什么方法可以知道当 CL=ONE 时将选择哪个节点

In cassandra, is there some way to know which node will be chosen when CL=ONE

我是 cassandra 的新手。 我建立了一个有 10 个节点的集群,想测试 CL=ONE。 这是我阅读文档后的理解。

比如当CL=ONE时,一个读请求来到coordinator节点, 如果该节点没有数据,它会将请求转发给持有它的节点之一。 告密者应该根据某些条件(例如网络延迟等)来决定选择哪个节点。 现在我只想知道有什么方法可以查看这个特定节点(主机名或 ip 等)?

另外,如果我禁用了“dynamic snitch”,那么 cassandra 将如何决定应该选择哪个节点?

Snitch 定义集群的“拓扑”,所有 Snitch 还使用动态 Snitch 层来监控读取延迟,并在可能的情况下将请求从 poorly-performing 个节点路由出去。

要查看查询使用的节点,请启用查询跟踪“TRACING ON;” 参考:https://docs.datastax.com/en/cql-oss/3.3/cql/cql_reference/cqlshTracing.html

要查看拥有分区数据的节点,getendpoints 提供拥有分区键的副本的 IP 地址或名称。

nodetool getendpoints

参考:https://docs.datastax.com/en/dse/5.1/dse-dev/datastax_enterprise/tools/nodetool/toolsGetEndPoints.html

有误会。一致性级别 而不是 定义将到达多少个节点以检索(或存储)数据。无论您的 CL 是什么,所有负责的副本节点都将并行到达,例如,如果您的键空间的 RF=3,将始终联系三个节点。然后,根据场景:

  • 对于写入,查询协调器将等待 CL 指定数量的确认(“我是一个副本节点,我确认我得到了你的数据”)。如果您设置 CL=1,它将等待最快的答案。
  • 对于读取,它会向所有副本询问数据,并在获得足够的匹配答案后立即给您答案。

告密者没有定义将联系哪个节点,它们参与 token-aware 网络拓扑。

P.S。我强烈建议在 DataStax Academy 上免费 Cassandra course,它可以使您避免生产中的许多问题。