Nacos Raft 日志数据膨胀处理记录

Nacos Raft 日志数据膨胀处理记录

问题背景

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

image-20260311142745142

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/

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇