使用每个节点有256个令牌的vnodes策略,我的集群在执行nodetool status时显示如下信息。似乎我的集群负载非常不平衡。我不知道这是什么原因。表的分区键相关吗?欢迎发表任何意见,谢谢!
Datacenter: datacenter1
=======================
Status=Up/Down
|/ State=Normal/Leaving/Joining/Moving
-- Address Load Tokens Owns Host ID Rack
UN 192.168.1.190 9.78 GiB 256 ? f3e56d8d-caf2-450a-b4f1-e5ac5163a17a rack1
UN 192.168.1.191 77.53 MiB 256 ? e464cda9-ca8b-400b-82eb-59256d23c94a rack1
UN 192.168.1.192 89.31 MiB 256 ? 6feaa65f-2523-4b65-9717-f4f3cbf28ef0 rack1
3条答案
按热度按时间tquggr8v1#
大多数table都是统一的,但这一张
sd2nnvve2#
即使主令牌范围存在严重的不平衡(关于负载的某些内容不正确),如果您使用的rf为3,那么所有3个节点都将具有所有数据的副本,并且任何主范围不平衡都将不可见。
为了获得不平衡,您已经发布了使用rf1的点,并且可能是一个糟糕的数据模型/分区键,它将数据热插接到单个节点。
ttcibm8c3#
是的,分区键的分布很可能有偏差,很可能有些分区的行比其他分区的行多得多。查看此文档中的建议,特别是“每个分区的单元数”和“大分区”部分。您可以使用多种工具来检查假设:
nodetool tablehistograms
(可能需要对每个表分别执行)在每个主机上,将以字节为单位显示50%、75%、…、100%百分位数的单元数和分区大小。你可能会看到95%和100%百分位之间的巨大差异。nodetool tablestats
将显示每个主机上每个表的分区的最大平均大小(&A)dsbulk有一个选项,可以根据每个分区的行数显示最大的分区—它需要对集群中的每个表执行一次,但只执行一次,而不是从每个主机执行
nodetool
: