Zookeeper的目的是封装好复杂易出错的关键服务,将简单易用的接口和性能高效、功能稳定的系统提供给用户。Zookeeper有两种运行模式,单机模式(Standalone)和集群模式(Distributed),但是Zookeeper的长处在于可以搭建分布式的Zookeeper集群(一个Leader,多个Follower),从而可以保证集群的高可用性、高稳定性、高可靠性。

下面说明一下Zookeeper两种模式的配置:
在配置Zookeeper之前,下载Zookeeper的安装包:http://zookeeper.apache.org/releases.html#download,我使用的是zookeeper-3.3.6版本的。
 

Zookeeper的单机模式(standalone)

 

下载安装包之后,使用Winscp放到Linux的环境中,然后解压安装包:

  1. tar zxvf zookeeper-3.3.6.tar.gz

解压后开始配置Zookeeper,进入到配置文件的目录:

  1. cd  zookeeper-3.3.6/conf/

将目录下面的 zoo_sample.cfg修改为zoo.cfg,然后配置内容为:

  1. # The number of milliseconds of each tick
  2. tickTime=2000
  3. # The number of ticks that the initial
  4. # synchronization phase can take
  5. initLimit=10
  6. # The number of ticks that can pass between
  7. # sending a request and getting an acknowledgement
  8. syncLimit=5
  9. # the directory where the snapshot is stored.
  10. dataDir=/tmp/zookeeper
  11. # the port at which the clients will connect
  12. clientPort=2181

上面各个配置参数的含义:

tickTime:这个时间是作为 Zookeeper 服务器之间或客户端与服务器之间维持心跳的时间间隔,也就是每个 tickTime 时间就会发送一个心跳。dataDir:顾名思义就是 Zookeeper 保存数据的目录,默认情况下,Zookeeper 将写数据的日志文件也保存在这个目录里。clientPort:这个端口就是客户端连接 Zookeeper 服务器的端口,Zookeeper 会监听这个端口,接受客户端的访问请求。

dataLogDir: log目录, 同样可以是任意目录. 如果没有设置该参数, 将使用和dataDir相同的设置,这个参数我没有设置。

配置好后,启动Zookeeper服务器进程:

  1. cd  zookeeper-3.3.6/
  2. bin/zkServer.sh start

启动成功后,用jps -m的命令查询,Zookeeper的进程为QuorumPeerMain

用客户端进程连接服务器,执行如下命令:

  1. bin/zkCli.sh  -server logsrv03:2181

上面的logsrv是我的主机名,后面的2181是连接的端口号

连接成功后,出现以下的连接信息:

  1. [root@logsrv03 zookeeper-3.3.6]# bin/zkCli.sh -server logsrv03:2181
  2. Connecting to logsrv03:2181
  3. 2015-08-18 10:23:48,966 - INFO  [main:Environment@97] - Client environment:zookeeper.version=3.3.6-1366786, built on 07/29/2012 06:22 GMT
  4. 2015-08-18 10:23:48,969 - INFO  [main:Environment@97] - Client environment:host.name=logsrv03
  5. 2015-08-18 10:23:48,970 - INFO  [main:Environment@97] - Client environment:java.version=1.7.0_71
  6. 2015-08-18 10:23:48,970 - INFO  [main:Environment@97] - Client environment:java.vendor=Oracle Corporation
  7. 2015-08-18 10:23:48,971 - INFO  [main:Environment@97] - Client environment:java.home=/usr/local/jdk1.7.0_71/jre
  8. 2015-08-18 10:23:48,971 - INFO  [main:Environment@97] - Client environment:java.class.path=/usr/local/jiang/zookeeper-3.3.6/bin/../build/classes:/usr/local/jiang/zookeeper-3.3.6/bin/../build/lib/*.jar:/usr/local/jiang/zookeeper-3.3.6/bin/../zookeeper-3.3.6.jar:/usr/local/jiang/zookeeper-3.3.6/bin/../lib/log4j-1.2.15.jar:/usr/local/jiang/zookeeper-3.3.6/bin/../lib/jline-0.9.94.jar:/usr/local/jiang/zookeeper-3.3.6/bin/../src/java/lib/*.jar:/usr/local/jiang/zookeeper-3.3.6/bin/../conf:.:/usr/local/jdk1.7.0_71/lib:/usr/local/jdk1.7.0_71/lib/dt.jar:/usr/local/jdk1.7.0_71/lib/tools.jar
  9. 2015-08-18 10:23:48,972 - INFO  [main:Environment@97] - Client environment:java.library.path=/usr/java/packages/lib/amd64:/usr/lib64:/lib64:/lib:/usr/lib
  10. 2015-08-18 10:23:48,972 - INFO  [main:Environment@97] - Client environment:java.io.tmpdir=/tmp
  11. 2015-08-18 10:23:48,973 - INFO  [main:Environment@97] - Client environment:java.compiler=<NA>
  12. 2015-08-18 10:23:48,973 - INFO  [main:Environment@97] - Client environment:os.name=Linux
  13. 2015-08-18 10:23:48,974 - INFO  [main:Environment@97] - Client environment:os.arch=amd64
  14. 2015-08-18 10:23:48,974 - INFO  [main:Environment@97] - Client environment:os.version=2.6.32-431.el6.x86_64
  15. 2015-08-18 10:23:48,975 - INFO  [main:Environment@97] - Client environment:user.name=root
  16. 2015-08-18 10:23:48,975 - INFO  [main:Environment@97] - Client environment:user.home=/root
  17. 2015-08-18 10:23:48,976 - INFO  [main:Environment@97] - Client environment:user.dir=/usr/local/jiang/zookeeper-3.3.6
  18. 2015-08-18 10:23:48,977 - INFO  [main:ZooKeeper@379] - Initiating client connection, connectString=logsrv03:2181 sessionTimeout=30000 watcher=org.apache.zookeeper.ZooKeeperMain$MyWatcher@1698ab04
  19. Welcome to ZooKeeper!
  20. 2015-08-18 10:23:48,995 - INFO  [main-SendThread():ClientCnxn$SendThread@1058] - Opening socket connection to server logsrv03/172.17.6.148:2181
  21. 2015-08-18 10:23:49,002 - INFO  [main-SendThread(logsrv03:2181):ClientCnxn$SendThread@947] - Socket connection established to logsrv03/172.17.6.148:2181, initiating session
  22. JLine support is enabled
  23. 2015-08-18 10:23:49,020 - INFO  [main-SendThread(logsrv03:2181):ClientCnxn$SendThread@736] - Session establishment complete on server logsrv03/172.17.6.148:2181, sessionid = 0x24f3b0a17ea0002, negotiated timeout = 30000
  24. WATCHER::
  25. WatchedEvent state:SyncConnected type:None path:null
  26. [zk: logsrv03:2181(CONNECTED) 0]

到这,Zookeeper Standalone模式就配置完成了。

Zookeeper的集群模式(Distributed)

 

Zookeeper服务自身组成一个集群(2n+1个服务允许n个失效)。Zookeeper服务有两个角色,一个是leader,负责写服务和数据同步,剩下的是follower,提供读服务,leader失效后会在follower中重新选举新的leader。在整个Zookeeper集群模式下,整个集群是一个整体,在集群中的任何一个Zookeeper节点共享整个集群的服务。详情可以参考http://zookeeper.apache.org/doc/trunk/zookeeperInternals.html

下面介绍集群模式的配置过程:

第一步:配置主机名和ip的映射

 

在Zookeeper集群运行的过程中,每一个Zookeeper节点是需要相互通信的,并且是通过主机名来相互通信的,集群每个节点需要相互识别,所以,在配置一个Zookeeper节点的时候需要配置其他节点主机名到ip的映射

例如配置我的Zookeeper集群,集群中一共有三台机子:logsrv02、logsrv03、logsrv04,以logsrv03为例子,进入/etc/hosts,内容如下所示:

  1. 172.17.6.142 logsrv02
  2. 172.17.6.148 logsrv03
  3. 172.17.6.149 logsrv04

第二步:配置Zookeeper的配置文件

 
  1. # The number of milliseconds of each tick
  2. tickTime=2000
  3. # The number of ticks that the initial
  4. # synchronization phase can take
  5. initLimit=10
  6. # The number of ticks that can pass between
  7. # sending a request and getting an acknowledgement
  8. syncLimit=5
  9. # the directory where the snapshot is stored.
  10. dataDir=/tmp/zookeeper
  11. # the port at which the clients will connect
  12. clientPort=2181
  13. server.1=logsrv02:2888:3888
  14. server.2=logsrv03:2888:3888
  15. server.3=logsrv04:2888:3888

以上配置文件与单机模式相比其实也就多了集群中server.id和主机名、端口号的映射信息,配置文件的详细说明可以参考官方说明:
http://zookeeper.apache.org/doc/trunk/zookeeperStarted.html#sc_RunningReplicatedZooKeeper

第三步:在logsrv02和logsrv04添加安装文件

 

我们在logsrv03中配置好了Zookeeper安装文件,在一个集群中,每一个Zookeeper节点只需要使用相同的安装文件就行了,所以需要将配置好的文件复制到另外两台机子上,这里介绍两种方法:

第一种:使用Winscp将文件直接复制出去,然后再复制到另外两台机子上,这种方式需要安装Winscp(用于在本地与远程计算机间安全的复制文件,支持scp协议)

下载地址:http://winscp.net/eng/download.php

第二种:远程命令的方式直接复制到logsrv02和logsrv04上,如下面所示:

  1. cd /usr/local/
  2. scp -r zookeeper-3.3.6/ root@logsrv02:/usr/local/
  3. scp -r zookeeper-3.3.4/ root@logsrv04:/usr/local/

第四步:设置myid

 

在我们配置的dataDir指定的目录下面,创建一个myid文件,里面内容为一个数字,用来标识当前主机,在conf/zoo.cfg中配置的server.x中x是什么数字就设置id为这个数字,如下面所示:

  1. [root@logsrv02 zookeeper]# echo "1" > /tmp/zookeeper/myid
  2. [root@logsrv03 zookeeper]# echo "2" > /tmp/zookeeper/myid
  3. [root@logsrv04 zookeeper]# echo "3" > /tmp/zookeeper/myid

第五步:配置好后,启动集群

 

配置好后,进入/usr/local/zookeeper-3.3.6/目录下,然后执行如下命令启动zookeeper:

  1. [root@logsrv02 zookeeper-3.3.6]# bin/zkServer start
  2. [root@logsrv03 zookeeper-3.3.6]# bin/zkServer start
  3. [root@logsrv04 zookeeper-3.3.6]# bin/zkServer start

第六步:安装验证

 

安装完成后,可以通过zookeeper的脚本来查看zookeeper的启动状态,以及每个Zookeeper节点在集群中的角色(Leader和Follower),下面是我的Zookeeper集群各节点的查询结果:

  1. [root@logsrv02 zookeeper-3.3.6]# bin/zkServer.sh status
  2. JMX enabled by default
  3. Using config: /usr/local/jiang/zookeeper-3.3.6/bin/../conf/zoo.cfg
  4. Mode: follower
  5. [root@logsrv03 zookeeper-3.3.6]# bin/zkServer.sh status
  6. JMX enabled by default
  7. Using config: /usr/local/jiang/zookeeper-3.3.6/bin/../conf/zoo.cfg
  8. Mode: follower
  9. [root@logsrv04 zookeeper-3.3.6]# bin/zkServer.sh status
  10. JMX enabled by default
  11. Using config: /usr/local/zookeeper-3.3.6/bin/../conf/zoo.cfg
  12. Mode: leader

通过上面的信息可以得知,logsrv04是Leader,其余两个都是Follower。

集群配置好后,可以通过其中一个Zookeeper节点连接点集群上,而且通过一个节点可以共享整个集群的服务,例如:当你配置好Zookeeper集群后,再安装中间件KAFKA后,通过zookeeper启动KAFKA,然后通过脚本创建topic,topic的创建时需要指定zookeeper的节点,当许多节点都对应了topic,这个时候在zookeeper集群中,查询一个节点对应的topic列表,可以查询到整个集群的所有节点的topic列表。

参考链接

 

下面是我在学习Zookeeper的时候,搜集的与Zookeeper相关的链接,可以参考学习:

http://zookeeper.apache.org/doc/trunk/zookeeperStarted.html#sc_RunningReplicatedZooKeeper

http://zookeeper.apache.org/doc/trunk/

http://zookeeper.apache.org/doc/trunk/zookeeperInternals.html

http://zookeeper.apache.org/

http://blog.csdn.net/shirdrn/article/details/7183503

http://jm-blog.aliapp.com/?p=1384

http://www.ibm.com/developerworks/cn/opensource/os-cn-zookeeper/

http://cailin.iteye.com/blog/2014486

http://blog.jpush.cn/push_zookeeper_study_usage/

http://coolxing.iteye.com/blog/1871009

http://blog.yemou.net/article/query/info/tytfjhfascvhzxcyt192

FROM https://blog.csdn.net/u014039577/article/details/47746629

zookeeper集群的安装和配置的更多相关文章

  1. ZooKeeper 集群的安装、配置---Dubbo 注册中心

    ZooKeeper 集群的安装.配置.高可用测试 Dubbo 注册中心集群 Zookeeper-3.4.6 Dubbo 建议使用 Zookeeper 作为服务的注册中心. Zookeeper 集群中只 ...

  2. Dubbo入门到精通学习笔记(十三):ZooKeeper集群的安装、配置、高可用测试、升级、迁移

    文章目录 ZooKeeper集群的安装.配置.高可用测试 ZooKeeper 与 Dubbo 服务集群架构图 1. 修改操作系统的/etc/hosts 文件,添加 IP 与主机名映射: 2. 下载或上 ...

  3. ZooKeeper集群的安装、配置、高可用测试

    Dubbo注册中心集群Zookeeper-3.4.6 Dubbo建议使用Zookeeper作为服务的注册中心. Zookeeper集群中只要有过半的节点是正常的情况下,那么整个集群对外就是可用的.正是 ...

  4. Dubbo入门到精通学习笔记(十四):ActiveMQ集群的安装、配置、高可用测试,ActiveMQ高可用+负载均衡集群的安装、配置、高可用测试

    文章目录 ActiveMQ 高可用集群安装.配置.高可用测试( ZooKeeper + LevelDB) ActiveMQ高可用+负载均衡集群的安装.配置.高可用测试 准备 正式开始 ActiveMQ ...

  5. Zookeeper 集群的安装及高可用性验证已完成!

    安装包 kafka_2.12-0.10.2.0.tgz zookeeper-3.3.5.tar.gz Java 环境 Zookeeper 和 Kafka 的运行都需要 Java 环境,Kafka 默认 ...

  6. 基于zookeeper集群的云平台-配置中心的功能设计

    最近准备找工作面试,就研究了下基于zookeeper集群的配置中心. 下面是自己设想的关于开源的基于zookeeper集群的云平台-配置中心的功能设计.大家觉得哪里有问题,请提出宝贵的意见和建议,谢谢 ...

  7. zookeeper集群环境安装配置

    众所周知,Zookeeper有三种不同的运行环境,包括:单机环境.集群环境和集群伪分布式环境 在此介绍的是集群环境的安装配置 一.下载: http://apache.fayea.com/zookeep ...

  8. Zookeeper集群的安装和使用

    Apache Zookeeper 由 Apache Hadoop 的 Zookeeper 子项目发展而来,现已经成为 Apache 的顶级项目,它是一个开放源码的分布式应用程序协调服务,是Google ...

  9. 分布式架构高可用架构篇_01_zookeeper集群的安装、配置、高可用测试

    参考: 龙果学院http://www.roncoo.com/share.html?hamc=hLPG8QsaaWVOl2Z76wpJHp3JBbZZF%2Bywm5vEfPp9LbLkAjAnB%2B ...

随机推荐

  1. 怎样使GridView中满足某个条件的行可编辑,其余行不可编辑?

    DXperience是个很优秀的第三方控件包,使用起来非常方便,但有时候某些功能的实现在文档中不太容易找到解决方案,比如下面要提到的这个功能我就在文档中找了很久也没找到,最后还是在官方论坛上找到的. ...

  2. datagridview添加行

    添加明细按钮 DataRow dRow = DtDetail.NewRow(); dRow["PriceId"] = ConvertUtil.GetIntFromObject(dr ...

  3. Makefile 编译动态库文件及链接动态库

    本文为原创文章,转载请指明该文链接 文件目录结构如下 dynamiclibapp.c Makefile comm/inc/apue.h comm/errorhandle.c dynamiclib/Ma ...

  4. 正确配置Linux系统ulimit值的方法

    在Linux下面部署应用的时候,有时候会遇上Socket/File: Can’t open so many files的问题:这个值也会影响服务器的最大并发数,其实Linux是有文件句柄限制的,而且L ...

  5. Yii CDbCriteria 常用方法

    一.一个sql拼装的情况 $criteria = new CDbCriteria; //函数方式 $criteria->addCondition("id=1"); //查询条 ...

  6. [Javascript]右侧悬浮框

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  7. linux 批量创建用户获取8位随机密码

    #创建账号  分组不分组只有一列useradd无法添加三个账号 添加账号  获取密码  执行最后一句echo stu{4..6}|xargs -n 1|sed -r 's#(.*)#useradd \ ...

  8. Mysql: Connect/C++ 使用过程中发现返回 std::string 造成的内存泄露

    在使用 Connect/C++ ,测试时发现在调用 getString 出现了内存增长的情况. ConstructOutput(); //打印出当前内存 ;i<;++i) { prepareSt ...

  9. Node.js获取mac网卡地址

    一.关于getmac node.js没有直接获取mac网卡地址的模块,此时我们需要借助于第三方模块getmac.getmac 可以帮助我们 获取当前机器上的mac地址.gatmac 下载地址为:htt ...

  10. js学习笔记20----addClass,removeClass函数封装

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...