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