Cassandra 节点与 Vnodes 令牌策略极度不平衡

Cassandra nodes extremely unbalanced with Vnodes token strategy

使用每个节点 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

是的,分区键的分布很可能存在偏差,很可能某些分区的行数比其他分区多得多。检查 this document 以获得建议,尤其是“每个分区的单元数”和“大分区”部分。您可以使用工具数量来检查假设:

  • nodetool tablehistograms(可能需要对每个 table 单独执行)在每台主机上将显示单元格数和分区大小(以字节为单位)为 50%、75%、... , 和 100% 百分位数。您可能会发现 95% 和 100% 百分位数之间存在很大差异。
  • nodetool tablestats 将显示每个 table 每个主机
  • 的最大和平均分区大小
  • DSBulk 有一个选项可以根据每个分区的行数显示最大的分区 - 它需要对集群中的每个 table 执行一次,但只执行一次,而不是从每个主机执行一次对比 nodetool:
dsbulk count -k keyspace -t table --log.verbosity 0 --stats.mode partitions

即使主要令牌范围存在显着不平衡——负载方面的某些事情是不正确的——如果您使用的 RF 为 3,则所有 3 个节点都将具有所有数据的副本,并且任何主要范围不平衡将不可见。

要获得不平衡,您已发布指向使用 RF1 的使用 - 以及可能将数据热点化到单个节点的不良数据模型/分区键。

大多数桌子都是统一的,但这张

kairosdb/data_points histograms  —— NODE1 load 9.73GB
Percentile  SSTables     Write Latency      Read Latency    Partition Size        Cell Count
                              (micros)          (micros)           (bytes)
50%             2.00             17.08            152.32              1597                86
75%             2.00             35.43            182.79              9887               446
95%             2.00             88.15            263.21             73457              3973
98%             2.00            105.78            263.21            315852             20501
99%             2.00            105.78            263.21            545791             29521
Min             2.00              6.87            126.94               104                 0
Max             2.00            105.78            263.21            785939             35425

kairosdb/data_points histograms  —— NODE2 load 36.95MB
Percentile  SSTables     Write Latency      Read Latency    Partition Size        Cell Count
                              (micros)          (micros)           (bytes)
50%             1.00             20.50            454.83              1109                42
75%             2.00             42.51            943.13              9887               446
95%             2.00             73.46          14530.76             73457              3973
98%             2.00            219.34          14530.76            263210             17084
99%             2.00            219.34          14530.76            545791             29521
Min             1.00              8.24             88.15               104                 0
Max             2.00            219.34          14530.76            785939             35425

kairosdb/data_points histograms  —— NODE3 load 61.56MB
Percentile  SSTables     Write Latency      Read Latency    Partition Size        Cell Count
                              (micros)          (micros)           (bytes)
50%             1.00             14.24            943.13              1331                50
75%             1.00             29.52           1131.75              9887               446
95%             1.00             61.21           1131.75             73457              3973
98%             1.00            152.32           1131.75            315852             17084
99%             1.00            654.95           1131.75            545791             29521
Min             1.00              4.77            785.94                73                 0
Max             1.00            654.95           1131.75            785939             35425