用zookeeper体验监听服务器是否还活着

来源:互联网 发布:php 微信开发 编辑:程序博客网 时间:2024/06/06 01:01

丛网络上及视频里学习的代码稍微改编了一下, 配合自己的情况(三台zookeeper 虚拟机  HSlave1 HSlave2 HSlave3)  ,模拟server挂掉后客户端得到的通知情况. 

步骤

1. 启动三个Server的线程分别代表三台Server, 每个线程对应一台Server

2. 启动客户端,可以启动许多个,也可以只启动一个

3. 将一台Server 断线(在控制台用root账户执行shutdown now ),然后重新启动但不注册

4. 将另外2台Server依序断线


Server程序如下:


Client端的代码


运行结果如下

[INFO ][2017/08/09 19:48:53915][org.apache.zookeeper.ClientCnxn$SendThread.primeConnection(ClientCnxn.java:852)]
Socket connection established to HSlave1/192.168.100.23:2181, initiating session
[INFO ][2017/08/09 19:48:53931][org.apache.zookeeper.ClientCnxn$SendThread.onConnected(ClientCnxn.java:1235)]
Session establishment complete on server HSlave1/192.168.100.23:2181, sessionid = 0x15dc6cda23f0004, negotiated timeout = 30000


#三台服务器(HSlave1 HSlave2 HSlave3)上线, 每台服务器由一个程序建立节点


[HSlave3, HSlave2, HSlave1]


#客户端上线


client is working...
[HSlave3, HSlave2, HSlave1]


# 将HSlave2关机,客户端更新服务器列表


[HSlave3, HSlave1]


[INFO ][2017/08/09 19:53:09639][org.apache.zookeeper.ClientCnxn$SendThread.run(ClientCnxn.java:1098)]
Unable to read additional data from server sessionid 0x15dc6cda23f0004, likely server has closed socket, closing socket connection and attempting reconnect
[INFO ][2017/08/09 19:53:09898][org.apache.zookeeper.ClientCnxn$SendThread.logStartConnect(ClientCnxn.java:975)]
Opening socket connection to server HSlave3/192.168.100.25:2181. Will not attempt to authenticate using SASL (unknown error)
[INFO ][2017/08/09 19:53:09899][org.apache.zookeeper.ClientCnxn$SendThread.primeConnection(ClientCnxn.java:852)]
Socket connection established to HSlave3/192.168.100.25:2181, initiating session
[INFO ][2017/08/09 19:53:09903][org.apache.zookeeper.ClientCnxn$SendThread.run(ClientCnxn.java:1098)]
Unable to read additional data from server sessionid 0x15dc6cda23f0004, likely server has closed socket, closing socket connection and attempting reconnect
org.apache.zookeeper.KeeperException$ConnectionLossException: KeeperErrorCode = ConnectionLoss for /servers
    at org.apache.zookeeper.KeeperException.create(KeeperException.java:99)
    at org.apache.zookeeper.KeeperException.create(KeeperException.java:51)
    at org.apache.zookeeper.ZooKeeper.getChildren(ZooKeeper.java:1472)
    at org.apache.zookeeper.ZooKeeper.getChildren(ZooKeeper.java:1500)
    at chuangzhi.DistributedClient.getServerList(DistributedClient.java:57)
    at chuangzhi.DistributedClient$1.process(DistributedClient.java:32)
    at org.apache.zookeeper.ClientCnxn$EventThread.processEvent(ClientCnxn.java:522)
    at org.apache.zookeeper.ClientCnxn$EventThread.run(ClientCnxn.java:498)
[INFO ][2017/08/09 19:53:10583][org.apache.zookeeper.ClientCnxn$SendThread.logStartConnect(ClientCnxn.java:975)]
Opening socket connection to server HSlave2/192.168.100.24:2181. Will not attempt to authenticate using SASL (unknown error)
[INFO ][2017/08/09 19:53:10585]


# 将HSlave2重新开机并开启zkService


[org.apache.zookeeper.ClientCnxn$SendThread.primeConnection(ClientCnxn.java:852)]
Socket connection established to HSlave2/192.168.100.24:2181, initiating session
[INFO ][2017/08/09 19:53:10586][org.apache.zookeeper.ClientCnxn$SendThread.run(ClientCnxn.java:1098)]
Unable to read additional data from server sessionid 0x15dc6cda23f0004, likely server has closed socket, closing socket connection and attempting reconnect
[INFO ][2017/08/09 19:53:11841][org.apache.zookeeper.ClientCnxn$SendThread.logStartConnect(ClientCnxn.java:975)]
Opening socket connection to server HSlave1/192.168.100.23:2181. Will not attempt to authenticate using SASL (unknown error)
[INFO ][2017/08/09 19:53:21842][org.apache.zookeeper.ClientCnxn$SendThread.run(ClientCnxn.java:1096)]
Client session timed out, have not heard from server in 11155ms for sessionid 0x15dc6cda23f0004, closing socket connection and attempting reconnect
[INFO ][2017/08/09 19:53:22629][org.apache.zookeeper.ClientCnxn$SendThread.logStartConnect(ClientCnxn.java:975)]
Opening socket connection to server HSlave3/192.168.100.25:2181. Will not attempt to authenticate using SASL (unknown error)
[INFO ][2017/08/09 19:53:22630][org.apache.zookeeper.ClientCnxn$SendThread.primeConnection(ClientCnxn.java:852)]
Socket connection established to HSlave3/192.168.100.25:2181, initiating session
[INFO ][2017/08/09 19:53:22632][org.apache.zookeeper.ClientCnxn$SendThread.onConnected(ClientCnxn.java:1235)]




Session establishment complete on server HSlave3/192.168.100.25:2181, sessionid = 0x15dc6cda23f0004, negotiated timeout = 30000


# HSlave2已经重新开机并开启zkService,但没有运行程序建立节点, 服务器列表没有改变
[HSlave3, HSlave1]


# 将HSlave1关机,客户端更新服务器列表
[HSlave3]


# 将最后一台HSlave3也关机,客户端凌乱了(HSlave2维持开机并连接zkService)


[INFO ][2017/08/09 19:55:57207][org.apache.zookeeper.ClientCnxn$SendThread.run(ClientCnxn.java:1098)]
Unable to read additional data from server sessionid 0x15dc6cda23f0004, likely server has closed socket, closing socket connection and attempting reconnect
[INFO ][2017/08/09 19:55:5850 ][org.apache.zookeeper.ClientCnxn$SendThread.logStartConnect(ClientCnxn.java:975)]
Opening socket connection to server HSlave2/192.168.100.24:2181. Will not attempt to authenticate using SASL (unknown error)
[INFO ][2017/08/09 19:55:5851 ][org.apache.zookeeper.ClientCnxn$SendThread.primeConnection(ClientCnxn.java:852)]
Socket connection established to HSlave2/192.168.100.24:2181, initiating session
[INFO ][2017/08/09 19:55:5852 ][org.apache.zookeeper.ClientCnxn$SendThread.run(ClientCnxn.java:1098)]
Unable to read additional data from server sessionid 0x15dc6cda23f0004, likely server has closed socket, closing socket connection and attempting reconnect
org.apache.zookeeper.KeeperException$ConnectionLossException: KeeperErrorCode = ConnectionLoss for /servers
    at org.apache.zookeeper.KeeperException.create(KeeperException.java:99)
    at org.apache.zookeeper.KeeperException.create(KeeperException.java:51)
    at org.apache.zookeeper.ZooKeeper.getChildren(ZooKeeper.java:1472)
    at org.apache.zookeeper.ZooKeeper.getChildren(ZooKeeper.java:1500)
    at chuangzhi.DistributedClient.getServerList(DistributedClient.java:57)
    at chuangzhi.DistributedClient$1.process(DistributedClient.java:32)
    at org.apache.zookeeper.ClientCnxn$EventThread.processEvent(ClientCnxn.java:522)
    at org.apache.zookeeper.ClientCnxn$EventThread.run(ClientCnxn.java:498)


以下省略