gpt4 book ai didi

cassandra - cassandra如何找到包含数据的节点?

转载 作者:行者123 更新时间:2023-12-02 21:45:52 25 4
gpt4 key购买 nike

我已经阅读了很多关于 Cassandra 的文章和很多问题/答案,但我仍然无法弄清楚 Cassandra 在读取数据时如何决定转到哪个节点。

首先,关于假想簇的一些假设:

  1. 复制策略 = 简单
  2. 使用随机分区器
  3. 10 个节点的集群
  4. 复制因子为 5

以下是我根据我读过的各种 Datastax 文章和其他博客文章对写入工作方式的理解:

  • 客户端将数据发送到随机节点
  • “随机”节点是根据主键的 MD5 哈希值决定的。
  • 数据写入 commit_log 和 memtable,然后传播 4 次(RF = 5)。

  • 然后选择环中的 4 个下一个节点并将数据保存在其中。

到目前为止,一切顺利。

现在的问题是,当客户端向集群发送读取请求(例如 CL = 3)时,Cassandra 如何知道它需要联系哪些节点(最坏情况下是 10 个节点中的 5 个)才能获取此请求数据?当然它不会发送到所有 10 个节点,因为那样效率很低。

我是否正确假设 Cassandra 会再次对(请求的)主键进行 MD5 哈希并根据该哈希选择节点,然后走环?

另外,网络拓扑案例是如何工作的?如果我有多个数据中心,Cassandra 如何知道每个 DC/机架中的哪些节点包含数据?据我了解,只有第一个节点是明显的(因为主键的哈希已明确导致该节点)。

抱歉,如果问题不是很清楚,如果您需要有关我的问题的更多详细信息,请添加评论。

非常感谢,

最佳答案

Client sends the data to a random node

看起来可能是这样,但实际上驱动程序有一种非随机的方式来选择与之通信的节点。该节点称为“协调器节点”,通常是根据具有最小(最近)“网络距离”来选择的。客户端请求实际上可以发送到任何节点,并且首先它们将被发送到您的驱动程序知道的节点。但是一旦它连接并了解集群的拓扑,它可能会变成一个“更接近”的协调器。

集群中的节点使用 Gossip Protocol 相互交换拓扑信息。 。 gossiper 每秒运行一次,并确保所有节点都保持最新的数据 Snitch您已配置。告密者跟踪每个节点所属的数据中心和机架。

这样,协调器节点也拥有有关哪些节点负责每个 token 范围的数据。您可以通过从命令行运行nodetool Ring来查看此信息。尽管如果您使用的是虚拟节点,那么确定起来会比较困难,因为所有 256 个(默认)虚拟节点上的数据都会在屏幕上快速闪烁。

假设我有一个表,用于按船员的名字跟踪船员,并假设我想查找 Malcolm Reynolds。运行此查询:

SELECT token(firstname),firstname, id, lastname 
FROM usersbyfirstname WHERE firstname='Mal';

...返回此行:

 token(firstname)     | firstname | id | lastname
----------------------+-----------+----+-----------
4016264465811926804 | Mal | 2 | Reynolds

通过运行nodetool环我可以看到哪个节点负责这个 token :

192.168.1.22  rack1       Up     Normal  348.31 KB   3976595151390728557                         
192.168.1.22 rack1 Up Normal 348.31 KB 4142666302960897745

或者更简单,我可以使用 nodetool getendpoints 来查看此数据:

$ nodetool getendpoints stackoverflow usersbyfirstname Mal
Picked up JAVA_TOOL_OPTIONS: -javaagent:/usr/share/java/jayatanaag.jar
192.168.1.22

有关更多信息,请查看上面链接的一些项目,或尝试运行 nodetool gossipinfo

关于cassandra - cassandra如何找到包含数据的节点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31669991/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com