zoukankan      html  css  js  c++  java
  • zookeeper windows 入门安装和测试

    一、序言

          以下是我对zookeeper 的一些理解:
          zookeeper 作为一个服务注册信息存储的管理工具,好吧,这样说得很抽象,我们举个“栗子”。

          栗子1号:

          假设我是一家KTV的老板,我同时拥有5家KTV,我肯定得时刻监视我KTV 的情况吧,是不是有人打架,或者发生火灾什么的,这时候我会给设置一个视频监控,然后每一家都连接到我的视频监控里面,那么我就可以在家里看到所有KTV 的情况了,如果某一家出现问题,我就能及时发现,并且做出反应。

    这个视频监控就相当于zookeeper,每一家的连接,就相当于KTV 的信息。

           

     

    二、安装过程

         2.1  http://mirrors.hust.edu.cn/apache/zookeeper/  下载,我的版本是 3.4.6(stable) 稳定

         2.2  解压到 F:zookeeper-3.4.6 

         3.3  到目录conf 下创建 zoo.cfg 文件,默认就是加载这个文件,文件内容 我直接copy 的sample里面的

              

    Java代码  收藏代码
    1. #zoo.cfg 的内容  
    2. #   心跳检查的时间 2秒  
    3. tickTime=2000  
    4. # 初始化时 连接到服务器端的间隔次数,总时间10*2=20秒  
    5. initLimit=10  
    6. # ZK Leader 和follower 之间通讯的次数,总时间5*2=10秒   
    7. syncLimit=5  
    8. # 存储内存中数据库快照的位置,如果不设置参数,更新事务日志将被存储到默认位置。  
    9. dataDir=F:\zk\tmp\zookeeper  
    10. # 错误日志的存放位置  
    11. dataLogDir=F:\zk\logs\zookeeper  
    12.   
    13. # ZK 服务器端的监听端口  
    14. clientPort=2181  

     

       上面的说明介绍:http://zookeeper.apache.org/doc/current/zookeeperStarted.html

       然后 cd 到bin 目录下 执行zkServer.cmd 就启动成功了。

       注意:dataDir  和  dataLogDir 目录不会自动创建,得手动创建才能启动。

       可以用netstat -ano|findstr "2181" 看看是否OK。

       也可以用JPS 查看启动的JAVA 进程的情况,会出现这样

       

    Java代码  收藏代码
    1. C:windowssystem32>jps  
    2. 8068  
    3. 10040 QuorumPeerMain  // 这东西是zk的东西,源码有介绍  
    4. 10556 Jps  

       也可以用自带客户端命令 :  zkCli.cmd -server 127.0.0.1:2181

       关于JPS的东西,可以自己去JAVA_HOMEin 目录下去看,里面很多命令。

       

    四、JAVA 操作zookeeper :

           上面安装挺简单的,我们来实际操作下:

           4.1  导入依赖:

            

    Java代码  收藏代码
    1. <dependency>  
    2.            <groupId>org.apache.zookeeper</groupId>  
    3.            <artifactId>zookeeper</artifactId>  
    4.            <version>3.4.6</version>  
    5.        </dependency>  

     

        4.2 JAVA 实现:这里我们简单实现上面的栗子

           

    Java代码  收藏代码
    1. // 根节点  
    2. public static final String ROOT = "/root-ktv";  
    3.   
    4. public static void main(String[] args) throws Exception {  
    5.     // 创建一个与服务器的连接  
    6.     ZooKeeper zk = new ZooKeeper("localhost:2181"30000new Watcher() {  
    7.         // 监控所有被触发的事件  
    8.         public void process(WatchedEvent event) {  
    9.             System.out.println("状态:" + event.getState()+":"+event.getType()+":"+event.getWrapper()+":"+event.getPath());  
    10.         }  
    11.     });  
    12.     // 创建一个总的目录ktv,并不控制权限,这里需要用持久化节点,不然下面的节点创建容易出错  
    13.     zk.create(ROOT, "root-ktv".getBytes(), ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);  
    14.   
    15.     // 然后杭州开一个KTV ,       PERSISTENT_SEQUENTIAL 类型会自动加上 0000000000 自增的后缀  
    16.     zk.create(ROOT+"/杭州KTV""杭州KTV".getBytes(), ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT_SEQUENTIAL);  
    17.   
    18.     // 也可以在北京开一个,       EPHEMERAL session 过期了就会自动删除  
    19.     zk.create(ROOT+"/北京KTV""北京KTV".getBytes(), ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.EPHEMERAL);  
    20.   
    21.     // 同理,我可以在北京开多个,EPHEMERAL_SEQUENTIAL  session 过期自动删除,也会加数字的后缀  
    22.     zk.create(ROOT+"/北京KTV-分店""北京KTV-分店".getBytes(), ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.EPHEMERAL_SEQUENTIAL);  
    23.   
    24.     // 我们也可以 来看看 一共监视了多少家的ktv  
    25.     List<String> ktvs = zk.getChildren(ROOT, true);  
    26.     System.out.println(Arrays.toString(ktvs.toArray()));  
    27.     for(String node : ktvs){  
    28.         // 删除节点  
    29.         zk.delete(ROOT+"/"+node,-1);  
    30.     }  
    31.     // 根目录得最后删除的  
    32.     zk.delete(ROOT, -1);  
    33.     zk.close();  
    34. }  

     

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

        

      

     三、zookeeper 伪集群

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

         

           3.1  我们将F:zookeeper-3.4.6conf下的zoo.cfg 改成zoo1.cfg,内容改为:

           

    Java代码  收藏代码
    1. # 存储内存中数据库快照的位置,如果不设置参数,更新事务日志将被存储到默认位置。  
    2. # 每一个文件路径和下面的对应,zk1 zk2 zk3  
    3. dataDir=F:\zk\tmp\zk1  
    4. # 错误日志的存放位置  
    5. dataLogDir=F:\zk\logs\zk1  
    6.   
    7. # ZK 服务器端的监听端口  
    8. # 对应分别:2181  2182  2183  
    9. clientPort=2181  
    10. # 伪集群   
    11. #2887 是server 之间通讯的,3887 是应用程序通讯的  
    12. # 同时加入其他两个服务的地址和端口信息  
    13. server.1=127.0.0.1:2887:3887   
    14. server.2=127.0.0.1:2888:3888   
    15. server.3=127.0.0.1:2889:3889   
    16. # 最后在钱文件目录下创建3份,zoo1.cfg,zoo2.cfg,zoo3,cfg 记得改参数  

     

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

        

    Java代码  收藏代码
    1. set ZOOMAIN=org.apache.zookeeper.server.quorum.QuorumPeerMain  
    2. # 读取配置的路径,每个启动服务对应一份  
    3. set ZOOCFG=..confzoo1.cfg  
    4. # 同理创建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

          

  • 相关阅读:
    Android 3.0 r1 API中文文档(108) —— ExpandableListAdapter
    Android 3.0 r1 API中文文档(113) ——SlidingDrawer
    Android 3.0 r1 API中文文档(105) —— ViewParent
    Android 中文 API (102)—— CursorAdapter
    Android开发者指南(4) —— Application Fundamentals
    Android开发者指南(1) —— Android Debug Bridge(adb)
    Android中文API(115)——AudioFormat
    Android中文API(116)——TableLayout
    Android开发者指南(3) —— Other Tools
    Android中文API (110) —— CursorTreeAdapter
  • 原文地址:https://www.cnblogs.com/haoyy/p/6150703.html
Copyright © 2011-2022 走看看