首页 > 解决方案 > 为什么我的 cassandra 集群的某些节点的大小稳步增长?

问题描述

我有一个 48 节点 C* 集群 (3.11.4),分布在 4 个 AWS 区域,RF=3。几个月前,我开始注意到一些节点上的磁盘使用量持续增加。起初我通过销毁节点并重建它们来解决问题,但问题又回来了。

我最近做了一些更多的调查,这就是我发现的:
- 通过简单地查看磁盘空间使用情况,我将问题缩小到使用 TWCS 的 CF(并且所有写入的行都有一个 ttl)
- 在每个区域中,3 个节点有这个磁盘空间增长的问题(匹配复制因子)
- 在每个节点上,我使用sstableexpiredblockers. 这个 SSTable 阻止了所有其他 SSTable 被清理
- 在 SSTable 中,使用sstabledump,我发现一行没有像其他行一样的 ttl,并且似乎来自团队中的其他人测试某些东西并忘记了包括一个 ttl
- 所有其他行都显示“过期:真实”,除了这一行,因此我怀疑
- 当我查询那个特定的分区键时,我没有得到任何结果
- 我无论如何都尝试删除该行,但这似乎没有改变任何东西
- 我也尝试过nodetool scrub,但这也没有帮助

这个没有 ttl 的流氓行会解释这个问题吗?如果是这样,为什么?如果没有,是否有人有其他想法?为什么行显示在sstabledump但我查询时不显示?

我感谢任何帮助或建议!

标签: cassandra

解决方案


一个可能的原因是您的架构的定义,更准确地说,分区键,因为您可能有大部分记录分配给少数令牌,这种情况称为“热点”。

例如,假设您的表有汽车的信息,而您的分区令牌是它所在的国家/地区,则分配用于保存来自美国或德国的汽车数据的节点与在孟加拉国或巴基斯坦拥有汽车代币的人

您可能希望使用复合分区键,以实现数据分片的均匀分布。


推荐阅读