【发布时间】: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%。
谢谢! 加尔
【问题讨论】: