ZooKeeper使用入门

使用ZooKeeper的Java API来实现简单的使用zookeeper,并完成一个简单的经典小需求。

示例:假设有一组服务器用于为客户端提供某种服务。我们希望每个客户端都能找到其中一台服务器,这样它们就可以使用这项服务。

有一个挑战是如何维护这组服务器的列表。这组服务器的成员列表显然不能存储在网络中的单个节点上,否则该节点的故障将意味着整个系统的故障,我们希望这个成员列表是高可用的。

我们还希望当其中一台服务器出现故障时,能够从这组服务器成员列表中删除该节点,避免提供不可用的服务。

相应的实现代码对象以下几个类:

ConnectionWatcher.java    维护客户端和ZooKeeper服务之间的连接;

CreateGroup.java    创建指定的服务组在ZooKeeper上;

DeleteGroup.java    删除指定的服务组在ZooKeeper上;

JoinGroup.java    添加成员在指定的服务组;

ListGroup.java    列出指定服务组下的所有成员;

源代码如下:

public class ConnectionWatcher implements Watcher{

	private static final int SESSION_TIMEOUT = 5000;
	protected ZooKeeper zk;
	private CountDownLatch connectedSignal = new CountDownLatch(1);

	public void connect(String hosts) throws Exception{
		//创建zookeeper实例的时候会启动一个线程连接到zookeeper服务。
		zk = new ZooKeeper(hosts, SESSION_TIMEOUT, this);
		connectedSignal.await();
	}

	//当客户端已经与zookeeper建立连接后,Watcher的process方法会被调用。
	public void process(WatchedEvent event) {
		if(event.getState() == KeeperState.SyncConnected){
			connectedSignal.countDown();
		}
	}

	public void close() throws Exception{
		zk.close();
	}
}
public class CreateGroup extends ConnectionWatcher{

	public void create(String groupName) throws Exception{
		String path = "/"+groupName;
		//创建一个完全开发的ACL(访问控制列表)、持久的znode
		String createdPath = zk.create(path, null, Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);
		System.out.println("Created "+createdPath);
	}
	/**
	 * @param args
	 * @throws Exception 
	 */
	public static void main(String[] args) throws Exception {
		// TODO Auto-generated method stub
		CreateGroup createGroup = new CreateGroup();
		createGroup.connect("192.168.44.231");
		createGroup.create("myzoo");
		createGroup.close();
	}
}
public class DeleteGroup extends ConnectionWatcher{

	public void delete(String groupName) throws Exception{
		String path = "/" + groupName;
		try {
			//ZooKeeper不支持递归删除操作,因此在删除父节点之前必须先删除子节点。
			List<String> children = zk.getChildren(path, false);
			for(String child : children){
				zk.delete(path+"/"+child, -1);
			}
			zk.delete(path, -1);
			System.out.printf("Delete Group %s\n", path);
		} catch (KeeperException.NoNodeException e) {
			System.out.printf("Group %s does not exist\n", groupName);
			System.exit(1);
		}
	}

	public static void main(String[] args) throws Exception {
		DeleteGroup deleteGroup  = new DeleteGroup();
		deleteGroup.connect("192.168.44.231");
		deleteGroup.delete("myzoo");
		deleteGroup.close();
	}
}
public class JoinGroup extends ConnectionWatcher{

	public void join(String groupName, String memberName) throws Exception{
		String path = "/" + groupName + "/" + memberName;
		String createdPath = zk.create(path, null, Ids.OPEN_ACL_UNSAFE, CreateMode.EPHEMERAL);
		System.out.println("Created "+ createdPath);
	}

	/**
	 * @param args
	 * @throws Exception 
	 */
	public static void main(String[] args) throws Exception {
		// TODO Auto-generated method stub
		JoinGroup joinGroup  = new JoinGroup();
		joinGroup.connect("192.168.44.231");
		joinGroup.join("myzoo", "myservice2");

		//stay alive until process is killed or thread is interrupted
		Thread.sleep(Long.MAX_VALUE);
	}
}
public class ListGroup extends ConnectionWatcher{

	public void list(String groupName) throws Exception{
		String path = "/" + groupName;
		try {
			List<String> children = zk.getChildren(path, false);
			if(children.isEmpty()){
				System.out.printf("No members in group %s\n", groupName);
				System.exit(1);
			}
			for(String child : children){
				System.out.println(child);
			}
		} catch (KeeperException.NoNodeException e) {
			System.out.printf("Group %s does not exist\n", groupName);
			System.exit(1);
		}
	}

	/**
	 * @param args
	 * @throws Exception 
	 */
	public static void main(String[] args) throws Exception {
		// TODO Auto-generated method stub
		ListGroup listGroup  = new ListGroup();
		listGroup.connect("192.168.44.231");
		listGroup.list("myzoo");
		listGroup.close();
	}
}
时间: 2024-09-29 03:29:53

ZooKeeper使用入门的相关文章

下载Zookeeper从入门到精通(开发详解,案例实战,Web界面监控)

ZooKeeper是Hadoop的开源子项目(Google Chubby的开源实现),它是一个针对大型分布式系统的可靠协调系统,提供的功能包括:配置维护.命名服务.分布式同步.组服务等. Zookeeper的Fast Fail 和 Leader选举特性大大增强了分布式集群的稳定和健壮性,并且解决了Master/Slave模式的单点故障重大隐患,这是越来越多的分布式产品如HBase.Storm(流计算).S4(流计算)等强依赖Zookeeper的原因. Zookeeper从入门到精通(开发详解,案

大数据之hadoop,国内首部:Zookeeper从入门到精通课程分享

对这个课程感兴趣的朋友可以加我QQ2059055336和我联系. ZooKeeper是Hadoop的开源子项目(Google Chubby的开源实现),它是一个针对大型分布式系统的可靠协调系统,提供的功能包括:配置维护.命名服务.分布式同步.组服务等. Zookeeper的Fast Fail 和 Leader选举特性大大增强了分布式集群的稳定和健壮性,并且解决了Master/Slave模式的单点故障重大隐患,这是越来越多的分布式产品如HBase.Storm(流计算).S4(流计算)等强依赖Zoo

Zookeeper从入门到精通(开发详解,案例实战,Web界面监控)

ZooKeeper是Hadoop的开源子项目(Google Chubby的开源实现),它是一个针对大型分布式系统的可靠协调系统,提供的功能包括:配置维护.命名服务.分布式同步.组服务等. Zookeeper的Fast Fail 和 Leader选举特性大大增强了分布式集群的稳定和健壮性,并且解决了Master/Slave模式的单点故障重大隐患,这是越来越多的分布式产品如HBase.Storm(流计算).S4(流计算)等强依赖Zookeeper的原因. Zookeeper在分布式集群(Hadoop

ZooKeeper系列 第一篇:ZooKeeper快速入门

1. 概述 Zookeeper是Hadoop的一个子项目,它是分布式系统中的协调系统,可提供的服务主要有:配置服务.名字服务.分布式同步.组服务等. 它有如下的一些特点: 简单 Zookeeper的核心是一个精简的文件系统,它支持一些简单的操作和一些抽象操作,例如,排序和通知. 丰富 Zookeeper的原语操作是很丰富的,可实现一些协调数据结构和协议.例如,分布式队列.分布式锁和一组同级别节点中的“领导者选举”. 高可靠 Zookeeper支持集群模式,可以很容易的解决单点故障问题. 松耦合交

Zookeeper 快速入门(上)

来源:holynull, blog.leanote.com/post/holynull/Zookeeper 如有好文章投稿,请点击 → 这里了解详情 Zookeeper是Hadoop分布式调度服务,用来构建分布式应用系统.构建一个分布式应用是一个很复杂的事情,主要的原因是我们需要合理有效的处理分布式集群中的部分失败的问题.例如,集群中的节点在相互通信时,A节点向B节点发送消息.A节点如果想知道消息是否发送成功,只能由B节点告诉A节点.那么如果B节点关机或者由于其他的原因脱离集群网络,问题就出现了

springboot+Zookeeper+Dubbo入门

最近想学习dubbo,就利用周末写了一个特别简单的demo,不知道有没有用,先记录一下. 1.安装zookeeper并启动(安装看我上一篇博客https://www.cnblogs.com/huangzhang/p/9219319.html) 2.下载dubbo源码,安装dubbo-admin(安装看我之前的博客https://www.cnblogs.com/huangzhang/p/9219296.html) 这些准备工作做好之后开始写demo代码: 这里用的开发工具是Intellij IDE

Zookeeper之入门(原理、基础知识)

Zookeeper介绍 Zookeeper是分布式应用程序的协调服务框架,是Hadoop的重要组件.ZK要解决的问题: 1.分布式环境下的数据一致性. 2.分布式环境下的统一命名服务 3.分布式环境下的配置管理 4.分布式环境下的分布式锁 5.集群管理问题  Zookeeper指令与数据结构 Zk数据结构 1.       ZK有一个最开始的节点 2.       ZK的节点叫做znode节点 3.       每个znode节点都可存储数据 4.       每个znode节点都可创建自己的子

ZooKeeper(1)-入门

一. Zookeeper工作机制 二.Zookeeper特点 三.Zookeeper数据结构 四.Zookeeper应用场景 统一命名服务 统一配置管理 统一集群管理 服务器动态上下线 软负载均衡 原文地址:https://www.cnblogs.com/duoduotouhenying/p/10120462.html

zookeeper从入门到精通视频教程(含网盘下载地址)

Zookeeper视频教程 下载地址链接:http://pan.baidu.com/s/1o7ZjPeM 密码:r5yf 原文地址:https://www.cnblogs.com/daoke360/p/11373340.html