当前位置:   article > 正文

nacos 不进行健康检查_健康检查禁用 nacos

健康检查禁用 nacos

【需求背景】

nacos 作为一个中间件,微服务不应该强依赖于中间件。

作为一个服务注册中心,为了保证高可用应该使用 AP 模式(即数据可以短暂不一致,以保证其高可用),而 nacos 本身也支持 AP 模式。

但是我们现有的使用方式其实是强依赖于 nacos 的健康状况了。原因是健康探测接口:/api/status/ready 会去探测 nacos server 的健康状态,如果不健康,则把 pod 下线。

【技术探讨】

可以通过配置启动参数,屏蔽 spring actuator 的探测:

  1. -Dmanagement.health.nacos-discovery.enabled=false
  2. -Dmanagement.health.nacos-config.enabled=false

当 nacos server 不可用时,nacos client 自带的缓存保存的还是旧服务列表,依然可以保证服务正常调用。

【测试方法】

1)我把我本地的服务启动

2)然后修改本地的 nacos 地址,使得微服务无法连上 nacos server,报错信息如下:

  1. 2023-09-15 17:22:38.073 [TID: N/A] [meiji-proxy-mall,,,] [com.alibaba.nacos.client.Worker.longPolling.fixed-test-nacos.ifengqun.com_80-test] [com.alibaba.nacos.client.config.impl.ClientWorkerientWorker] 398 ERROR [checkUpdateConfigStr] -->[fixed-test-nacos.ifengqun.com_80-test] [check-update] get changed dataId exception java.net.ConnectException: [NACOS HTTP-POST] The maximum number of tolerable server reconnection errors has been reached
  2. at com.alibaba.nacos.client.config.http.ServerHttpAgent.httpPost(ServerHttpAgent.java:170) ~[nacos-client-1.2.1.jar:?]
  3. at com.alibaba.nacos.client.config.http.MetricsHttpAgent.httpPost(MetricsHttpAgent.java:64) ~[nacos-client-1.2.1.jar:?]
  4. at com.alibaba.nacos.client.config.impl.ClientWorker.checkUpdateConfigStr(ClientWorker.java:386) [nacos-client-1.2.1.jar:?]
  5. at com.alibaba.nacos.client.config.impl.ClientWorker.checkUpdateDataIds(ClientWorker.java:354) [nacos-client-1.2.1.jar:?]
  6. at com.alibaba.nacos.client.config.impl.ClientWorker$LongPollingRunnable.run(ClientWorker.java:521) [nacos-client-1.2.1.jar:?]
  7. at com.alibaba.ttl.TtlRunnable.run(TtlRunnable.java:59) [?:?]
  8. at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) [?:1.8.0_241]
  9. at java.util.concurrent.FutureTask.run$$$capture(FutureTask.java:266) [?:1.8.0_241]
  10. at java.util.concurrent.FutureTask.run(FutureTask.java) [?:1.8.0_241]
  11. at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:180) [?:1.8.0_241]
  12. at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:293) [?:1.8.0_241]
  13. at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) [?:1.8.0_241]
  14. at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) [?:1.8.0_241]
  15. at java.lang.Thread.run(Thread.java:748) [?:1.8.0_241]

3)但是本地调用依然没有问题

然后,健康探测也是 UP 的,不会引起 k8s 探测,引起下线

【故障演练】

测试环境部署了大部分服务后,找个晚上没人发布的情况下,下线测试环境的 nacos server 看一下是否能正常访问。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/神奇cpp/article/detail/856500
推荐阅读
相关标签
  

闽ICP备14008679号