Jib*_*lat 2 cassandra nodetool scylla
我有一个Cassandra集群(2个DC),每个节点有6个节点,RF节点(每个DC中)有4个节点已满,所以我需要很快清理空间.
我试图进行全面修复,但结果是一个坏主意,因为空间开始增加甚至更多,修复最终被绞死.作为最后的解决方案,我正在考虑开始修复,然后清理从最小到最大的特定列.
即
nodetool repair -full foo_keyspace bar_columnfamily
nodetool cleanup foo_keyspace bar_columnfamily
Run Code Online (Sandbox Code Playgroud)
您认为此程序对数据是否安全?
谢谢
Nad*_*'El 11
您在问题中提出的命令会做出一些不正确的假设.首先,"修复"不应该,也不会,节省任何空间.所有修复都是找到不同副本之间的不一致并修复它们.它将不执行任何操作(如果没有任何不一致),或添加数据,而不是删除数据.其次,在向集群添加新节点之后需要执行"清理" - 在每个节点将一些数据发送到新节点之后,"清理"会从旧节点中删除数据.但是在不添加节点时清理是不相关的.
您可能正在寻找的命令是"紧凑".这可以节省空间,但只有当您知道有很多覆盖(重写现有行),删除或数据到期(TTL)时.你使用什么压缩策略?如果它是默认的,大小分层压缩策略(STCS),您可以开始主要压缩(nodetool compact),但应该意识到涉及的大风险:
主要压缩将所有数据合并为一个sstable(Cassandra的磁盘文件格式),删除已删除,过期或覆盖的数据.然而,在这个压实过程中,您有两个输入和输出文件,在最坏的情况下,这可能会增加一倍,你的磁盘使用情况,并可能会失败,如果磁盘是超过50%满.这就是为什么许多Cassandra最佳实践指南建议永远不要填满超过50%的磁盘.但这只是最糟糕的情况.如果您知道输出文件将比输入小得多(因为大多数数据已被删除),您可以使用更少的可用空间.也许更有用的是,如果您有许多单独的表(列族),您可以单独压缩每个表(如您所建议的,从最小到最大),并且压缩期间临时所需的最大磁盘空间量可远低于50%的磁盘.
Scylla是Cassandra的C++重新实现,正在开发一种称为"混合压缩"的东西(参见https://www.slideshare.net/ScyllaDB/scylla-summit-2017-how-to-ruin-your-performance-by-choosing -the-wrong-compaction-strategy)就像Cassandra的大小分层压缩一样,但是以小块压缩而不是生成一个巨大的文件,以避免压缩过程中巨大的临时磁盘使用.不幸的是,Cassandra还没有这个功能.
| 归档时间: |
|
| 查看次数: |
773 次 |
| 最近记录: |