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挂掉时是这样: