1、使用docker容器部署了nacos,容器编排文件docker-compose.yml配置nacos服务以standalone方式启动。
2、使用portainer工具查看容器情况正常
3、在开发环境将多个微服务注册到nacos
4、本地多个节点注册上去,导致有本地服务实例和开发环境服务实例在同一个nacos注册中心的微服务上,这时候我想下线开发环境的微服务实例,当我点“下线”按钮操作时,报错了:errCode: 500, errMsg: do metadata operation failed。咋一看,有点懵逼,什么元数据操作失败。
5、思考:经过我思来想去认为可能是数据库表数据问题,经过我对数据库表检查没有发现问题。
然后又想是否不是standalone模式启动,但是重启后发现是standalone模式启动,然后操作还是报错。最后网上查找一下,有可能是“Raft 协议选举故障或元数据不一致导致”,然后我就把nacos/data目录下的protocol目录删除了,然后重启nacos容器,再操作果然成功了。
6、核心修复步骤(90% 场景适用)
1. 清理 Raft 协议缓存数据
删除 Nacos 所有节点下的 protocol 目录,重启集群
# 进入 Nacos 安装目录 cd ${nacos.home}/data rm -rf protocol # 删除协议数据
./bin/shutdown.sh && ./bin/startup.sh # 重启集群
原因:IP 变动或宕机导致 Raft 记录的旧集群地址失效,需重置选举状态
2. 验证集群配置一致性
检查每个节点的 cluster.conf 文件,确保所有节点 IP 一致且无重复:
cat conf/cluster.conf # 示例内容: # 192.168.1.101:8848 # 192.168.1.102:8848
注意:修改后需重启所有节点

2180

被折叠的 条评论
为什么被折叠?



