Nacos 我用三个节点组成nacos集群,其中有一个节点挂掉了,重启之后发现和另外两个数据不一致,就是在 | Nacos 官网

Nacos 我用三个节点组成nacos集群,其中有一个节点挂掉了,重启之后发现和另外两个数据不一致,就是在


用户问题 :

Nacos 我用三个节点组成nacos集群,其中有一个节点挂掉了,重启之后发现和另外两个数据不一致,就是在这个节点的web界面修改服务权重后,刷新不生效,但是其他两个生效了,日志报错ERROR [DISTRO-INIT] load snapshot Nacos:Naming:v2

from 10.111.107.10:8878 failed.

com.alibaba.nacos.core.distributed.distro.exception.DistroException: [DISTRO-EXCEPTION][DISTRO] Cancel get snapshot caused by target server 10.111.107.10:8878 unhealthy at com.alibaba.nacos.naming.consistency.ephemeral.distro.v2.DistroClientTransportAgent.getDatumSnapshot(DistroClientTransportAgent.java:190) at com.alibaba.nacos.core.distributed.distro.task.load.DistroLoadDataTask.loadAllDataSnapshotFromRemote(DistroLoadDataTask.java:104) at com.alibaba.nacos.core.distributed.distro.task.load.DistroLoadDataTask.load(DistroLoadDataTask.java:87) at com.alibaba.nacos.core.distributed.distro.task.load.DistroLoadDataTask.run(DistroLoadDataTask.java:63) at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) at java.util.concurrent.FutureTask.run(FutureTask.java:266) at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:180) at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:293) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) at java.lang.Thread.run(Thread.java:748)


专家官方解答 :

根据您提供的错误信息和已知的知识,问题分析及解决步骤如下:

问题分析:

  1. 节点重启后数据不一致:当您重启挂掉的Nacos节点后,该节点与集群中其他节点的数据不一致,特别是在修改服务权重后,该节点上的变更未能生效,而其他节点生效。这表明重启节点未能成功同步到最新的集群数据。
  2. 日志错误信息:日志中的错误信息ERROR [DISTRO-INIT] load snapshot Nacos:Naming:v2:ClientData from 10.111.107.10:8878 failed. com.alibaba.nacos.core.distributed.distro.exception.DistroException: [DISTRO-EXCEPTION][DISTRO] Cancel get snapshot caused by target server 10.111.107.10:8878 unhealthy表明,在尝试从地址10.111.107.10:8878加载快照数据时失败,原因是目标服务器被标记为不健康。

解决步骤:

  1. 检查网络连通性:首先确保重启的节点与集群中其他节点,特别是地址10.111.107.10:8878之间的网络通信是正常的。使用pingtelnet等工具验证网络连接情况。

  2. 确认目标节点健康状况:登录到目标服务器10.111.107.10,检查Nacos服务是否运行正常,包括查看Nacos的日志(如nacos-cluster.log),确认是否有异常信息,确保该节点没有健康问题。

  3. 清理并重新加载数据:如果网络无碍且目标节点健康,可能需要考虑手动干预以强制重启节点加载正确的数据。可以尝试以下操作:

    • 停止当前重启的Nacos服务。
    • 清理该节点的临时数据目录(具体路径依据您的Nacos配置确定,一般在data目录下)。
    • 重新启动Nacos服务,此时它会尝试重新从集群中的其他健康节点同步数据。
  4. 检查集群配置一致性:根据知识中的提示,确保集群中所有节点的cluster.confapplication.properties配置文件保持一致,特别关注集群配置项NACOS_SERVERS是否包含了所有节点地址。

  5. 监控日志与健康检查:在执行上述步骤后,持续监控Nacos的日志输出,特别是关注是否能成功加载快照数据和数据同步过程。同时,通过Nacos控制台检查集群状态和数据一致性。

解释:

以上步骤旨在解决网络通信问题、确保节点健康、以及强制节点重新同步数据以达到数据一致性。清理数据目录是为了避免使用了旧的或损坏的本地数据。检查和维持配置一致性是分布式系统正常运作的基础,以避免因配置不同步导致的集群问题。通过这些步骤,应能有效解决重启节点后数据不一致的问题。

---------------

参考链接 :

  • 专家经验:日志报错ERROR [DISTRO-INIT] load snapshot Nacos:Naming:v2

    from 10.111.107.10:8878 failed. com.alibaba.nacos.core.distribu

  • 专家经验:Nacos 扩缩容问题

  • 专家经验:NACOS 配置中心和注册中心是分两个集群部署还是放在一个集群中

---------------

答疑服务说明:

本内容经由技术专家审阅的用户问答的镜像生成,我们提供了专家智能答疑服务,使用方法: 用法1: 在页面的右下的浮窗”专家答疑“。 用法2: 点击专家答疑页(针对部分网站不支持插件嵌入的情况)

另:

有其他开源产品的使用问题?点击访问阿里AI专家答疑服务

反馈

如问答有错漏,欢迎点:差评给我们反馈。