如何开启 Nacos 服务注册发现的健康检查功能

文章导读
Nacos 的健康检查机制默认是运行的,并不存在一个显式的“开启开关”。标题中的“开启”实际是指确保实例类型与心跳配置正确。核心区别在于你注册的是临时实例还是持久实例,大多数 Spring Cloud 场景下只需确保客户端心跳配置正常即可。
📋 目录
  1. A 版本兼容性说明
  2. B 临时实例配置(默认推荐)
  3. C 持久实例配置与控制台设置
  4. D 验证方法
  5. E 常见坑与排查
  6. F 参考来源
A A

Nacos 的健康检查机制默认是运行的,并不存在一个显式的“开启开关”。标题中的“开启”实际是指确保实例类型与心跳配置正确。核心区别在于你注册的是临时实例还是持久实例,大多数 Spring Cloud 场景下只需确保客户端心跳配置正常即可。

先说结论:健康检查机制内置于 Nacos 服务端,客户端无需额外启用开关,只需按实例类型正确配置心跳或接受服务端探测。

  • 适合:基于 Spring Cloud Alibaba 或原生 Nacos SDK 的常规微服务架构
  • 先看:确认服务注册时使用的是临时实例(ephemeral)还是持久实例(persistent)
  • 建议:优先使用临时实例配合客户端心跳,运维成本更低
  • 注意:配置项键名可能随 Spring Cloud Alibaba 版本变化,请以实际生效为准

版本兼容性说明

不同版本的 Spring Cloud Alibaba 在配置键名和心跳机制上存在差异,配置前请确认依赖版本:

  • Spring Cloud Alibaba 2021.0.1.0+ / Nacos 2.x:默认使用 gRPC 长连接心跳,配置项更稳定。
  • Spring Cloud Alibaba 2.2.x / Nacos 1.x:使用 HTTP 心跳,部分配置项键名可能不同。
  • 注意:若配置未生效,请检查是否使用了正确的配置前缀(如 spring.cloud.nacos.discovery)。

临时实例配置(默认推荐)

临时实例由客户端维护存活状态,通过心跳机制上报。默认情况下,Spring Cloud 应用注册的都是临时实例,无需额外设置 ephemeral 参数。只需确认心跳参数未被意外关闭或超时设置过短。

spring:
  cloud:
    nacos:
      discovery:
        heartbeat-interval: 5000  # 心跳间隔,单位毫秒(适用于 Spring Cloud Alibaba 2021.0.1.0+)
        heartbeat-timeout: 15000  # 心跳超时时间,建议为间隔的 3 倍以上
        ip-delete-timeout: 30000  # IP 删除超时时间
        ephemeral: true           # 默认即为 true,可省略

持久实例配置与控制台设置

若业务场景要求使用持久实例(如数据库代理等),需显式配置 ephemeral=false,并由服务端主动探测。此时客户端心跳不再起作用,必须要在 Nacos 控制台配置健康检查规则。

1. 客户端配置示例:

如何开启 Nacos 服务注册发现的健康检查功能
spring:
  cloud:
    nacos:
      discovery:
        ephemeral: false          # 关键配置:设置为持久实例
        # 持久实例下,客户端心跳配置通常不生效,依赖服务端探测

2. Nacos 控制台配置步骤:

  1. 登录 Nacos 控制台,进入“服务管理”->“服务列表”。
  2. 点击目标服务名称,进入服务详情。
  3. 点击“编辑服务”按钮。
  4. 在“健康检查”选项中,选择检查类型(TCP 或 HTTP)。
  5. 若选择 HTTP,需填写检查路径(如 /actuator/health);若选择 TCP,填写端口。
  6. 点击“确定”保存,服务端将开始主动探测。

验证方法

配置完成后,可通过以下方式验证健康检查是否生效:

  1. 控制台观察:进入“服务列表”,查看实例状态。健康实例显示为“健康”,异常实例会变为“不健康”或被移除(临时实例)。
  2. 客户端日志:观察应用日志,确认是否有心跳发送相关的 INFO 日志(临时实例)。
  3. 网络测试:对于 HTTP 检查,可在服务端所在机器使用 curl 命令测试检查路径是否可达。

常见坑与排查

1. 时间单位混淆:配置文件中通常为毫秒,不要误填为秒。心跳超时时间应大于网络往返最大延迟的 3 倍以上,避免误判。

2. 版本差异风险:Nacos 2.x 版本默认使用 gRPC 长连接心跳,与 1.x HTTP 心跳机制不同,配置项可能有所差异。若升级后心跳失效,请检查 SDK 版本兼容性。

如何开启 Nacos 服务注册发现的健康检查功能

3. 持久实例配置遗漏:若使用持久实例却未配置服务端检查规则,实例将一直处于不健康状态,导致流量无法打入。

4. 网络波动误剔除:修改心跳超时时间后,若设置过短可能导致网络波动时服务被误剔除,建议先在小环境验证。

5. 配置键名不生效:不同版本配置项键名可能不同,若配置无效,请查阅对应版本的 Spring Cloud Alibaba 参考指南。

参考来源

Nacos 官方文档 - 服务注册发现 (nacos.io)

Spring Cloud Alibaba 参考指南 - Nacos Discovery (spring-cloud-alibaba.github.io)