Go语言:go-zookeeper客户端支持在zk集群节点断开时重新连接新节点,但不支持Ephemeral Node (临时节点)过期重建

从线上系统的一次故障日志来看,"github.com/samuel/go-zookeeper/zk"这个客户端在面向zk集群时,如果请求原有zk节点i/o超时后,会自动去尝试连接其它zk节点直到重新建立连接。但是如果用来做服务的注册与发现的话,原来创建的Ephemeral Node (临时节点)过期后无法自动重建,需要由应用程序来自行重建。

下面的日志表明客户端在与192.168.6.45:2181的连接i/o超时后,尝试了与192.168.6.106:2181建立连接但session已超时服务端认证失败(由于会话已经过期,原来建立的临时节点也被自动删除了),最后尝试与192.168.6.107:2181建立连接并连接成功。

2021-05-06 15:05:07 [INFO] [/server.go:36] zk: recv loop terminated: err=failed to read from connection: read tcp 192.168.6.32:46601->192.168.6.45:2181: i/o timeout
2021-05-06 15:05:07 [INFO] [/server.go:36] zk: send loop terminated: err=write tcp 192.168.6.32:46601->192.168.6.45:2181: write: broken pipe
2021-05-06 15:05:07 [INFO] [/server.go:36] zk: Connected to 192.168.6.106:2181
2021-05-06 15:05:07 [INFO] [/server.go:36] zk: authentication failed: zk: session has been expired by the server
2021-05-06 15:05:07 [INFO] [/server.go:36] zk: Connected to 192.168.6.107:2181

猜你喜欢

转载自blog.csdn.net/pengpengzhou/article/details/118219471
今日推荐