1

我有一个 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 磁盘使用率随时间变化

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

4

1 回答 1

3

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

正如您所注意到的,压缩不会同时运行,因此 SSTables 的数量和内容在每个节点上都会有所不同。

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

如果您对 SSTables 使用压缩,鉴于它们的内容有些不同,压缩数据节省的空间量会有些不同。

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

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

于 2016-07-13T11:40:17.013 回答