问题描述

Nacos用了很久的1.4.4,最近升级到了2.x在使用过程中,发现日志文件protocol-raft.log会不停增长,占用了大量的硬盘空间。tail 了一下文件日志发现大量的 leader 选举错误日志,如下:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
java.lang.IllegalStateException: Fail to get leader of group naming_service_metadata, Unknown leader
        at com.alipay.sofa.jraft.core.CliServiceImpl.getPeers(CliServiceImpl.java:605)
        at com.alipay.sofa.jraft.core.CliServiceImpl.getPeers(CliServiceImpl.java:498)
        at com.alibaba.nacos.core.distributed.raft.JRaftServer.registerSelfToCluster(JRaftServer.java:353)
        at com.alibaba.nacos.core.distributed.raft.JRaftServer.lambda$createMultiRaftGroup$0(JRaftServer.java:264)
        at <unknown class>.run(Unknown Source)
        at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source)
        at java.util.concurrent.FutureTask.run(Unknown Source)
        at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(Unknown Source)
        at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(Unknown Source)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
        at java.lang.Thread.run(Unknown Source)
2023-09-21 06:03:33,746 INFO shutdown jraft server

解决方案

1
rm -rf /data/nacos/data/protocol/raft && ./docker-compose -f nacos.yml down && ./docker-compose -f nacos.yml up -d&& ./docker-compose -f nacos.yml logs -f

原因

因为 nacos 是通过 docker 方式启动,docker 启动时会分配一个随机 ip,而 nacos 2.x 之后引入了SofaJRaft单机部署也存在节点了,而且节点leader 信息会写入 nacos/data/protocol/raft 目录下,所以每次重启都会找不到上一次保存下来的leader,所以会导致 protocol-raft.log 不停增长。

每次重启 nacos 的 docker 时候提前删除掉旧的 raft 信息即可

参考

1.4.0版本 单机模式下 错误:code:503,msg:server is DOWN now, please try again later! #4210