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

gak*_*gak 29 cassandra

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

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

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

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

gak*_*gak 41

回答我自己的问题:

种子

来自FAQ:

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

同样来自关于"八卦" 的DataStax文档:

除了为加入集群的新节点引导八卦过程之外,种子节点指定没有其他目的.种子节点不是单点故障,除了节点引导之外,它们在集群操作中也没有任何其他特殊用途.

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

客户端

从有关客户端请求的DataStax文档:

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

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

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


jam*_*ner 19

种子节点有两个目的.

  1. 它们充当新节点向集群宣布自己的地方.因此,如果没有至少一个活动种子节点,则没有新节点可以加入群集,因为他们不知道如何联系非种子节点以获取群集状态.
  2. 种子节点充当八卦热点.由于节点通常使用种子而不是非种子,因此种子往往具有更多的当前信息,因此整个群集具有更多的当前信息.这是什么原因,你应该不会使所有节点的种子.同样,这也是给定数据中心中的所有节点在其cassandra.yaml文件中应具有相同种子节点列表的原因.通常,每个数据中心有3个种子节点是理想的.

cassandra客户端联系点只是向客户端提供集群拓扑,之后客户端可以连接到集群中的任何节点.因此,它们类似于种子节点,并且对种子和客户端联系人使用相同的节点是有意义的.但是,您可以根据需要安全地配置任意数量的cassandra客户端联系点.唯一的另一个考虑因素是客户联系人的第一个节点设置其数据中心亲和性,因此您可能希望订购您的联系点以更喜欢给定的数据中心.

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


the*_*aul 8

你的答案是对的.我要补充的唯一一点就是建议在整个集群中使用相同的种子列表(即在你的cassandra.yaml中)作为"最佳实践"的东西.通过八卦代码(通过http://wiki.apache.org/cassandra/ArchitectureGossip)以不同方式处理种子(非常简单),帮助八卦流量以良好的常规速率传播.