2013-05-03 61 views
1

对于大约1个月,我在我的Cassandra集群中看到以下3个节点的使用空间值(我有复制因子= 3)nodetool cfstats output :Cassandra cfstats:Live和Total已用空间值之间的差异

Pending Tasks: 0 
      Column Family: BinaryData 
      SSTable count: 8145 
      Space used (live): 787858513883 
      Space used (total): 1060488819870 

对于其他节点我看到良好的价值观,是这样的:

  Space used (live): 780599901299 
      Space used (total): 780599901299 

你可以注意到Live和总面积之间有25%的差异(〜254Gb)。看起来我在这3个节点上有很多垃圾,因为某些原因无法压缩。 列家人我说的是有100兆的大小的SSTable配置LeveledCompaction策略:

create column family BinaryData with key_validation_class=UTF8Type 
    and compaction_strategy=LeveledCompactionStrategy 
    and compaction_strategy_options={sstable_size_in_mb: 100}; 

注意,即总价值在所有三个节点为一个月住。我依靠Cassandra自动标准化数据。

我试图降低空间(无结果):

  1. nodetool清理
  2. nodetool维修-PR
  3. nodetool紧凑[KEYSPACE] BinaryData(没有任何反应:主要压实的LeveledCompaction战略忽视)

有没有其他的事情我应该尝试清理垃圾和可用空间?

+0

你在本月的时间段内是否执行了大量的删除操作? – abhi 2013-05-03 10:38:23

+0

我想是的,我没有一个精确的值,它可能会在100Gb-1Tb之间的数据被删除。但为什么我的群集中只有3个节点存在此问题?为什么群集中其余节点具有Live == Total?我正在使用Cassandra 1.1.9 – odiszapc 2013-05-03 13:46:41

回答

0

整平压实创建一个固定的,相对较小的尺寸的sstables,你的情况下它是100Mb被分组到“水平”。在每个 级别,sstables保证不重叠。每个级别的 是以前的十倍。

所以基本上从cassandra doc中提供的这个语句中,我们可以得出结论,可能是在你的情况下十次大的背景没有形成,导致没有压缩。

即将到来的第二个问题,因为您已将复制因子保留为3,所以数据有3个重复副本,对此您有这种异常。

Live和Total space之间的最后差距为25%,因为您知道它应该在删除操作之上。

+0

谢谢。但是为什么只有3个节点,为什么其他节点不会影响这个问题呢?无论如何,看到我的解决方案下面 – odiszapc 2013-05-05 03:25:14

+0

聪明的举动;)。以及那张卡上一直都有。反正你使用哪种分区器?数据分布依赖于分区器,这可能会给你为什么只有3个受影响的节点。 – abhi 2013-05-05 04:28:24

+0

RandomPartitioner – odiszapc 2013-05-05 10:41:52

0

对于LeveledCompactionStrategy,您希望将sstable大小设置为大约15 MB的最大值。 100MB会导致大量不必要的磁盘IO,并且会导致数据传播到更高级别需要很长时间,从而导致删除的数据长时间滞留。

由于大量的删除操作,您很可能会通过轻微压缩来解决一些问题,而不是在Cassandra 1.1中清理已删除的数据。在Cassandra 1.2中进行轻微压缩时,有一堆修补程序可用于清理墓碑。尤其是与LCS结合使用时。我会在Dev/QA环境中测试Cassandra 1.2。 1.2仍然有一些扭曲的问题被解决,所以你需要确保跟上最新的安装新版本,甚至在git中运行1.2分支,但是对于你的数据大小和使用模式,我认为它会给你一些肯定的改进。

+0

我会试试1.2。请参阅下面的解决方案 – odiszapc 2013-05-05 03:24:40

0

好的,我有一个解决方案。它看起来像Cassandra问题。首先,我深入了解了Cassandra 1.1.9源代码,并指出Cassandra在节点启动期间对SStables进行了一些重新分析。它删除标记为压缩的SStables,执行重新计算已用空间,并执行其他一些工作。

因此,我所做的是重新启动3个问题节点。重新启动完成后,“总计”和“实时”值立即变为相等,然后压缩过程已启动,现在使用的空间正在减少。