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

时间:2012-05-02 02:49:50

标签: cassandra

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

客户端是否只包含种子节点的列表,每个节点是否委托客户端连接的新主机?种子节点是否仅用于节点到节点的发现,而不是客户端的特殊节点?

每个客户端是否应使用DC中的一小部分随机节点连接到?

或者,每个客户端是否应该使用DC中的所有节点?

3 个答案:

答案 0 :(得分:41)

回答我自己的问题:

<强>种子

来自FAQ

  

在启动期间使用种子来发现群集。

同样来自DataStax documentation上的“八卦”:

  

种子节点指定除了引导八卦过程之外没有任何其他目的   用于加入群集的新节点。种子节点不是单一的   失败点,他们也没有任何其他特殊目的   超出节点引导的集群操作。

从这些细节来看,种子似乎对客户来说并不特别。

<强>客户

来自客户请求的DataStax documentation

  

Cassandra中的所有节点都是对等节点。客户端读取或写入请求可以   转到群集中的任何节点。当客户端连接到节点时   发出读或写请求,该节点充当协调器   对于那个特定的客户操作。

     

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

我认为客户端连接到的节点池可能只是DC中的少数(随机?)节点,以允许潜在的故障。

答案 1 :(得分:19)

种子节点有两个目的。

  1. 它们充当新节点向群集宣布自己的地方。所以,没有至少一个活动种子节点,没有新节点可以加入群集,因为他们不知道如何联系非种子节点以获得群集状态。
  2. 种子节点充当八卦热点。由于节点通常使用种子而不是非种子,因此种子往往具有更多的当前信息,因此整个群集具有更多的当前信息。这就是你应该使所有节点种子的原因。同样,这也是给定数据中心中的所有节点在其cassandra.yaml文件中应具有相同种子节点列表的原因。通常,每个数据中心有3个种子节点是理想的。
  3. cassandra客户端联系点只是向客户端提供集群拓扑,之后客户端可以连接到集群中的任何节点。因此,它们类似于种子节点,并且对种子和客户端联系人使用相同的节点是有意义的。但是,您可以根据需要安全地配置多个cassandra客户端联系点。唯一的另一个考虑因素是客户联系人的第一个节点设置其数据中心亲和力,因此您可能希望订购您的联系点以更喜欢给定的数据中心。

    有关联络点的详细信息,请参阅此问题:Cassandra Java driver: how many contact points is reasonable?

答案 2 :(得分:8)

你的答案是对的。我要添加的唯一内容是建议在整个群集中使用相同的种子列表(即在您的cassandra.yaml中),作为“最佳实践”类型的东西。帮助八卦流量以良好的常规速率传播,因为通过八卦代码(非常简单地)处理种子(参见http://wiki.apache.org/cassandra/ArchitectureGossip)。