Tencent / Tendis

Tendis is a high-performance distributed storage system fully compatible with the Redis protocol.
http://tendis.cn
Other
2.87k stars 317 forks source link

扩容之后,原节点的磁盘容量占用没有释放 #187

Closed goldbridge18 closed 2 years ago

goldbridge18 commented 2 years ago

tendis的扩容,在原来的3个节点的基础上增加3三个分片,重新分配slot,扩容成功。但是扩容前的3三个节点(原3个tendis服务器)的的磁盘容量和扩容后的磁盘容量占用没有变化,也看了tendis官方的相关扩容文档,没有相关详细的说明,也再原master上执行了cluster clear ,是否需要手动清除已迁移的数据?

raffertyyu commented 2 years ago

这个是由于tendis是直接用rocksdb的deleteRange接口删除原节点上的数据的,rocksdb的实现机制是增加一个墓碑标记这一段数据已经被删除了。但是没有真正的去删除这些数据,会在后续运行过程中,rocksdb执行compaction操作彻底删除这些数据,这时才能释放原节点的空间。如果迟迟没有发生compaction是没办法回收磁盘空间的。背景可以参考tendis数据删除

对于现有集群,tendis在2.4.0版本中添加了一个deletefilesinrange命令。就是针对这种情况。

对于更老版本的集群,可以选择使用compactRange,强制触发compaction操作从而删除数据。对延迟以及请求影响较大。可以考虑在非高峰时间触发。

也可以配置compactrange-after-deleterange参数,这个参数默认关闭,开启之后会强制在deleteRange操作后自动调用compactRange来执行compaction操作,由于非常耗费CPU,所以默认是关闭状态,如果知晓compactRange对线上业务的影响,可以酌情考虑开启。

goldbridge18 commented 2 years ago

compaction的时候对资源消耗大吗?

raffertyyu commented 2 years ago

compaction的时候对资源消耗大吗?

对,compaction操作需要大量CPU和IO资源,所以挑请求较少的时间比较合适。

goldbridge18 commented 2 years ago

非常感谢

goldbridge18 commented 2 years ago

compaction的效率高吗,一个片的2T数据量,大概需要多久?

raffertyyu commented 2 years ago

compaction的效率高吗,一个片的2T数据量,大概需要多久?

这个可能需要看你的rocksdb的配置。比如compaction的线程数和其他一些配置等。不太好给个确定的估计。范围比较大,2t的话可能会有点久,几个小时应该是需要的,建议可以分段进行,比如迁移了2000个slot,先对100个slot进行compaction。或者在compact命令中额外指定db,分db进行,然后再乘以20(2000/100)这样预估总共需要多长时间。