[alibaba/nacos]nacos2.2.2 集群节点动态感知

2024-01-06 408 views
8

Functional consultation:

  1. 集群部署寻址方式默认采用文件寻址方式,本地源码启动三个server服务构成集群,其中一个server服务关闭后,其他两个server节点是如何实现动态感知节点变化,使之节点状态从SUSPICIOUS-》DOWN,对应节点的GRPC client又是在何时关闭的?

nacos版本:2.2.2 操作系统:win10

回答

4

Naocs都会向其他每个节点定时发送心跳,当发送心跳发送失败时,将这个节点的状态置为SUSPICIOUS,然后进行重试,如果超过默认3次都失败,那么将会将状态置为DOWN,然后再通知Grpc client将连接关闭。

9

发送心跳失败,超过重试次数节点状态设置为DOWN,会发送一个【MembersChangeEvent】事件,对应订阅者【ClusterRpcClientProxy】的onevent 会使用最新的节点建立grpc连接并移除老的连接, 移除老的连接这里有个疑问: image

6

iterator.remove就是移除

5

我表达错误了,是对这个条件成立表示疑问,前面将节点状态设置down,但节点Member以及节点对应的grpc client对象都还在对应散列表跟集合中存在,按道理if条件不会成立,也就不会进入if代码块,移除老的连接。 想知道down状态的节点是什么时候被移除出去?

1

目前看的确不会把连接进行移除,对于用户来说启动了三个节点的集群,此时一个节点意外宕机,集群只会认为这个节点不健康,并不会认为该节点已经移除,所以不需要关闭连接,并且一直尝试对改节点进行重连,当他再次上线之后又能恢复3个节点的健康集群。

除非你主观上的想移除节点,修改了cluster.conf,使ServerListManager获取到的集群节点发生变化,这样才会进入这个if分支,才会移除对应的RpcClient(包含connection)。

7

是设计如此吗 @KomachiSion

3

如果只是健康状态变更, 不会移除连接,因为连接里面有重连机制,这两部分时接耦的。

当运维时(扩缩容)时,这时候时member少了,那么这个链接就应该要彻底移除。

基本上和上述说明的一致。