【问题标题】:Unbalanced Cassandra replicas storage不平衡的 Cassandra 副本存储
【发布时间】:2015-08-22 19:03:04
【问题描述】:

在我们的设置中,我们有 2 个 DC,每个 DC 中有 21 个 Cassandra 节点,每个记录总共有 4 个副本(在一个键空间中) - 每个站点两个副本。 每个 Cassandra 节点都设置有 16 个 VNode。 我们没有为集群中的每个节点手动设置 initial_token,而是让 Cassandra 决定令牌范围分布。

我的问题 - 在我们的集群中列出令牌范围时,副本似乎以不平衡的方式存储。 例如,这是显示的 672 条记录之一([42 个节点]*[16 个 VNodes]):

TokenRange(start_token:-8400100964809109474, end_token:-8379945255976340112,端点:[xxx.101.xxx.210, xxx.101.xxx.212、10.x.108.xxx、xxx.164.xx.157]、 rpc_endpoints:[xxx.101.xxx.210, xxx.101.xxx.212, 10.x.108.xxx, xxx.164.xx.157], 端点详细信息:[端点详细信息(主机:xxx.101.xxx.210, 数据中心:ALLNTXDW,机架:RAC1),端点详细信息(主机:xxx.101.xxx.212, 数据中心:ALLNTXDW,机架:RAC1),端点详细信息(主机:10.x.108.xxx, 数据中心:BOTHWAKY,机架:RAC1),EndpointDetails(主机:xxx.164.xx.157, 数据中心:BOTHWAKY,机架:RAC1)])

在 672 条记录中,每个节点都被准确地分配了 16 次给“endpoints”和“rpc_endpoints”元组中的第一项(如预期的那样)。但是第二、三、四项填充不均匀,导致聚类不平衡。其中一个节点出现在 672 个元组中的 28 个中的第四项,而其他节点出现的次数只有第四项的 4(!) 次。

这导致其中一个节点接收超过 12% 的插入集群的数据(令牌范围内的 672 个分配中的 86 个),而一些节点接收其中的一半(令牌范围内的 672 个分配中的 43 个)。

可以控制副本的令牌范围分配吗? 我该如何平衡这一点?

注意:这个集群是生产集群,已经加载了很多 TB 的数据。事实上,这个问题引起了我们的注意,因为其中一台机器上的空间占用了 98%,而其他机器的空间只有 40%。

谢谢! 加尔

【问题讨论】:

    标签: java cassandra datastax


    【解决方案1】:

    每个主机只使用 16 个 vnode 可能不是一个好主意。每个 vnode 令牌将随机生成,并期望在足够多的令牌时会发生均匀平衡。使用的 vnode 数量越少,分布不均匀的变化和可能性就越大。

    【讨论】:

    • 感谢 Stefan 的回答。我在几个地方读到推荐的数字是256。但是,权衡是修复需要更长的时间。我们已经在以每个节点 8-16 小时修复周期的缓慢速度运行。是否有一些公式可以用来改善分布,但不会影响我们的性能?
    • 理论上,使用 256 个 vnode 而不是 16 个应该只会增加管理 256 个修复会话而不是 16 个的开销。这将显着减慢数据较少的集群的修复速度。但是,对于您描述的集群大小来说,这应该不是很重要。理论上。 ;) 如果您确定要使用 16 个 vnode,最好手动指定这些范围。这使您可以自己计算均匀分布,而不是手动生成这些范围。
    • 的意思是:..生成这些范围随机
    • 我是否正确地假设在任何情况下解决方案都需要关闭集群,然后应用更改,然后完全修复所有键空间?
    • 要么使用新配置,要么添加一个新的 DC,并逐个停用现有的 DC。由于我们谈论的是生产系统,因此添加新的 DC 似乎是更安全的方法。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-08-11
    • 2021-07-29
    • 2015-03-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-01
    • 2013-12-19
    相关资源
    最近更新 更多