目录
需求分析
示意图
假设最初三台服务器正常运行,并且三台服务器搭建了zookeeper集群
当服务器二挂掉后的情况
过程详解
第一部分:启动zookeeper集群,建立永久节点severs,servers下的子节点用来记录节点上下线的情况,是可变的
第二部分:服务器启动后会去zookeeper集群注册信息(create操作),当服务器下线时,临时节点被删除
第三部分:客户端监听zookeeper集群servers节点的子节点信息(get操作),一经变化,立刻修改连接的服务器
具体实现
首先在zookeeper集群上建立slaves
节点
create /servers "servers"
在idea新建maven项目,名为com.heria.onoroff
分布式服务器
在项目下新建javaclass,名为DistributeServer
第一步:获取zookeeper连接
server.getConnect()
private void getConnect() throws IOException {
String connectString ="master:2181,slave1:2181:slave2:2181";
int sessionTimeout =2000;
zk = new ZooKeeper(connectString, sessionTimeout, new Watcher() {
@Override
public void process(WatchedEvent event) {
}
});
}
第二步:服务器注册入zookeeper
server.regist(args[0])
private void regist(String hostname) throws InterruptedException, KeeperException {
String create = zk.create("/servers/"+hostname, hostname.getBytes(StandardCharsets.UTF_8), ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.EPHEMERAL_SEQUENTIAL);
System