zookeeper如何实现服务节点,集群的管理
2019-06-04 21:20
239 查看
一.zookeeper如何实现服务节点,集群的管理
Zookeeper使用实例——服务节点管理
分布式处理中,总会存在多个服务节点同时工作,并且节点数量会随着网络规模的变化而动态增减,服务节点也有可能发生宕机与恢复。面对着动态增减的服务节点,我们如何保证客户请求被服务器正确处理呢。我们可以通过zookeeper临时节点创建与自动删除来掌握服务节点的动态增减。
思路为:
- zookeeper 的apach jar包依赖支持 在zookeeper创建临时节点,当session断开时,自动删除临时节点
- zookeeper 的apach jar包依赖支持 有监听器模式,能够监听到 临时节点的增加与删除
1、 服务器启动后 在zookeeper创建 (与session同步的 )临时目录
package com.coshaho.learn.zookeeper; import org.apache.zookeeper.CreateMode; import org.apache.zookeeper.WatchedEvent; import org.apache.zookeeper.Watcher; import org.apache.zookeeper.ZooDefs.Ids; import org.apache.zookeeper.ZooKeeper; /** * * 服务节点启动后注册到zookeeper * @author coshaho * */ public class AppServer extends Thread { private String clusterNode = "Locks"; private String serverNode = "mylock"; private String serverName; private long sleepTime; public void run() { try { connectZookeeper(serverName); } catch (Exception e) { e.printStackTrace(); } } public void connectZookeeper(String address) throws Exception { ZooKeeper zk = new ZooKeeper("192.168.1.104:12181", 5000, new Watcher() { public void process(WatchedEvent event) {} }); // 关键方法,创建包含自增长id名称的目录,这个方法支持了分布式锁的实现 // 四个参数: // 1、目录名称 2、目录文本信息 // 3、文件夹权限,Ids.OPEN_ACL_UNSAFE表示所有权限 // 4、目录类型,CreateMode.EPHEMERAL_SEQUENTIAL表示创建临时目录,session断开连接则目录自动删除 String createdPath = zk.create( "/" + clusterNode + "/" + serverNode, address.getBytes("utf-8"), Ids.OPEN_ACL_UNSAFE, CreateMode.EPHEMERAL_SEQUENTIAL); System.out.println("create: " + createdPath); Thread.sleep(sleepTime); } public AppServer(String serverName, long sleepTime) { this.serverName = serverName; this.sleepTime = sleepTime; } }
2、 节点管理服务 监听zookeeper 临时目录节点 创建,删除事件
package com.coshaho.learn.zookeeper; import java.util.ArrayList; import java.util.List; import org.apache.zookeeper.WatchedEvent; import org.apache.zookeeper.Watcher; import org.apache.zookeeper.Watcher.Event.EventType; import org.apache.zookeeper.ZooKeeper; /** * * 客户端注册监听server节点变化 * @author coshaho * */ public class AppMaster { private String clusterNode = "Locks"; private ZooKeeper zk; private volatile List<String> serverList; public void connectZookeeper() throws Exception { // 注册全局默认watcher zk = new ZooKeeper("192.168.1.104:12181", 5000, new Watcher() { public void process(WatchedEvent event) { if (event.getType() == EventType.NodeChildrenChanged && ("/" + clusterNode).equals(event.getPath())) { try { updateServerList(); } catch (Exception e) { e.printStackTrace(); } } } }); updateServerList(); } private void updateServerList() throws Exception { List<String> newServerList = new ArrayList<String>(); // watcher注册后,只能监听事件一次,参数true表示继续使用默认watcher监听事件 List<String> subList = zk.getChildren("/" + clusterNode, true); for (String subNode : subList) { // 获取节点数据 byte[] data = zk.getData("/" + clusterNode + "/" + subNode, false, null); newServerList.add(new String(data, "utf-8")); } serverList = newServerList; System.out.println("server list updated: " + serverList); } public static void main(String[] args) throws Exception { AppMaster ac = new AppMaster(); ac.connectZookeeper(); Thread.sleep(Long.MAX_VALUE); } }
3、 启动两个服务器 进行测试
package com.coshaho.learn.zookeeper; public class Server1 { public static void main(String[] args) throws Exception { AppServer server1 = new AppServer("Server1", 5000); server1.start(); } } package com.coshaho.learn.zookeeper; public class Server2 { public static void main(String[] args) throws Exception { AppServer server1 = new AppServer("Server2", 10000); server1.start(); } }
4、 运行结果
log4j:WARN No appenders could be found for logger (org.apache.zookeeper.ZooKeeper). log4j:WARN Please initialize the log4j system properly. log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info. server list updated: [] server list updated: [Server1] server list updated: [Server2, Server1] server list updated: [Server2] server list updated: []
相关文章推荐
- 2 weekend110的zookeeper的原理、特性、数据模型、节点、角色、顺序号、读写机制、保证、API接口、ACL、选举、 + 应用场景:统一命名服务、配置管理、集群管理、共享锁、队列管理
- zookeeper集群之java程序异步方式实现对数据节点的增,删,改,查及其权限管理(三)
- zookeeper和java实现的统一配置管理和集群节点管理简单案例
- zookeeper集群之java程序同步方式实现对数据节点的增,删,改,查及其权限管理(二)
- 如何实现WebSphere Application Server 6集群环境下的定时服务
- 如何实现集群多个节点之间的数据同步
- Linux集群服务知识点总结及通过案例介绍如何实现高性能web服务
- 基于zookeeper管理redis集群,实现消息路由(一)
- 使用docker容器创建Kafka集群管理、状态保存是通过zookeeper实现,所以先要搭建zookeeper集群
- Linux集群服务知识点总结及通过案例介绍如何实现高性能web服务
- 分布式系统中利用zookeeper集群实现微服务主备切换代码片段(C语言版)
- DUBBO服务管理配置Zookeeper集群服务
- 使用阿里云配置管理ACM实现zookeeper依赖服务的透明Failover迁移
- 如何实现邮件服务的日常管理
- 如何实现Linux服务集群的高可用性(heartbeat)
- Linux集群服务知识点总结及通过案例介绍如何实现高性能web服务(三)
- dubbo-如何搭建maven项目,并实现Dubbo分布式服务管理
- 分布式服务管理框架-Zookeeper安装与配置(单机、集群)
- 一步到位分布式开发Zookeeper实现集群管理
- Linux集群服务知识点总结及通过案例介绍如何实现高性能web服务(二)