Cassandra 1.2:如何获取每个虚拟节点的实际负载

4

我有一个Cassandra 1.2集群,正在使用虚拟节点和ByteOrderedPartitioner。我知道这不被推荐,因为我需要确保数据的键均匀分布在键空间中,以便每个物理节点上的负载得到适当的分配。我遇到的问题是,我找不到一种方式来查看每个虚拟节点的实际负载。如果我像这样使用nodetool:

nodetool status

我收到的输出如下所示:
Datacenter: datacenter1
=======================
Status=Up/Down
|/ State=Normal/Leaving/Joining/Moving
--  Address        Load       Tokens  Owns   Host ID                               Rack
UN  XXX.XXX.XXX.XXX 14.73 GB   256     11.3%  a4d365ca-f21b-4418-ab0e-656520d931b5  rack1
UN  XXX.XXX.XXX.XXX  8.51 GB   256     10.6%  f587fe0b-e765-4c02-bd50-cef9758e9a6b  rack1
UN  XXX.XXX.XXX.XXX 10.92 GB   256     10.3%  6160ca91-1e07-47ec-8fa9-ef886c140e91  rack1
UN  XXX.XXX.XXX.XXX  9.62 GB   256     10.0%  9c4a8476-1de2-455b-956a-c4cea31675bf  rack1
UN  XXX.XXX.XXX.XXX 11.11 GB   256     11.2%  61639d9c-ad49-4f38-86b3-cd48e0c90c49  rack1
UN  XXX.XXX.XXX.XXX  7.86 GB   256     35.1%  195b6f79-7d68-4a98-8a9b-55bd0dd699e2  rack1
UN  XXX.XXX.XXX.XXX 11.29 GB   256     11.4%  0ac03b6a-0a0e-4f83-8b9e-2f16d4db47ab  rack1

这意味着分布并不太好,但我想在虚拟节点上看到实际的分布情况,我现在遇到的问题是运行以下命令:
nodetool ring

这个命令会给我很多条结果,每个虚拟节点(总共256个)都会有一条结果。但是这些信息基本上没有什么用处,因为每个虚拟节点的负载情况看起来都是一样的(实际大小与物理节点上的总信息相比不切实际)。

XXX.XXX.XXX.XXX  rack1       Up     Normal  11.29 GB        11.45%              Token(bytes[2daad5a3e325e152d7be5bc2d5f87fef])
XXX.XXX.XXX.XXX  rack1       Up     Normal  11.29 GB        11.45%              Token(bytes[2ffef9060e59c1c922a1ecf8e2643794])
XXX.XXX.XXX.XXX  rack1       Up     Normal  11.29 GB        11.45%              Token(bytes[31041cc591d63d91a67a21ecf44a57c2])
XXX.XXX.XXX.XXX  rack1       Up     Normal  11.29 GB        11.45%              Token(bytes[31bbcaafcdcb2ecc3a4ef3fb3af4b82b])
XXX.XXX.XXX.XXX  rack1       Up     Normal  11.29 GB        11.45%              Token(bytes[324e972b43b63d63df4255e459fed524])
XXX.XXX.XXX.XXX  rack1       Up     Normal  11.29 GB        11.45%              Token(bytes[3353224ae20e902e5b2b243c8fc5ff97])
XXX.XXX.XXX.XXX  rack1       Up     Normal  11.29 GB        11.45%              Token(bytes[350ed29fa9a1a377b8014beef1d160f0])
XXX.XXX.XXX.XXX  rack1       Up     Normal  11.29 GB        11.45%              Token(bytes[3553ad83beaf91d98a692e22718e321d])
XXX.XXX.XXX.XXX  rack1       Up     Normal  11.29 GB        11.45%              Token(bytes[35893a82c84982c467251115a7406f00])
XXX.XXX.XXX.XXX  rack1       Up     Normal  11.29 GB        11.45%              Token(bytes[37fad1c7dbd8d66d75747699ce4d6d2e])
XXX.XXX.XXX.XXX  rack1       Up     Normal  11.29 GB        11.45%              Token(bytes[388bcf470bd5c97e1f3cb45c01bd1f2c])
XXX.XXX.XXX.XXX  rack1       Up     Normal  11.29 GB        11.45%              Token(bytes[38a0cdc654a9934e5a16e5242c26fc5f])
XXX.XXX.XXX.XXX  rack1       Up     Normal  11.29 GB        11.45%              Token(bytes[393b8185b527f036cd44f5f6791484b9])
XXX.XXX.XXX.XXX  rack1       Up     Normal  11.29 GB        11.45%              Token(bytes[39ae4356a22bbb5ea20d5c6fc83cd2de])
XXX.XXX.XXX.XXX  rack1       Up     Normal  11.29 GB        11.45%              Token(bytes[39dd01bb66beeeb46627f0303671c30d])
XXX.XXX.XXX.XXX  rack1       Up     Normal  11.29 GB        11.45%              Token(bytes[3a49f707a7cea045935524900094c4e4])
XXX.XXX.XXX.XXX  rack1       Up     Normal  11.29 GB        11.45%              Token(bytes[3a58eba6a5730a75fd899cf77c93d6cb])

我的问题是,Cassandra集群中有没有另一种工具/方法可以获取每个虚拟节点的真实负载?谢谢!

1
听起来你想使用RandomPartitioner。这会给你一个均匀分布的键。你手动选择了令牌吗?对于ByteOrderedPartitioner,选择随机令牌(虚拟节点的默认值)通常不会得到良好的分布。 - Richard
2个回答

2
当您在没有指定keyspace的情况下运行nodetool ring时,它基于SimpleStrategy来检查复制的负载情况。如果您的令牌已正确分布到NetworkTopologyStrategy中,则这看起来会“不对劲”。
由于复制策略确定了负载,并且每个keyspace都可以具有不同的复制策略,因此您需要将keyspace名称作为第二个参数传递以查看每个keyspace的真实负载分布。
如果您正在使用NetworkTopologyStrategy,则nodetool ring<keyspace>将考虑数据中心和机架位置来确定令牌分布,并为您提供准确的负载值。

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接