Nacos 集群模式下节点状态显示 DOWN 导致服务发现异常如何处理?

文章导读
遇到 Nacos 集群节点显示 DOWN 时,优先检查节点间网络连通性和集群配置文件,确认无误后尝试重启异常节点,通常可恢复服务发现功能。
📋 目录
  1. 命令速用版
  2. 为什么会这样
  3. 分步处理
  4. 怎么验证是否生效
  5. 常见坑
  6. 参考来源
A A

遇到 Nacos 集群节点显示 DOWN 时,优先检查节点间网络连通性和集群配置文件,确认无误后尝试重启异常节点,通常可恢复服务发现功能。

先说结论:节点状态异常多由网络分区或配置不一致引起,先恢复通信再排查数据一致性。

  • 先确认:检查服务器之间 8848、9848、9849 端口是否互通
  • 先处理:修正 cluster.conf 配置并清理异常节点日志
  • 再验证:通过控制台或 API 确认集群状态恢复为 UP

命令速用版

以下命令用于快速检查网络连通性和查看核心日志,需在 Linux 服务器终端执行:

# 检查节点间端口连通性 (目标 IP 替换为集群其他节点 IP,推荐 nc 命令)
nc -zv <target_ip> 8848
nc -zv <target_ip> 9848
nc -zv <target_ip> 9849

# 若未安装 nc,可使用 curl 探测 HTTP 端口
curl -o /dev/null -s -w '%{http_code}' http://<target_ip>:8848/nacos

# 查看 Nacos 核心日志
tail -f logs/nacos.log
tail -f logs/raft.log

# 查看集群状态 API (需在本地或可信网络执行)
curl -X GET 'http://127.0.0.1:8848/nacos/v1/ns/operator/servers'

为什么会这样

Nacos 集群依赖 Raft 协议维持一致性,节点间需要频繁心跳通信。当某个节点显示 DOWN,通常意味着它无法与集群中多数节点建立连接。常见原因包括防火墙拦截了新增的 RPC 端口、集群配置文件中的 IP 列表不一致,或者服务器系统时间偏差过大导致心跳校验失败。在 Nacos 2.0 版本后,通信机制发生了变化,增加了 gRPC 端口,如果只开放了 8848 而忽略了 9848 和 9849,节点间就无法正常同步状态。

分步处理

1. 核对集群配置文件
进入 Nacos 安装目录的 conf 文件夹,打开 cluster.conf。确保文件中列出的 IP 地址是所有存活节点的实际 IP,且所有节点的这份文件内容完全一致。不要使用 localhost 或 127.0.0.1,必须使用局域网可访问的 IP。

Nacos 集群模式下节点状态显示 DOWN 导致服务发现异常如何处理?

配置示例:

192.168.1.101:8848
192.168.1.102:8848
192.168.1.103:8848

2. 检查网络端口
使用 nc 或 curl 命令测试节点间通信。Nacos 2.x 版本除了 8848 外,还必须打通 9848(客户端 RPC)和 9849(服务端 RPC)。如果防火墙开启,需确保这些端口在节点间是放行的。

3. 检查系统时间
集群所有服务器的时间偏差建议控制在秒级以内。时间不同步会导致 Raft 日志序号混乱,进而引发节点被剔除。

4. 重启异常节点
修正配置和网络后,重启状态为 DOWN 的节点。如果问题依旧,可尝试清理该节点 logs 和 data 目录下的持久化数据。

Nacos 集群模式下节点状态显示 DOWN 导致服务发现异常如何处理?

注意:清理 data 目录前务必备份数据,且确保集群中其他节点数据完整后再操作,防止脑裂导致数据永久丢失。

怎么验证是否生效

登录 Nacos 控制台,在“集群管理”或“节点列表”页面查看状态是否变为 UP。也可以通过命令行调用 API,返回的 JSON 中 healthy 字段应为 true。

API 返回示例:

{
  "servers": [
    {
      "address": "192.168.1.101:8848",
      "state": "UP",
      "healthy": true
    }
  ]
}

同时观察业务服务是否能正常注册和发现,日志中不再出现连接拒绝或超时的报错。

常见坑

  • 版本混用:集群内所有节点必须保持版本一致,1.x 和 2.x 的通信协议不兼容。
  • 端口遗漏:升级 2.x 后只配置了 8848 负载均衡,忽略了 9848/9849 的内部通信需求。
  • 数据残留:重启节点时未清理旧的 raft 数据,导致重新加入集群时 ID 冲突或数据不一致。

参考来源

  • Nacos 官方文档 - 集群部署说明 (https://nacos.io/zh-cn/docs/cluster-mode-quick-start.html)
  • Nacos GitHub Wiki - Configuration (https://github.com/alibaba/nacos/wiki)