`

zookeeper在集群管理中的应用

阅读更多
在我们的下载平台中,为了提高下载速度,我们使用了集群,为了管理集群中服务器的状态,我们使用了zookeeper,在集群中,集群管理器维护server列表,新增server,删除server时,能及时通知集群管理器,集群如下图所示



一 环境搭建

先下载zookeeper-3.3.5,解压,修改conf目录下的zoo配置文件

tickTime=2000
initLimit=10
syncLimit=5
dataDir=F:/zookeeperserver1/zookeeper-3.3.5/data
clientPort=2181
dataLogDir=F:/zookeeperserver1/zookeeper-3.3.5/datalog
server.1=127.0.0.1:2888:3888
server.2=127.0.0.1:2889:3889
server.3=127.0.0.1:2890:3890

启动bin目录下的zkServer

二 开发测试

1 创建集群管理器createmaster类,createmaster类主要负责在zookeeper上创建主节点,并监听主节点下的子节点,代码如下


public class CreateMaster implements Watcher {
	
	//zookeeper客户端连接实例
	private ZooKeeper zk;
	
	private CountDownLatch connectSingn=new CountDownLatch(1);
	
	public void connect(String host) throws InterruptedException
	{
		try {
			zk=new ZooKeeper(host,5000,this);
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		connectSingn.await();
		
	}
	
	public void createmaster(String mastername) throws KeeperException, InterruptedException
	{
		String path="/"+mastername;
		
		//创建父节点
		String createpath=zk.create(path, null, Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);
		
		//监听子节点
		ServerListWatch serverlistwatch=new ServerListWatch(zk);
		
		zk.getChildren("/"+mastername, serverlistwatch);
		
		System.out.println("createpath="+createpath); 
	}
	
	
	
	
	public void close() throws InterruptedException
	{
		zk.close();
	}

	@Override
	public void process(WatchedEvent event) {
		// TODO Auto-generated method stub
		if(event.getState() == KeeperState.SyncConnected) 
		 {
		  System.out.println("已经触发了" + event.getType() + "事件!");
		  connectSingn.countDown();
		 }
		
	}

	/**
	 * @param args
	 * @throws InterruptedException 
	 */
	public static void main(String[] args) throws InterruptedException {
		// TODO Auto-generated method stub
		
		CreateMaster createmaster=new CreateMaster();
		
		createmaster.connect("localhost:2181");
		
		
		try {
			
			//创建父节点
			createmaster.createmaster("serverlist");
		} catch (KeeperException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (InterruptedException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		Thread.sleep(600000);
		
		try {
			createmaster.close();
		} catch (InterruptedException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		

	}

}



2 创建服务节点createserver类,服务节点类主要负责在zookeeper中创建临时的子节点

代码如下


public class CreateServer implements Watcher {

	//zookeeper客户端连接实例
	private ZooKeeper zk;
	
	private CountDownLatch connectSingn=new CountDownLatch(1);
	
	public void connect(String host) throws InterruptedException
	{
		try {
			zk=new ZooKeeper(host,5000,this);
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		connectSingn.await();
		
		
	}
	
	public void createserver(String mastername,String servername) throws KeeperException, InterruptedException
	{
		

		
		String path="/"+mastername+"/"+servername;
		
		String createpath=zk.create(path, null, Ids.OPEN_ACL_UNSAFE, CreateMode.EPHEMERAL);
		
		
			
		System.out.println("createpath="+createpath); 
	}
	
	public void close() throws InterruptedException
	{
		
		zk.close();
	}
	@Override
	public void process(WatchedEvent event) {
		// TODO Auto-generated method stub
		 if(event.getState() == KeeperState.SyncConnected) 
		 {
		  System.out.println("已经触发了" + event.getType() + "事件!");
		  connectSingn.countDown();
		 }
		


	}
	
	public static void main(String[] args) throws InterruptedException {
		
	    CreateServer createserver=new CreateServer();
		
		createserver.connect("localhost:2181");
		
		try {
			createserver.createserver("serverlist", "server1");
		} catch (KeeperException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (InterruptedException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		Thread.sleep(120000);
		
		createserver.close();
	}

}



3 创建监听子节点类serverlistwatch,监听子节点主要负责监听子节点,以及回调函数处理,代码如下


public class ServerListWatch implements Watcher {
	
	//zookeeper客户端连接实例
	private ZooKeeper zk;
	
	public 	ServerListWatch(ZooKeeper zk)
	{
		this.zk=zk;
    }

	public void connect(String host)
	{
		try {
			zk=new ZooKeeper(host,5000,this);
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		
	}
	
	public void close() throws InterruptedException
	{
		
		zk.close();
	}
	
	@Override
	public void process(WatchedEvent event) {
		// TODO Auto-generated method stub

		if(event.getState() == KeeperState.SyncConnected) 
		{  
			System.out.println("已经触发了" + event.getType() + "事件!");
			
			
		}

		    if(event.getType() == EventType.NodeChildrenChanged) 
			{
				System.out.println("children change"); 
				
				ListServer listserver=new ListServer(zk);
				
			
				
				try {
					//打印子节点
					listserver.list("serverlist");
				} catch (KeeperException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				} catch (InterruptedException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
				
				try {
					
					ServerListWatch serverlistwatch=new ServerListWatch(zk);
					
					//重新监听
					listserver.addchildremwatch("serverlist",serverlistwatch);
				
				} catch (KeeperException e1) {
					// TODO Auto-generated catch block
					e1.printStackTrace();
				} catch (InterruptedException e1) {
					// TODO Auto-generated catch block
					e1.printStackTrace();
				}
				
			
			}
		
	}

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub

	}

}



4 创建打印服务器信息listserver类,主要负责打印服务器集群信息,代码如下



public class ListServer implements Watcher{
	
	//zookeeper客户端连接实例
	private ZooKeeper zk;
	
	private CountDownLatch connectSingn=new CountDownLatch(1);
	
	public ListServer(ZooKeeper zk)
	{
		this.zk=zk;
	}
	
	public void connect(String host) throws InterruptedException
	{
		try {
			zk=new ZooKeeper(host,5000,this);
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		connectSingn.await();
		
	}
	
	public void list(String master) throws KeeperException, InterruptedException
	{
		String path="/"+master;
		
		List<String> children=zk.getChildren(path, false);
		
		if(children!=null&&children.size()>0)
		{
			for(String child: children)
			{
				System.out.println("children="+child); 
			}
		}
		else
		{
			System.out.println("no children"); 
		}
		
		
	}
	
	public void addchildremwatch(String master,ServerListWatch serverlistwatch) throws KeeperException, InterruptedException
	{
		String path="/"+master;
		
		//ServerListWatch serverlistwatch=new ServerListWatch();
		
		zk.getChildren(path, serverlistwatch);
	}
	
	public void close() throws InterruptedException
	{
		
		zk.close();
	}
	
	@Override
	public void process(WatchedEvent event) {
		// TODO Auto-generated method stub
		 if(event.getState() == KeeperState.SyncConnected) 
		 {
		  System.out.println("已经触发了" + event.getType() + "事件!");
		  connectSingn.countDown();
		 }
		


	}
	/**
	 * @param args
	 * @throws InterruptedException 
	 * @throws KeeperException 
	 */
	public static void main(String[] args) throws KeeperException, InterruptedException {
		// TODO Auto-generated method stub

		ListServer listserver=new ListServer(null);
		
		listserver.connect("localhost:2181");
		
		listserver.list("serverlist");
		
		listserver.close();
	}

}



5 测试代码,结果如下



已经触发了None事件!
createpath=/serverlist
已经触发了NodeChildrenChanged事件!
children change
children=server1
已经触发了NodeChildrenChanged事件!
children change
children=server1
children=server2
已经触发了NodeChildrenChanged事件!
children change
children=server1
已经触发了NodeChildrenChanged事件!
children change
no children

从测试中可以清楚的看到服务节点的新增和删除。

 

分享到:
评论

相关推荐

    zookeeper linux集群搭建流程

    ZooKeeper 广泛应用于分布式系统中,例如分布式配置管理、分布式锁、分布式队列等。ZooKeeper 的高可用性和高性能使其成为分布式系统的优选解决方案。 ZooKeeper Linux 集群搭建流程可以分为四步:下载和解压 ...

    Linux下Zookeeper集群的安装

    此外,它还广泛应用于分布式系统中的一些核心问题,如配置管理、名字服务、分布式锁以及集群管理等。 ##### 主要功能解析 1. **配置管理** 在复杂的分布式系统中,配置文件的管理和分发成为一项挑战。Zookeeper...

    zookeeper 伪集群和集群环境搭建

    Zookeeper 是一个分布式协调服务,常用于管理分布式应用的数据模型,提供诸如数据一致性、命名服务、分布式锁等核心功能。本文将详细介绍如何在 CentOS 环境下搭建 Zookeeper 的伪集群和集群环境。 首先,我们要...

    liunx安装zookeeper及集群部署

    总结,搭建 Zookeeper 集群并在 Dubbo 中使用,能够为分布式应用提供稳定可靠的服务协调,实现配置管理、服务发现等功能,确保系统的高可用性和扩展性。通过正确配置和维护,可以有效地支持大规模分布式系统的运行。

    zookeeper集群安装文档.docx

    它的设计目标是解决分布式环境中的数据管理问题,如命名服务、状态同步、集群管理以及分布式应用配置的管理等。Zookeeper 提供了一个集中式的数据存储和协调服务,使得分布式应用能够高效地共享和管理数据。 在搭建...

    zookeeper集群.rar

    Zookeeper集群是一个分布式协调服务,由Apache...了解并掌握这些知识点,你就能在Windows环境中成功搭建和管理一个Zookeeper集群了。记得在部署过程中,始终关注官方文档和社区更新,以便获取最新的信息和最佳实践。

    zookeeper 单机集群配置

    ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,它是集群的管理者,监视着集群中各个节点的状态根据节点提交的反馈进行下一步合理操作。简单来说,它就是用来进行数据分布式存储、监控系统状态、...

    zookeeper分布式集群配置

    当需要搭建Zookeeper集群时,需要在`zoo.cfg`中添加以下集群配置: 1. `server.1=`、`server.2=`、`server.3=`等,指定集群中每台服务器的IP地址和通信端口(如2888和3888)。 2. 各个服务器的`dataDir`下创建`myid`...

    Zookeeper集群搭建.doc

    Zookeeper集群搭建是一个重要的任务,尤其在分布式系统中,它作为协调服务,为高可用性和数据一致性提供了基础。Zookeeper是Apache的一个开源项目,用于处理分布式应用中的命名服务、配置管理、集群同步、选举等功能...

    集群搭建(zookeeper集群+solr集群)

    3. **SolrCloud集群配置**:在每台Solr服务器上安装Solr,并配置与Zookeeper集群的连接。通过Zookeeper提供的界面配置SolrCloud的核心集合(core collection),包括分片数量、副本数量等。 4. **数据导入与索引**:将...

    基于Zookeeper框架实现MySQL分布式数据库集群.pdf

    Zookeeper是一个分布式的协调服务,它通过提供统一命名服务、状态同步服务、集群管理、分布式应用配置项的管理等,来解决分布式应用中的协调问题。Zookeeper是由多个服务器节点组成的集群,其中包括一个主节点...

    Zookeeper在windows搭建伪集群

    要在Windows上搭建Zookeeper伪集群,需要下载Zookeeper压缩包,并将其解压缩到制定的文件夹中。然后,创建三个数据文件夹和三个日志文件夹,路径可以自定义。在 conf 文件夹中,复制 zoo.cfg 文件,得到 zoo1.cfg、...

    zookeeper集群+配置手册

    Zookeeper集群是一个分布式协调服务,常用于管理大型分布式系统中的命名空间、配置管理、领导者选举等任务。在本文中,我们将深入探讨如何搭建一个由三个节点组成的Zookeeper集群,并了解其配置过程。 首先,...

    【Zookeeper管理工具】

    【Zookeeper管理工具】是一个关于分布式协调服务Zookeeper的管理平台,它提供了便捷的方式来监控、配置和管理Zookeeper集群。Zookeeper是Apache Hadoop项目的一部分,主要用于解决分布式环境中的命名服务、配置管理...

    zookeeper数据迁移从单例到集群linux命令过程

    Zookeeper 是一个分布式协调服务框架,它为分布式应用程序提供了一套完整的协调服务功能,如配置维护、命名服务、集群管理等。在实际生产环境中,Zookeeper 的部署通常会从单节点扩展到多节点集群,以提升系统的可用...

    zookeeper3.4.1集群一键部署

    ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,它是集群的管理者,监视着集群中各个节点的状态根据节点提交的反馈进行下一步合理操作。最终将简单易用的接口和性能高效、功能稳定的系统提供给用户。...

    一步到位分布式开发Zookeeper实现集群管理

    Zookeeper是分布式服务框架,主要是用来解决分布式应用中经常遇到的一些数据管理问题,如:统一命名服务、状态同步服务、集群管理、分布式应用配置项的管理等等。Zookeeper的核心是广播,这个机制保证了各个Server...

    zookeeper 分布式集群管理应用, Dubbo 实现远程调用 服务降级

    zooKeeper 是一个开放源码的分布式协调服务,主要为了解决分布式架构下数据一致性问题, 它是集群的管理者, 监视着集群中各个节点的状态,根据节点提交的反馈进行下一步合理操作。 最终, 将简单易用的接口和性能...

Global site tag (gtag.js) - Google Analytics