Cassandra种子节点和客户端连接到节点

37

我对Cassandra种子节点以及客户端如何连接到集群有些困惑。在文档中似乎找不到这部分信息。

客户端是否只包含种子节点的列表,每个节点都会为其委派一个新的主机以供客户端连接?种子节点是否仅用于节点间发现,而不是专门为客户端提供服务的特殊节点?

每个客户端应该使用DC中少量随机节点进行连接吗?

还是说,每个客户端应该使用DC中的所有节点?

3个回答

52

回答我的问题:

Seeds

FAQ中可以得知,种子用于在启动时发现集群。

还从DataStax文档关于"Gossip"的内容中了解到:

种子节点的指定除了用于为加入集群的新节点引导gossip进程外,没有其他目的。种子节点不是单点故障,也没有在集群操作中任何特殊目的,除了引导节点。

从这些细节中可以看出,对于客户端来说,种子节点并没有什么特别的作用。

Clients

DataStax文档关于客户端请求的内容中了解到:

Cassandra中的所有节点都是同等级别的。客户端读取或写入请求可以发送到集群中的任何节点。当客户端连接到节点并发出读取或写入请求时,该节点将作为特定客户端操作的协调器。

协调器的工作是充当客户端应用程序和拥有被请求数据的节点(或副本)之间的代理。协调器根据集群配置的分区器和副本放置策略确定应该向环中的哪些节点发送请求。

我认为,客户端连接的节点池可以只是DC中少量(随机?)的节点,以便应对潜在的故障。


请注意,已接受答案中的FAQ链接现已被http://cassandra.apache.org/doc/latest/faq/index.html#what-are-seeds所取代。 - swifthorseman

27

种子节点(seed nodes)有两个作用。

  1. 它们作为新节点向集群宣告自己的地方。因此,如果没有至少一个活跃的种子节点,则无法加入集群的新节点,因为它们不知道如何联系非种子节点以获取集群状态。
  2. 种子节点是传播消息的热点。由于节点更经常与种子节点而不是非种子节点进行消息扩散,因此种子节点往往具有更多的最新信息,从而整个集群具有更多的最新信息。这就是为什么不应该将所有节点都设置为种子节点。同样,这也是为什么同一数据中心中的所有节点都应在其cassandra.yaml文件中拥有相同的种子节点列表的原因。通常,每个数据中心需要 3 个种子节点。

Cassandra客户端联系点(Cassandra client contact points)只需向客户端提供群集拓扑,之后客户端可以连接集群中的任何节点。因此,它们类似于种子节点,因此使用相同的节点作为种子节点和客户端联系点是合理的。但是,您可以安全地配置任意数量的Cassandra客户端联系点。唯一需要考虑的是客户端首先连接的节点将设置其数据中心关联性,因此您可能希望对联系点进行排序以偏好特定的数据中心。

有关联系点的更多详细信息,请参阅此问题:Cassandra Java驱动程序:合理的联系点数量是多少?


你写道:“种子节点往往具有更多的当前信息,因此整个集群具有更多的当前信息。这就是为什么不应该使所有节点都成为种子节点的原因。”但是并不完全清楚,为什么不能让所有节点都成为种子节点呢?或者应该这样理解:“节点更经常与种子节点而非非种子节点进行交流……这就是为什么不应该使所有节点都成为种子节点的原因。”?如果是这样的话,那么原因是节点之间的流量增加了吗? - Richlv
1
这里有一个过于简化的例子,以便于计算。假设你有一个由10个节点组成的集群,每个节点每分钟与其他2个节点进行同步,其中1个是种子节点,另一个可以是任意节点。现在,想象一下非种子节点中有一个更新需要共享给整个集群。如果你只有1个种子节点,那么它将在本分钟内被更新,而其他人将在下一分钟内得到更新。如果你有9个种子节点,那么本分钟内只有其中的两个节点会得到更新,而最多只有8个节点会在下一分钟得到更新,可能会有一个节点没有得到更新。 - james turner
啊,这似乎与@the-paul在另一个答案中分享的链接https://wiki.apache.org/cassandra/ArchitectureGossip#Gossiper_implementation相符。稍微改一下措辞:“如果首先传递消息的节点不是种子节点,则向随机种子节点传递消息”。谢谢 :) - Richlv

11

你的答案是正确的。我唯一需要补充的是,建议在集群中使用相同的种子节点列表(即在cassandra.yaml文件中),作为"最佳实践"的一部分。这样有助于使gossip流量以良好、规律的速率传播,因为种子节点在gossip代码中被处理(非常小地)不同(请参见https://cwiki.apache.org/confluence/display/CASSANDRA2/ArchitectureGossip)。


谢谢这个技巧,Paul :) - gak

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接