卡桑德拉再平衡

Cassandra rebalance

我使用的是 Apache Cassandra 2.1.1,当使用 nodetool status 时,我的一个节点的 Load 大约是另外两个节点的一半,而 Owns 在所有节点上几乎相等。我对 Cassandra 有点陌生,不知道我是否应该为此担心。重新启动所有节点后,我尝试使用修复和清理,但它仍然显得不平衡。我正在使用 GossipingPropertyFileSnitch,每个节点配置为 cassandra-rackdc.properties 中指定的 dc=DC1 和 rack=RAC1。我也将 Murmur3Partitioner 与 NetworkTopologyStrategy 一起使用,其中我的键空间定义为

CREATE KEYSPACE awl WITH replication = {'class': 'NetworkTopologyStrategy', 'DC1': '2'}  AND durable_writes = true;

我认为问题出在 awl 键空间上,因为 data/awl 文件夹的大小与 nodetool status 报告的大小相同。我的 nodetool status 输出如下。任何帮助将不胜感激。

Datacenter: DC1
===============
Status=Up/Down
|/ State=Normal/Leaving/Joining/Moving
--  Address     Load       Tokens  Owns (effective)  Host ID                               Rack
UN  10.1.1.152  3.56 GB    256     68.4%             d42945cc-59eb-41de-9872-1fa252762797  RAC1
UN  10.1.1.153  6.8 GB     256     67.2%             065c471d-5025-4bf1-854d-52d579f2a6d3  RAC1
UN  10.1.1.154  6.31 GB    256     64.4%             46f05522-29cc-491c-ab65-334b205fc415  RAC1

我怀疑这是由于插入的键值的分布造成的。它们可能没有很好地分布在可能的键值中,因此它们中的许多散列到一个节点。由于您使用的是复制因子 2,因此第二个副本是环中的下一个节点,导致两个节点的数据多于第三个节点。

您没有显示您的 table 架构,所以我不知道您使用什么作为分区键和集群键。您希望使用具有高基数和良好分布的键值来避免大量插入散列到一个节点的热点。通过更好的分布,您将获得更好的性能和更均匀的 space 跨节点使用。