我对Cassandra种子节点以及客户端如何连接到群集感到有些困惑。我似乎无法在文档中找到这些信息。
客户端是否只包含种子节点的列表,每个节点是否委托客户端连接的新主机?种子节点是否仅用于节点到节点的发现,而不是客户端的特殊节点?
每个客户端是否应使用DC中的一小部分随机节点连接到?
或者,每个客户端是否应该使用DC中的所有节点?
答案 0 :(得分:41)
回答我自己的问题:
<强>种子强>
来自FAQ:
在启动期间使用种子来发现群集。
同样来自DataStax documentation上的“八卦”:
种子节点指定除了引导八卦过程之外没有任何其他目的 用于加入群集的新节点。种子节点不是单一的 失败点,他们也没有任何其他特殊目的 超出节点引导的集群操作。
从这些细节来看,种子似乎对客户来说并不特别。
<强>客户强>
来自客户请求的DataStax documentation:
Cassandra中的所有节点都是对等节点。客户端读取或写入请求可以 转到群集中的任何节点。当客户端连接到节点时 发出读或写请求,该节点充当协调器 对于那个特定的客户操作。
协调员的工作是充当客户之间的代理 应用程序和拥有数据的节点(或副本) 请求。协调器确定环中的哪些节点应该 根据群集配置的分区程序获取请求 复制品放置策略。
我认为客户端连接到的节点池可能只是DC中的少数(随机?)节点,以允许潜在的故障。
答案 1 :(得分:19)
种子节点有两个目的。
cassandra客户端联系点只是向客户端提供集群拓扑,之后客户端可以连接到集群中的任何节点。因此,它们类似于种子节点,并且对种子和客户端联系人使用相同的节点是有意义的。但是,您可以根据需要安全地配置多个cassandra客户端联系点。唯一的另一个考虑因素是客户联系人的第一个节点设置其数据中心亲和力,因此您可能希望订购您的联系点以更喜欢给定的数据中心。
有关联络点的详细信息,请参阅此问题:Cassandra Java driver: how many contact points is reasonable?
答案 2 :(得分:8)
你的答案是对的。我要添加的唯一内容是建议在整个群集中使用相同的种子列表(即在您的cassandra.yaml中),作为“最佳实践”类型的东西。帮助八卦流量以良好的常规速率传播,因为通过八卦代码(非常简单地)处理种子(参见http://wiki.apache.org/cassandra/ArchitectureGossip)。