菜单

一个具有高可用性的高性能协调服务

2019年8月8日 - 4166m金沙
一个具有高可用性的高性能协调服务

ZooKeeper是什么

1.zk集群java简单操作

ZooKeeper是一个具有高可用性的高性能协调服务。

1.0 包目录结构

4166m金沙,ZooKeeper维护着一个树形层次结构,书中的节点被称为znode。znode可以用来存储数据,并且有一个与之相关联的ACL(权限),znode不能大于1M。

lib取自zookpeeper官方压缩包(基于zk3.4.5测试通过)

ZooKeeper
的详细介绍
:请点这里
ZooKeeper
的下载地址
:请点这里

4166m金沙 1

相关阅读

1.1 AbstractZooKeeper.java

ZooKeeper集群配置
http://www.linuxidc.com/Linux/2013-06/86348.htm

package com.ccy.zk;

使用ZooKeeper实现分布式共享锁
http://www.linuxidc.com/Linux/2013-06/85550.htm

import java.io.IOException;
import java.util.concurrent.CountDownLatch;

分布式服务框架 ZooKeeper — 管理分布式环境中的数据
http://www.linuxidc.com/Linux/2013-06/85549.htm

import org.apache.log4j.Logger;
import org.apache.zookeeper.WatchedEvent;
import org.apache.zookeeper.Watcher;
import org.apache.zookeeper.Watcher.Event.KeeperState;
import org.apache.zookeeper.ZooKeeper;

ZooKeeper集群环境搭建实践
http://www.linuxidc.com/Linux/2013-04/83562.htm

/**
 *
 * <p>
 * Title: AbstractZooKeeper.java
 * Package com.ccy.zk
 * </p>
 * <p>
 * Description: TODO
 * <p>
 * @author Tom.Cai
 * @created 2015-4-13 下午9:48:50
 * @version V1.0
 *
 */
public class AbstractZooKeeper implements Watcher { 
 protected Logger logger = Logger.getLogger(AbstractZooKeeper.class);
 
    //缓存时间 
    private static final int SESSION_TIME  = 2000;   
    protected ZooKeeper zooKeeper; 
    protected CountDownLatch countDownLatch=new CountDownLatch(1); 
 
    //连接zk集群
    public void connect(String hosts) throws IOException,
InterruptedException{   
            zooKeeper = new ZooKeeper(hosts,SESSION_TIME,this);   
            countDownLatch.await();   
      }   
    //zk处理
    @Override 
    public void process(WatchedEvent event) { 
        if(event.getState()==KeeperState.SyncConnected){ 
            countDownLatch.countDown(); 
        } 
    } 
   
    //关闭集群
    public void close() throws InterruptedException{   
        zooKeeper.close();   
    }   
}

ZooKeeper服务器集群环境配置实测
http://www.linuxidc.com/Linux/2013-04/83559.htm

1.2 ZooKeeperOperator.java(测试类)

ZooKeeper集群安装
http://www.linuxidc.com/Linux/2012-10/72906.htm

package com.ccy.zk;

ZooKeeper使用场景

import java.util.List;

ZooKeeper主要用来解决分布式系统中的“部分失败”问题。部分失败是分布式系统的固有的特征,ZooKeeper不能根除部分失败,也不会隐藏部分失败;但是可以提供一组工具,使你在构建分布式应用时对部分失败进行处理。这主要利用的是观察者模式。

import org.apache.log4j.Logger;
import org.apache.zookeeper.CreateMode;
import org.apache.zookeeper.KeeperException;
import org.apache.zookeeper.ZooDefs.Ids;
import org.apache.zookeeper.data.Stat;

Hadoop内置了ZooKeeper,阿里的开源框架Dubbo、Otter等也都是用ZooKeeper作为协调服务。

 

安装和运行ZooKeeper

/**
 *
 * <p>
 * Title: ZooKeeperOperator.java
 * Package com.ccy.zk
 * </p>
 * <p>
 * Description: TODO
 * <p>
 * @author Tom.Cai
 * @created 2015-4-13 下午9:49:00
 * @version V1.0
 *
 */
public class ZooKeeperOperator extends AbstractZooKeeper {
 
 private static Logger logger =
Logger.getLogger(ZooKeeperOperator.class);

安装

 /**
  *
  *创建znode
  *
  */
 public void create(String path,byte[] data)throws KeeperException,
InterruptedException{
  /**
  *
此处采用的是创建的是持久化节点:PERSISTENT表示不会因连接的断裂而删除节点
  * EPHEMERAL 表示The znode will be deleted upon the client’s
disconnect.
  */
  this.zooKeeper.create(path, data, Ids.OPEN_ACL_UNSAFE,
CreateMode.PERSISTENT);
 }
 /**
  *
  *获取节点信息
  *
  */
 public void getChild(String path) throws KeeperException,
InterruptedException{ 
  try{
   List<String> list=this.zooKeeper.getChildren(path, false);
   if(list.isEmpty()){
    logger.info(path+”中没有节点”);
    System.out.println(path+”中没有节点”);
   }else{
    for(String child:list){
     System.out.println(“节点:”+child);
    }
   }
  }catch (KeeperException.NoNodeException e) {
   // TODO: handle exception
    throw e; 
  }
 }
 /**
  *
  *获取节点数据
  *
  */
 public byte[] getData(String path) throws KeeperException,
InterruptedException { 
        return  this.zooKeeper.getData(path, false,null); 
    } 
 
 /**
  * 修改节点数据
  */
 public Stat setDate(String path,byte[] data,int version) throws
KeeperException, InterruptedException{
  return this.zooKeeper.setData(path, data, version);
 }
 
 /**
  * 删除节点
  */
 public void deleteNode(final String path,int version) throws
InterruptedException, KeeperException{
  this.zooKeeper.delete(path, version);
 }
 
  public static void main(String[] args) {
  try { 
            ZooKeeperOperator zkoperator = new ZooKeeperOperator(); 
            zkoperator.connect(“192.168.80.100”);
           
            //操作1:创建一个持久化节点
            //zkoperator.create(“/test1”, “zk”.getBytes());
            //zkoperator.create(“/test1/test11”, “zk”.getBytes());
            //zkoperator.create(“/test1/test12”, “zk”.getBytes());
           
            //操作2:取出原有的节点
            //byte[] b = zkoperator.getData(“/test1”);
            //System.out.println(new String(b));
           
            //操作3:设置节点数据
            //zkoperator.setDate(“/test1”, “zk1”.getBytes(), 1);
           
           
            //操作4:删除节点操作
            zkoperator.deleteNode(“/test1/test12”, 0);
           
            //获取子节点
            // zkoperator.getChild(“/test1”);
       

相关文章

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图