zk可用性测试

1.首先起3个zk:

 

 

2.观察主从情况:

 

3.连接集群观察心跳:

 

4.kill掉master:

 

可以看到客户端在重试几次后链接到了新的master,且seesionid没有改变。

5.观察现在的主从:

 

 

6.再次kill掉leader试试:

 

完全崩掉了。

7.继续观察zk集群的情况:

 

zk1的进程还在但是 status显式not running

观察下zk的日志:

 

用zkCli试试吧:

 

也不行。

8.再启一台回来?

 

正常了,zkcli也ok了,看下集群的情况:

 

9.如果kill掉follower呢🤔?

 

上面客户端的异常是因为之前链接的是zk1,我们切换到zk2试试:

 

也不行。

10.如果我们不用集群模式呢?😏

修改配置文件重启

 

真实😉。

11.重新用集群模式启动回三个实例,这次我们kill掉follower。

java zk客户端链接的是leader(zk2)在我们kill掉follower(zk3)之后,没有发生任何问题。

12.重启zk3,链接到zk3,在kill掉zk3试试:

 

 

好吧😅

总结:zk机群模式模式下2n+1台必须保证n+1台可用。只指定一个zk地址的客户端,在指定zk挂掉后也会链接不上,但是异常和集群不用时不一样。不满足n+1时,应该是zk主动断开连接了:

Unable to read additional data from server sessionid 0x273e67799060000, likely server has closed socket, closing socket connection and attempting reconnect
Receive watched event:WatchedEvent state:Disconnected type:None path:null1

而指定zk挂掉时是这样:

 

posted @ 2020-08-13 14:38  l2c  阅读(604)  评论(0)    收藏  举报