不平衡的 Cassandra 副本存储
Unbalanced Cassandra replicas storage
在我们的设置中,我们有 2 个 DC,每个 DC 中有 21 个 Cassandra 节点,每个记录总共有 4 个副本(在一个键 space 中)- 每个站点两个副本。
每个 Cassandra 节点都设置有 16 个 VNode。
我们没有为集群中的每个节点手动设置 initial_token,而是让 Cassandra 决定令牌范围分布。
我的问题 - 在我们的集群中列出令牌范围时,副本似乎以不平衡的方式存储。
例如,这是显示的 672 条记录之一([42 个节点]*[16 个 VNodes]):
TokenRange(start_token:-8400100964809109474,
end_token:-8379945255976340112, endpoints:[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],
endpoint_details:[EndpointDetails(host:xxx.101.xxx.210,
datacenter:ALLNTXDW, rack:RAC1), EndpointDetails(host:xxx.101.xxx.212,
datacenter:ALLNTXDW, rack:RAC1), EndpointDetails(host:10.x.108.xxx,
datacenter:BOTHWAKY, rack:RAC1), EndpointDetails(host:xxx.164.xx.157,
datacenter:BOTHWAKY, rack:RAC1)])
在 672 条记录中,每个节点恰好被分配给 "endpoints" 和 "rpc_endpoints" 元组中第一项的 16 次(正如预期的那样)。但是第二、第三、第四项填充不均匀,导致集群不平衡。其中一个节点出现在 672 个元组中的 28 个中作为第四项,而其他节点出现次数只有第四项的 4(!) 次。
这导致其中一个节点接收到超过 12% 的插入集群的数据(令牌范围内的 672 个分配中的 86 个),而一些节点接收其中的一半(令牌范围内的 672 个分配中的 43 个) ).
可以控制副本的令牌范围分配吗?
我该如何平衡这一点?
注意:这个集群是生产集群,已经加载了很多 TB 的数据。事实上,这个问题引起了我们的注意,因为其中一台机器中的 space 已填充高达 98%,而其他机器仅使用了 40% space。
谢谢!
加尔
每个主机仅使用 16 个 vnode 可能不是一个好主意。每个 vnode 代币将随机生成,并期望在足够大的代币数量下实现均衡。使用的 vnode 数量越少,变化和分布不均匀的可能性就越大。
在我们的设置中,我们有 2 个 DC,每个 DC 中有 21 个 Cassandra 节点,每个记录总共有 4 个副本(在一个键 space 中)- 每个站点两个副本。 每个 Cassandra 节点都设置有 16 个 VNode。 我们没有为集群中的每个节点手动设置 initial_token,而是让 Cassandra 决定令牌范围分布。
我的问题 - 在我们的集群中列出令牌范围时,副本似乎以不平衡的方式存储。 例如,这是显示的 672 条记录之一([42 个节点]*[16 个 VNodes]):
TokenRange(start_token:-8400100964809109474, end_token:-8379945255976340112, endpoints:[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], endpoint_details:[EndpointDetails(host:xxx.101.xxx.210, datacenter:ALLNTXDW, rack:RAC1), EndpointDetails(host:xxx.101.xxx.212, datacenter:ALLNTXDW, rack:RAC1), EndpointDetails(host:10.x.108.xxx, datacenter:BOTHWAKY, rack:RAC1), EndpointDetails(host:xxx.164.xx.157, datacenter:BOTHWAKY, rack:RAC1)])
在 672 条记录中,每个节点恰好被分配给 "endpoints" 和 "rpc_endpoints" 元组中第一项的 16 次(正如预期的那样)。但是第二、第三、第四项填充不均匀,导致集群不平衡。其中一个节点出现在 672 个元组中的 28 个中作为第四项,而其他节点出现次数只有第四项的 4(!) 次。
这导致其中一个节点接收到超过 12% 的插入集群的数据(令牌范围内的 672 个分配中的 86 个),而一些节点接收其中的一半(令牌范围内的 672 个分配中的 43 个) ).
可以控制副本的令牌范围分配吗? 我该如何平衡这一点?
注意:这个集群是生产集群,已经加载了很多 TB 的数据。事实上,这个问题引起了我们的注意,因为其中一台机器中的 space 已填充高达 98%,而其他机器仅使用了 40% space。
谢谢! 加尔
每个主机仅使用 16 个 vnode 可能不是一个好主意。每个 vnode 代币将随机生成,并期望在足够大的代币数量下实现均衡。使用的 vnode 数量越少,变化和分布不均匀的可能性就越大。