zookeeper windows 入门安装和测试

本文介绍了ZooKeeper的基本概念及安装配置方法,并通过实例演示了如何使用Java进行ZooKeeper的操作,最后还讲解了如何搭建ZooKeeper伪集群。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

**本文转至:http://greemranqq.iteye.com/blog/2171449?utm_source=tuicool&utm_medium=referral**

ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Hadoop和Hbase的重要组件。它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务等。
ZooKeeper的目标就是封装好复杂易出错的关键服务,将简单易用的接口和性能高效、功能稳定的系统提供给用户

下载地址:https://zookeeper.apache.org/releases.html
一。安装:解压压缩包。修改conf中的zoo_sample.cfg 为zoo.cfg。
编辑:zoo.cfg。指定dataDir与dataLogDir

#zoo.cfg 的内容  
#   心跳检查的时间 2秒  
tickTime=2000  
# 初始化时 连接到服务器端的间隔次数,总时间10*2=20秒  
initLimit=10  
# ZK Leader 和follower 之间通讯的次数,总时间5*2=10秒   
syncLimit=5  
# 存储内存中数据库快照的位置,如果不设置参数,更新事务日志将被存储到默认位置。  
dataDir=F:\\zk\\tmp\\zookeeper  
# 错误日志的存放位置  
dataLogDir=F:\\zk\\logs\\zookeeper  

# ZK 服务器端的监听端口  
clientPort=2181  

上面的说明介绍:http://zookeeper.apache.org/doc/current/zookeeperStarted.html
然后 cd 到bin 目录下 执行zkServer.cmd 就启动成功了。
注意:dataDir 和 dataLogDir 目录不会自动创建,得手动创建才能启动。
可以用netstat -ano|findstr “2181” 看看是否OK。
也可以用JPS 查看启动的JAVA 进程的情况,会出现这样

C:\windows\system32>jps  
8068  
10040 QuorumPeerMain  // 这东西是zk的东西,源码有介绍  
10556 Jps 

也可以用自带客户端命令 : zkCli.cmd -server 127.0.0.1:2181
关于JPS的东西,可以自己去JAVA_HOME\bin 目录下去看,里面很多命令。

二。java操作 zk
jar包在zookeeper-3.4.8\dist-maven下有,也可maven引入依赖

<dependency>  
           <groupId>org.apache.zookeeper</groupId>  
           <artifactId>zookeeper</artifactId>  
           <version>3.4.6</version>  
       </dependency>  

java实现:

public class ZkTest {
    private static final String defaultZkPort = "2181";
    private static final String defaultZkHost = "localhost";
    public static void main(String[] args) throws IOException, KeeperException, InterruptedException {

        ZooKeeper zk = new ZooKeeper(defaultZkHost +":"+ defaultZkPort,
                ClientBase.CONNECTION_TIMEOUT, new Watcher() {
            // 监控所有被触发的事件
            public void process(WatchedEvent event) {
                System.out.println("已经触发了" + event.getType() + "事件!");
            }
        });
        // 创建一个目录节点
        zk.create("/testRootPath", "testRootData".getBytes(), ZooDefs.Ids.OPEN_ACL_UNSAFE,
                CreateMode.PERSISTENT);
        // 创建一个子目录节点
        zk.create("/testRootPath/testChildPathOne", "testChildDataOne".getBytes(),
                ZooDefs.Ids.OPEN_ACL_UNSAFE,CreateMode.PERSISTENT);
        System.out.println(new String(zk.getData("/testRootPath",false,null)));
        // 取出子目录节点列表
        System.out.println(zk.getChildren("/testRootPath",true));
        // 修改子目录节点数据
        zk.setData("/testRootPath/testChildPathOne","modifyChildDataOne".getBytes(),-1);
        System.out.println("目录节点状态:["+zk.exists("/testRootPath",true)+"]");
        // 创建另外一个子目录节点
        zk.create("/testRootPath/testChildPathTwo", "testChildDataTwo".getBytes(),
                ZooDefs.Ids.OPEN_ACL_UNSAFE,CreateMode.PERSISTENT);
        System.out.println(new String(zk.getData("/testRootPath/testChildPathTwo",true,null)));
        // 删除子目录节点
        zk.delete("/testRootPath/testChildPathTwo",-1);
        zk.delete("/testRootPath/testChildPathOne",-1);
        // 删除父目录节点
        zk.delete("/testRootPath",-1);
        // 关闭连接
        zk.close();
    }

}

zookeeper 的结构图和其他的一些功能,可参考: http://www.blogjava.net/shenh062326/archive/2011/10/29/zookeeper_yuling.html

三、zookeeper 伪集群
上面栗子我们看到,如果我们的监控室也停电了,那不是就监测不到KTV情况了?一般情况下,zk 也是作为分布式部署了,也就是有多台监控,由于监控多了,肯定要有一定为准(比如直播会有一些延迟),就要涉及到选举的算法,这里暂时不介绍,先搭建一个伪集群,因为机器不够,只能再一台机器上模拟搭建,整个过程无非是将上面的一些配置copy 几份,然后配置不同的 地址和端口就行。

   3.1  我们将F:\zookeeper-3.4.6\conf\下的zoo.cfg 改成zoo1.cfg,内容改为:
# 存储内存中数据库快照的位置,如果不设置参数,更新事务日志将被存储到默认位置。  
# 每一个文件路径和下面的对应,zk1 zk2 zk3  
dataDir=F:\\zk\\tmp\\zk1  
# 错误日志的存放位置  
dataLogDir=F:\\zk\\logs\\zk1  

# ZK 服务器端的监听端口  
# 对应分别:2181  2182  2183  
clientPort=2181  
# 伪集群   
#2887 是server 之间通讯的,3887 是应用程序通讯的  
# 同时加入其他两个服务的地址和端口信息  
server.1=127.0.0.1:2887:3887   
server.2=127.0.0.1:2888:3888   
server.3=127.0.0.1:2889:3889   
# 最后在钱文件目录下创建3份,zoo1.cfg,zoo2.cfg,zoo3,cfg 记得改参数 

3.2 同时我们将F:\zookeeper-3.4.6\bin\下的 zkServer.cmd 改为zkServer1.cmd,内容加上:

set ZOOMAIN=org.apache.zookeeper.server.quorum.QuorumPeerMain  
# 读取配置的路径,每个启动服务对应一份  
set ZOOCFG=..\conf\zoo1.cfg  
# 同理创建3个zkServer1.cmd,zkServer2.cmd,zkServer3.cmd  记得改zoo 1 2 3.cfg 

3.3 还得在dataDir 指定目录,也就是F:\zk\tmp\zk1 下创建myid 的文件,内容对应1 2 3 即可。
这个的数字是唯一的,在1-255 之间,用来表示自身的id(其实我不明白 为啥zk 要这么设计- -!)

3.4 启动3个zkServer1.cmd 就OK了,如果要多服务器配置,只需要要将 3份分开放到不同服务器就OK
依次启动的时刻有错误信息,因为你启动server1 的时候 2 和 3 没找到,但是后面都启动了 就没问题了。

小结:
1.zookeeper 现在大家都用得比较多,这里也是仅仅介绍下入门知识,linux 上安装区别不打,还是得看具体应用。
2.关于选举、一致性 和一些其他的东西,慢慢再写!
3.有错误,请指出哦~。~ 感激。

参考资料:
官网的:
http://zookeeper.apache.org/doc/trunk/zookeeperStarted.html
API 文档:
http://zookeeper.apache.org/doc/r3.4.6/api/
别人介绍的一些流程:
http://cailin.iteye.com/blog/2014486
常用的场景:
http://nileader.blog.51cto.com/1381108/1040007

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值