disconf的Zookeeper异常考虑
##disconf-web的ZK异常处理##
disconf-web可以完全保证在任何情况下,与ZK集群的自动连接。
下面按情况进行分析:
###服务启动前,zk连接不上:
- 开始连接不上:
- apache ZK client自身会自动(永久)去连接ZK server. 但是一直连接不上。
- 因此,web上所有操作均会失败,抛大异常,请求失败,只会重试一次,不会重试多次
- 后面突然连接上了:
- apache ZK client 收到server SyncConnected消息。
- 这时所有操作均成功
- 后面又突然连接不上了:
- apache ZK client 收到server Disconnected 消息。
- 这时,apache ZK client自身会自动(永久)去连接ZK server. 但是一直连接不上。
- 这时 web 上 所有操作均会失败,抛大异常,请求失败,只会重试一次,不会重试多次
- 后面突然连接上了:
- apache ZK client 收到server Expired 消息。
- 这时表示会话丢失啦,apache ZK client 自动断开与Server的连接,表示此时让你来处理,因为它不知道应该如何处理。
- 这时,disconf-core会reconnect zkserver,重新建立会话。
- 成功后,apache ZK client 收到server SyncConnected 消息。表示连接成功
- 后面又突然连接不上了:
- apache ZK client 收到server Disconnected 消息。
- 这时,apache ZK client自身会自动(永久)去连接ZK server. 但是一直连接不上。
- 这时 web 上 所有操作均会失败,抛大异常,请求失败,只会重试一次,不会重试多次
###服务启动前,zk连接上了:
- 开始连接:
- apache ZK client 收到server SyncConnected消息。
- 这时所有操作均成功功
- 后面又突然连接不上了…… (与上面分析一样,此不再赘述)
###注意
ZK一般需要以集群的形式提供出来。假设有N台ZK,
- 只要至少有一台ZK存活,disconf-web就可以正常工作。而且永远不会收到 server Expired 的消息。
- 只要有一台ZK死亡,disconf-web就会收到 Disconnected 消息。但是系统仍可以继续工作。
- 如果所有zk都死亡,那么disconf-web会收到 Disconnected 消息。只要有一台存活,disconf-web就会收到
##disconf-client的ZK异常处理##
disconf-client可以完全保证: 如果在启动程序时保证ZK集群是可用的,那么,就可以保证在任何情况下,与ZK集群的自动连接。
下面按情况进行分析:
###程序启动前,zk连接不上:
这时disconf-client无法在ZK上注册信息。这是必须禁止发生的情况。也是disconf-client无法支持的情况。
一旦发生这种情况,请先恢复ZK集群,再启动你的程序。
###程序启动前,zk连接上了:
如果在程序启动过程中,ZK是正常的,那么,disconf-client可以保证与ZK连接的自动性。
- 只要集群有一台还存活着,你的程序配置还是受disconf托管。
- 如果集群所有机器均死亡,这时你的程序将游离于disconf之外。只要集群中有任何一台ZK机器重新开启,那么 你的程序将重新 由disconf进行托管。
###注意
disconf-client必须保证在程序在启动时,ZK集群的可用性。