我是Cassandra的新手,在工作中我有一个4节点集群。 nodetool gossipinfo告诉我每个机架中有一个数据中心,2个机架和2个节点。复制因子定义为2. nodetool ring告诉我每个节点拥有50%的所有权。我们的配置中有2个种子节点。每个机架都有1个种子节点。
这是否意味着每个机架都有一个种子节点及其复制节点。如果是这种情况,那么为什么数据大小不同于种子节点及其复制节点。
如果一个节点发生故障,会发生什么。它是否会对集群的数据可用性产生任何影响。
答案 0 :(得分:1)
种子节点的特殊之处在于加入群集的新节点与种子节点联系以查找其他节点和环的拓扑。但是在Cassandra中,所有节点都是相同的,即没有主节点或从节点,没有主节点或辅节点。因此,您可以选择任何(或所有)节点作为种子。
由于种子只与八卦信息有关,因此它与复制数据没有任何关系。
就数据大小而言,每个节点永远不会完全相同,因为每个分区/行大小永远不会相同。如果您查看nodetool cfstats
输出,您会发现最小和最大尺寸之间存在较大范围。
如果读取是使用一致性级别CL=ONE
完成的,那么如果某个节点关闭,则另一个副本将继续为请求提供服务。但是如果读取以更高的一致性完成,那么读取将失败,因为它需要2个节点可用,即CL=LOCAL_QUORUM
需要[RF
/ 2 + 1]个节点来响应。
编辑:回复:
每个节点不应该拥有25%吗?
在Cassandra中,数据不会在所有DC中的所有节点上“分布”。实际上,DC是另一个DC的副本,具体取决于复制因子。
为了说明,请考虑以下键空间定义:
CREATE KEYSPACE "myKS"
WITH REPLICATION = {
'class' : 'NetworkTopologyStrategy',
'DC1' : 2,
'DC2' : 2};
根据此定义,这意味着myKS
键空间在DC1
中有2个副本,在DC2
中有2个副本。由于每个数据中心只有2个节点,这实际上意味着每个DC都是彼此的副本。
由此,由于令牌分为2个节点,因此每个节点拥有一半的数据,即50%。因此,在DC1
中,每个节点拥有50%,而DC2
(这是DC1
的副本)每个节点也拥有50%。