【问题标题】:Cassandra Cluster 1.1.10Cassandra 集群 1.1.10
【发布时间】:2015-10-13 05:19:09
【问题描述】:

我是 Cassandra 的新手,在工作中我有一个 4 节点集群。 nodetool gossipinfo 告诉我有一个数据中心,2 个机架,每个机架中有 2 个节点。复制因子定义为 2。nodetool ring 告诉我每个节点都有 50% 的所有权。我们的配置中有 2 个种子节点。每个机架有 1 个种子节点。

这是否意味着对于每个机架,都有一个种子节点及其复制节点。如果是这样,那么为什么种子节点及其复制节点的数据大小不一样。

如果一个节点出现故障会发生什么。会不会对集群的数据可用性有影响。

【问题讨论】:

    标签: cassandra


    【解决方案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%。

    【讨论】:

    • 在这种情况下,为什么“nodetool ring”命令显示每个节点拥有 50% 的所有权?如果所有节点都相同,并且每个节点中存储的数据基于节点级别的令牌值,那么所有权不应该是 25%。此外,如果一个节点关闭并且有人查询该节点上的数据,cassandra 将如何响应?
    • 在我们的设置中只有一个 DC。每个机架有 2 个机架和 2 个节点。那么为什么所有权是50%。如果有 2 个 DC,那么 50% 的所有权是可以理解的。
    猜你喜欢
    • 2016-08-16
    • 2020-03-28
    • 2015-02-24
    • 2011-08-07
    • 2012-08-04
    • 2017-02-18
    • 2016-07-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多