Nacos 实例类型 + 健康检查 完整总结
一、实例类型(核心分类)
表格
| 类型 | 健康检查方式 | 数据存储 | 典型比喻 | 适用场景 |
|---|---|---|---|---|
| 临时实例(默认) | 客户端主动心跳上报 | 仅存内存 | 临时工,自己打卡,不上报就被清 | 动态微服务业务实例 |
| 非临时实例(持久实例) | 服务端反向探测(主动 ping) | 持久化到数据库 | 正式工,老板主动检查,失联也不删 | 固定中间件(DB、MQ 等) |
二、健康检查机制详解
1. 临时实例:客户端主动心跳上报
- 服务实例启动后,主动向 Nacos 发送心跳包,默认 5 秒一次
- Nacos 15 秒内没收到心跳 → 标记为 "不健康"
- 30 秒仍无心跳 → 自动从服务列表剔除(无需手动删除)
- 服务正常关闭会主动注销,避免等待超时
- 特点:高效、轻量,适合动态微服务,异常下线能快速被感知
2. 非临时实例:服务端反向探测
- 由 Nacos 主动发起探测(TCP 端口探测 / HTTP 健康接口探测)
- 即使实例失联,也不会自动从服务列表删除,需要手动处理
- 数据持久化在数据库中,重启 Nacos 实例依然存在
- 特点:适合固定节点,稳定性优先,不随服务上下线自动消失
三、实例类型的关键限制
-
类型不可直接修改
- 不允许临时实例直接改为非临时实例,也不允许非临时实例改为临时实例
- 因为 Nacos 会记录每个实例的 IP、端口和类型,这些信息一旦写入,不能动态切换
-
如需修改类型,必须清理数据操作步骤:
- 停止 Nacos 服务
- 删除 Nacos 数据目录下的
data/protocol/raft文件夹 - 重启 Nacos 服务
- 重启你的服务实例,重新注册即可生效
四、和负载均衡的联动关系
- 第一步:健康检查过滤
- 临时实例:心跳超时自动剔除,负载均衡直接跳过
- 非临时实例:服务端探测失败仅标记不健康,需手动处理
- 第二步:集群与权重策略
- 优先选择同集群内的健康实例
- 同集群内按权重分配流量(权重 0 不接收请求)
- 第三步:跨集群兜底
- 同集群内无可用实例时,才会降级访问其他集群实例
五、一句话核心记忆
- 临时实例:心跳保活,超时自动清,微服务用
- 非临时实例:主动探测,不自动删,中间件用
- 实例类型一旦注册,不能直接改,必须删数据重注册