Nacos Raft 日志数据膨胀处理记录
问题背景
在 Nacos 集群运行过程中,data/protocol/raft/ 目录下的日志文件会随着时间推移不断增长,占据大量磁盘空间,可能导致:
– 磁盘空间不足
– 服务启动变慢
– 数据恢复时间过长

Raft 目录结构说明
data/protocol/raft/ 目录主要包含以下文件:
可清理的文件
LOG.*– Raft 操作日志文件,记录集群共识操作LOG.old.*– 旧的日志文件,可安全删除
不可删除的文件
*.sst– RocksDB 数据文件CURRENT– 当前数据库状态指针IDENTITY– 数据库标识MANIFEST-*– 元数据清单OPTIONS-*– 配置选项
警告:除了 LOG 相关文件外,其他文件直接关系到数据库完整性,不可手动删除
配置优化方案
1. 调整快照执行周期
# 快照执行周期,从默认 30 分钟缩短到 10 分钟(单位:秒)
nacos.core.protocol.raft.data.snapshot_interval_secs=600
优化效果:
– 更频繁的快照可以及时清理旧日志
– 减少日志累积量
– 加快故障恢复速度
2. 限制日志保留数量
# 日志保留数量,超过此数量的旧日志会被自动清理
nacos.core.protocol.raft.log.max_segment_count=10
优化效果:
– 防止日志文件无限增长
– 自动清理机制,无需人工干预
3. 控制单个日志文件大小
# 单个日志文件最大大小(单位:字节,默认 8MB)
nacos.core.protocol.raft.log.max_segment_size=8388608
优化效果:
– 控制单个文件大小,便于管理
– 避免单个文件过大影响性能
完整配置示例
在 application.properties 或 ConfigMap 中添加:
#*************** JRaft Related Configurations ***************#
### Raft 集群选举超时时间,默认 5 秒
# nacos.core.protocol.raft.data.election_timeout_ms=5000
### 快照执行周期(单位:秒,默认 1800 秒即 30 分钟)
nacos.core.protocol.raft.data.snapshot_interval_secs=600
### Raft 内部工作线程数
# nacos.core.protocol.raft.data.core_thread_num=8
### Raft 业务请求处理线程数
# nacos.core.protocol.raft.data.cli_service_thread_num=4
### 日志保留数量限制
nacos.core.protocol.raft.log.max_segment_count=10
### 单个日志文件最大大小(字节)
nacos.core.protocol.raft.log.max_segment_size=8388608
手动清理方案
如果已经存在大量旧日志,可以手动清理:
清理步骤
# 1. 停止 Nacos 服务(重要!)
docker stop nacos
# 或
kubectl scale statefulset nacos --replicas=0 -n tools
# 2. 进入 Raft 数据目录
cd data/protocol/raft/
# 3. 删除旧日志文件
rm -f LOG.old.*
# 4. 清空当前日志文件
echo "" > LOG
# 5. 重启 Nacos 服务
docker start nacos
# 或
kubectl scale statefulset nacos --replicas=3 -n tools
注意事项
- 必须先停止服务再清理,避免数据不一致
- 只删除
LOG.old.*和清空LOG文件 - 不要删除 RocksDB 相关文件(.sst、CURRENT 等)
- 清理后检查服务是否正常启动
K8s 环境配置更新
更新 ConfigMap
# 编辑 ConfigMap
kubectl edit configmap nacos-application-configmap -n tools
# 或者应用新的配置文件
kubectl apply -f nacos-application-configmap.yaml
重启 Pod 使配置生效
# 滚动重启 StatefulSet
kubectl rollout restart statefulset nacos -n tools
# 查看重启状态
kubectl rollout status statefulset nacos -n tools
监控建议
定期检查磁盘使用情况
# 查看 Raft 目录大小
du -sh data/protocol/raft/
# 查看日志文件数量
ls -l data/protocol/raft/LOG.* | wc -l
设置告警阈值
- Raft 目录大小超过 5GB 时告警
- 日志文件数量超过 20 个时告警
- 磁盘使用率超过 80% 时告警
参数调优建议
根据实际业务场景调整参数:
高频配置变更场景
# 更频繁的快照,5 分钟一次
nacos.core.protocol.raft.data.snapshot_interval_secs=300
# 保留更少的日志段
nacos.core.protocol.raft.log.max_segment_count=5
低频配置变更场景
# 适中的快照频率,15 分钟一次
nacos.core.protocol.raft.data.snapshot_interval_secs=900
# 保留更多的日志段
nacos.core.protocol.raft.log.max_segment_count=15
大规模集群场景
# 增加工作线程数
nacos.core.protocol.raft.data.core_thread_num=16
nacos.core.protocol.raft.data.cli_service_thread_num=8
# 适中的快照频率
nacos.core.protocol.raft.data.snapshot_interval_secs=600
参考
1.官方解答:https://nacos.io/blog/faq/nacos-user-question-history16190/