存算分离部署模式下CnosDB单节点磁盘耗尽原因咨询
在存算分离部署的CnosDB企业版2.3.4环境中,执行SHOW DATANODES;发现一个HOT节点磁盘空间耗尽(NODISKSPACE状态),另外两个HOT节点仍有2.02GB剩余空间。结合提供的配置文件,可能的原因如下:
1. 预留空间配置未触发写入转移
配置中reserve_space = "0",这个参数用于设置节点剩余空间的阈值——当节点剩余空间低于该值时,Meta服务会停止向其分配写入任务。设置为0意味着即使磁盘完全耗尽,该节点仍会被纳入写入分配范围,无法自动将流量转移到其他健康节点,最终导致磁盘被写满。
2. Hinted Handoff数据堆积
配置里hinted_off.enable = true,当某个数据节点临时不可用时,其他节点会将本该写入该节点的数据暂存到本地的Hinted Handoff(HH)目录(/var/lib/cnosdb/hh)。如果该节点曾长时间离线,恢复后大量暂存的HH数据会同步到该节点,短时间内占满磁盘;而另外两个节点没有堆积的HH数据,因此剩余空间正常。
3. 数据分片分布不均
- 存在高基数标签或大时间序列的分片被集中分配到该节点:CnosDB默认按哈希均匀分配分片,但如果某些时间序列的哈希值恰好落在该节点的分片范围,或者创建表时指定了偏向该节点的分片策略,会导致该节点数据量远大于其他节点。
- 可通过执行
SHOW SHARDS;查看每个分片的节点分布,确认是否有大量分片集中在磁盘耗尽的节点上。
4. 日志或WAL文件未及时清理
配置指定了日志路径/var/log/cnosdb和WAL路径/var/lib/cnosdb/wal,如果日志滚动策略不合理(比如未配置按大小/时间切割),或者WAL文件保留时间过长未自动清理,会导致这些目录占用大量磁盘空间。可登录该节点执行du -sh /var/lib/cnosdb/* /var/log/cnosdb定位具体占用来源。
5. 节点历史配置或任务异常
虽然当前配置中node_basic.cold_data_server = false(三个节点均为HOT节点),但如果该节点曾被配置为冷数据节点,或者存在错误的归档任务将大量冷数据迁移到该节点,也会导致磁盘占用过高。
排查建议
- 登录磁盘耗尽的节点,执行
df -h查看磁盘整体使用情况,再用du -sh /var/lib/cnosdb/* /var/log/cnosdb定位具体占用目录。 - 执行
SHOW SHARDS;检查分片分布,确认是否存在分片集中问题。 - 调整
reserve_space为合理值(如"1GB"),避免节点磁盘临近耗尽时仍接收写入。 - 查看Hinted Handoff目录
/var/lib/cnosdb/hh的大小,若存在大量堆积数据,可等待同步完成或手动清理(需确保数据已同步)。
内容的提问来源于stack exchange,提问作者learn_more

