为什么RF 3的3节点集群上的负载不同?

时间:2016-07-13 08:20:59

标签: cassandra cassandra-3.0

我有一个3节点的Cassandra集群,复制因子为3。 这意味着所有数据都应该复制到所有3个节点上。

以下是nodetool状态的输出:

--  Address      Load       Tokens       Owns (effective)  Host ID                               Rack
UN  192.168.0.1  27.66 GB   256          100.0%            2e89198f-bc7d-4efd-bf62-9759fd1d4acc  RAC1
UN  192.168.0.2  28.77 GB   256          100.0%            db5fd62d-3381-42fa-84b5-7cb12f3f946b  RAC1
UN  192.168.0.3  27.08 GB   256          100.0%            1ffb4798-44d4-458b-a4a8-a8898e0152a2  RAC1

这是所有3个节点上磁盘使用情况的图表:

Cassandra disk usage over time

我的问题是为什么这些尺寸变化如此之大?是压缩还没有同时进行吗?

1 个答案:

答案 0 :(得分:3)

我想说几个因素可以在这里发挥作用。

如您所知,压缩不会同时运行,因此每个节点上SSTable的数量和内容会有所不同。

memtables也不会同时刷新到SSTables,所以从一开始,每个节点都会有一些不同的SSTable。

如果你对SSTables使用压缩,假设它们的内容有些不同,压缩数据节省的空间量会有所不同。

即使您使用的复制因子为3,我认为非主要范围数据的存储空间与主要范围数据的存储空间略有不同,并且可能会映射更多主要范围数据到一个节点或另一个节点。

所以基本上除非每个节点在完全相同的时间看到完全相同的消息序列,否则它们将不具有完全相同的数据大小。