zookeeper有单机、伪集群、集群三种部署方式,可根据自己实际情况选择合适的部署方式。下边对这三种部署方式逐一进行讲解。

一 单机模式

1.下载

进入要下载的版本的目录,选择.tar.gz文件下载
下载链接:http://archive.apache.org/dist/zookeeper/
注意:点击进入之后,会显示zookeeper文件的下载目录,如图所示,显示了多个版本可以下载。alpha版本是内测,功能不是很完全的,能够满足一定的需要,这里我们不建议选择;beta是公测版本,基本上可以满足要求,可以适当的根据需要选择;如果是对稳定性要求非常高的话,最好是选择正式发布的版本。

2.上传安装包到usr/local目录下,并解压缩,重命名,配置环境变量

  1. [root@hadoop ~]# cd /usr/local/
  2. [root@hadoop local]# tar xzvf zookeeper-3.4..tar.gz #解压缩
  3. [root@hadoop local]# mv zookeeper-3.4. zookeeper #重命名
  4. [root@hadoop local]# vi /etc/profile #添加环境变量
  5. 添加变量:export ZOO_HOME=/usr/local/zookeeper
  6. 然后在PATH变量后面添加::$ZOO_HOME/bin
  7. [root@hadoop local]# source /etc/profile #生成环境变量

3.配置zookeeper。将配置模板生成为配置文件,生成dataDir目录,修改参数

  1. [root@hadoop local]# cd /usr/local/zookeeper/conf
  2. [root@hadoop conf]# ls
  3. configuration.xsl log4j.properties zoo_sample.cfg
  4. [root@hadoop conf]# cp zoo_sample.cfg zoo.cfg #生成配置文件
  5. [root@hadoop conf]# mkdir -p /usr/local/zookeeper/data #生成dataDir目录
  6. [root@hadoop conf]# vi zoo.cfg #添加如下参数
  7. dataDir=/usr/local/zookeeper/data #已有,修改即可
  8. dataLogDir=/usr/local/zookeeper/data/log
  9. server.=hadoop::

附zoo.cfg文件

  1. # The number of milliseconds of each tick
  2. #表示每2s心跳一次,zookeeper的服务器之间或者客户端与服务器之间维持着一种心跳机制
  3. tickTime=
  4. # The number of ticks that the initial
  5. # synchronization phase can take
  6. #集群中的follower和leader之间初始连接时能够容忍的最大心跳数
  7. initLimit=
  8. # The number of ticks that can pass between
  9. # sending a request and getting an acknowledgement
  10. #leader和follower之间同步的实现,follower和leader之间请求和应答能容忍的最大心跳数
  11. #也就是说在5个心跳之后判断对方死亡
  12. syncLimit=
  13. # the directory where the snapshot is stored.
  14. # do not use /tmp for storage, /tmp here is just
  15. # example sakes.
  16. #zookeeper数据存放的目录
  17. dataDir=/usr/local/zookeeper/data
  18. #zookeeper数据的日志文件存放的目录
  19. dataLogDir=/usr/local/zookeeper/data/log
  20. # the port at which the clients will connect
  21. #客户端连接zookeeper的端口号
  22. clientPort=
  23. # the maximum number of client connections.
  24. # increase this if you need to handle more clients
  25. #maxClientCnxns=
  26. #
  27. # Be sure to read the maintenance section of the
  28. # administrator guide before turning on autopurge.
  29. #
  30. # http://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_maintenance
  31. #
  32. # The number of snapshots to retain in dataDir
  33. #autopurge.snapRetainCount=
  34. # Purge task interval in hours
  35. # Set to "" to disable auto purge feature
  36. #autopurge.purgeInterval=
  37. #此处指的是你有多少台zookeeper,每台zookeeper的服务器主机名叫什么以及相应的端口
  38. #服务器名称与地址,包括服务器编号,地址,leader与follower通讯端口,选举端口等
  39. server.=hadoop::

4.在dataDir目录下生成myid文件
myid文件告诉zookeeper我是该集群中的第几号机器,然后在myid文件中从1开始填入对应的数字

  1. [root@hadoop conf]# echo > /usr/local/zookeeper/data/myid #单机模式只有一台机器,故它是集群中的1号机器

5.开启zookeeper集群节点

  1. [root@hadoop conf]# zkServer.sh start
  2. ZooKeeper JMX enabled by default
  3. Using config: /usr/local/zookeeper/bin/../conf/zoo.cfg
  4. Starting zookeeper ... STARTED

6.检查集群状态或者节点角色

  1. [root@hadoop conf]# jps #出现QuorumPeerMain代表zookeeper正常运转
  2. Jps
  3. QuorumPeerMain
  4.  
  5. [root@hadoop conf]# zkServer.sh status #单机模式,只有一种角色standalone
  6. ZooKeeper JMX enabled by default
  7. Using config: /usr/local/zookeeper/bin/../conf/zoo.cfg
  8. Mode: standalone

7.关闭zookeeper集群节点

  1. [root@hadoop conf]# zkServer.sh stop
  2. ZooKeeper JMX enabled by default
  3. Using config: /usr/local/zookeeper/bin/../conf/zoo.cfg
  4. Stopping zookeeper ... STOPPED
  5.  
  6. [root@hadoop conf]# jps
  7. Jps
  8.  
  9. [root@hadoop conf]# zkServer.sh status
  10. ZooKeeper JMX enabled by default
  11. Using config: /usr/local/zookeeper/bin/../conf/zoo.cfg
  12. Error contacting service. It is probably not running.

二 伪集群模式

伪集群模式就是在同一主机启动多个zookeeper并组成集群,下边以在hadoop主机上创建3个zookeeper组集群为例。

1.将通过单机模式安装的zookeeper,复制成zoo1/zoo2/zoo3三份

  1. [root@hadoop ~]# mkdir /zoo
  2. [root@hadoop ~]# cp -r /usr/local/zookeeper /zoo/zoo1
  3. [root@hadoop ~]# cp -r /usr/local/zookeeper /zoo/zoo2
  4. [root@hadoop ~]# cp -r /usr/local/zookeeper /zoo/zoo3
  5. [root@hadoop ~]# cd /zoo/
  6. [root@hadoop zoo]# ls
  7. zoo1 zoo2 zoo3

2.分别修改3个节点的配置文件

  1. [root@hadoop zoo]# vi /zoo/zoo1/conf/zoo.cfg #节点1
  2. dataDir=/zoo/zoo1/data
  3. dataLogDir=/zoo/zoo1/data/log
  4. clientPort=
  5. #由于我们用的同一个主机hadoop,为了防止端口冲突,设置端口号均不同
  6. #如果是3个节点分别在3台机器上,端号可以一样
  7. #此处主机名hadoop也可以写成主机IP地址
  8. server.=hadoop::
  9. server.=hadoop::
  10. server.=hadoop::
  11.  
  12. [root@hadoop zoo]# vi /zoo/zoo2/conf/zoo.cfg #节点2
  13. dataDir=/zoo/zoo2/data
  14. dataLogDir=/zoo/zoo2/data/log
  15. clientPort=
  16. server.=hadoop::
  17. server.=hadoop::
  18. server.=hadoop::
  19.  
  20. [root@hadoop zoo]# vi /zoo/zoo3/conf/zoo.cfg #节点3
  21. dataDir=/zoo/zoo3/data
  22. dataLogDir=/zoo/zoo3/data/log
  23. clientPort=
  24. server.=hadoop::
  25. server.=hadoop::
  26. server.=hadoop::

3.分别修改3个节点的myid文件

  1. [root@hadoop zoo]# echo > /zoo/zoo1/data/myid
  2. [root@hadoop zoo]# echo > /zoo/zoo2/data/myid
  3. [root@hadoop zoo]# echo > /zoo/zoo3/data/myid

4.依次启动3个zookeeper集群节点
由于没加环境变量,启动方式为$ZOO_HOME/bin/zkServer.sh start

  1. [root@hadoop /]# /zoo/zoo1/bin/zkServer.sh start #启动节点1
  2. ZooKeeper JMX enabled by default
  3. Using config: /zoo/zoo1/bin/../conf/zoo.cfg
  4. Starting zookeeper ... STARTED
  5.  
  6. [root@hadoop /]# jps #1个QuorumPeerMain代表1个节点启动成功
  7. QuorumPeerMain
  8. Jps
  9.  
  10. [root@hadoop /]# /zoo/zoo1/bin/zkServer.sh status #此时节点1是LOOKING状态
  11. ZooKeeper JMX enabled by default
  12. Using config: /zoo/zoo1/bin/../conf/zoo.cfg
  13. Error contacting service. It is probably not running.
  14.  
  15. [root@hadoop /]# /zoo/zoo2/bin/zkServer.sh start #启动节点2
  16. ZooKeeper JMX enabled by default
  17. Using config: /zoo/zoo2/bin/../conf/zoo.cfg
  18. Starting zookeeper ... STARTED
  19.  
  20. [root@hadoop /]# jps #2个QuorumPeerMain代表2个节点启动成功
  21. QuorumPeerMain
  22. Jps
  23. QuorumPeerMain
  24.  
  25. [root@hadoop /]# /zoo/zoo2/bin/zkServer.sh status #通过选举节点2为leader
  26. ZooKeeper JMX enabled by default
  27. Using config: /zoo/zoo2/bin/../conf/zoo.cfg
  28. Mode: leader
  29. [root@hadoop /]# /zoo/zoo1/bin/zkServer.sh status #节点1为follower
  30. ZooKeeper JMX enabled by default
  31. Using config: /zoo/zoo1/bin/../conf/zoo.cfg
  32. Mode: follower
  33.  
  34. [root@hadoop /]# /zoo/zoo3/bin/zkServer.sh start #启动节点3
  35. ZooKeeper JMX enabled by default
  36. Using config: /zoo/zoo3/bin/../conf/zoo.cfg
  37. Starting zookeeper ... STARTED
  38.  
  39. [root@hadoop /]# jps #3个QuorumPeerMain代表3个节点启动成功
  40. QuorumPeerMain
  41. Jps
  42. QuorumPeerMain
  43. QuorumPeerMain
  44.  
  45. [root@hadoop /]#
  46. [root@hadoop /]# /zoo/zoo3/bin/zkServer.sh status #leader已被选举出来,节点3只能当follower了
  47. ZooKeeper JMX enabled by default
  48. Using config: /zoo/zoo3/bin/../conf/zoo.cfg
  49. Mode: follower
  50. [root@hadoop /]# /zoo/zoo1/bin/zkServer.sh status
  51. ZooKeeper JMX enabled by default
  52. Using config: /zoo/zoo1/bin/../conf/zoo.cfg
  53. Mode: follower
  54. [root@hadoop /]# /zoo/zoo2/bin/zkServer.sh status
  55. ZooKeeper JMX enabled by default
  56. Using config: /zoo/zoo2/bin/../conf/zoo.cfg
  57. Mode: leader

5.如何同时关闭zookeeper所有节点?

  1. [root@hadoop data]# kill - `ps -ef|grep zookeeper|awk '{print $2}'` #杀死进程
    #注意:单引号外面的一层是反引号(Tab上面的那个键),用于命令嵌套
  2. -bash: kill: () - No such process
  3. [root@hadoop data]# ps -ef|grep zookeeper #查看进程
  4. root : pts/ :: grep --color=auto zookeeper

三 集群模式

集群模式就是在不同主机上安装zookeeper然后组成集群的模式。安装方式与伪集群模式类似。下边以在hadoop/hadoop2/hadoop3三台主机上安装为例。

1.首先在hadoop主机上以单机模式安装zookeeper,然后将其打包复制到另外两台主机hadoop2和hadoop3上,并都解压到同样的目录下。

2.分别修改3个节点的配置文件

  1. [root@hadoop ~]# vi /usr/local/zookeeper/conf/zoo.cfg #节点1,,3均修改如下
  2. #对于节点1,,,由于安装目录都一样,所以dataDir和dataLogDir不需要改变
  3. #节点1,,3分别在不同机器上,所以clientPort也不需要改变
  4. dataDir=/usr/local/zookeeper/data
  5. dataLogDir=/usr/local/zookeeper/data/log
  6. clientPort=
  7. #3个节点分别在3台机器上,端号可以一样
  8. server.=hadoop::
  9. server.=hadoop2::
  10. server.=hadoop3::

3.分别修改3个节点的myid文件。3个节点的myid文件分别写入1,2,3,方法参考伪集群模式

附myid数字生成法(我没用这个脚本执行,大家感兴趣可以尝试)

  1. #!/bin/bash
  2. #在执行该脚本前,请确保zookeeper已经复制到各个节点服务器上
  3. i=
  4. for j in `sed '1,2d' /etc/hosts|awk '{print $1}'`
  5. do
  6. ssh $j "echo $i > /usr/local/zookeeper/data/myid"
  7. i=$(($i+))
  8. echo $i
  9. done

4.分别启动3个zookeeper集群节点,方法参考伪集群模式

附zookeeper状态脚本

  1. [root@hadoop ~]# cd /usr/local/zookeeper/bin/
  2. [root@hadoop bin]# vi zoo_status.sh
  3. #!/bin/bash
  4. for i in `cat /etc/hosts|awk '{print $2}' | grep -v localhost`
  5. do
  6. ssh $i << EOF
  7. zkServer.sh status
  8. EOF
  9. done
  10. [root@hadoop bin]# chmod zoo_status.sh
  11. [root@hadoop bin]# zoo_status.sh

zookeeper三种模式安装详解(centos 7+zookeeper-3.4.9)的更多相关文章

  1. Window下PHP三种运行方式图文详解,window下的php是不是单进程的?

    Window下PHP三种运行方式图文详解,window下的php是不是单进程的? PHP运行目前为止主要有三种方式: a.以模块加载的方式运行,初学者可能不容易理解,其实就是将PHP集成到Apache ...

  2. python selenium 三种等待方式详解[转]

    python selenium 三种等待方式详解   引言: 当你觉得你的定位没有问题,但是却直接报了元素不可见,那你就可以考虑是不是因为程序运行太快或者页面加载太慢造成了元素不可见,那就必须要加等待 ...

  3. C++的三种继承方式详解以及区别

    目录 目录 C++的三种继承方式详解以及区别 前言 一.public继承 二.protected继承 三.private继承 四.三者区别 五.总结 后话 C++的三种继承方式详解以及区别 前言 我发 ...

  4. Centos7 zookeeper单机/集群安装详解和开机自启

    ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Hadoop和Hbase的重要组件.它是一个为分布式应用提供一致性服务的软件,提供的功 ...

  5. kafka1 三种模式安装

    一 搭建单节点单broker的kafka集群 注意:请打开不同的终端分别执行以下步骤 1.复制安装包到/usr/local目录下,解压缩,重命名(或者软链接),配置环境变量 [root@hadoop ...

  6. Python selenium 三种等待方式详解

    1. 强制等待第一种也是最简单粗暴的一种办法就是强制等待sleep(xx),强制让闪电侠等xx时间,不管凹凸曼能不能跟上速度,还是已经提前到了,都必须等xx时间.看代码: # -*- coding: ...

  7. O(n*logn)级别的算法之二(快速排序)的三种实现方法详解及其与归并排序的对比

    一,单路快排1.测试用例: #ifndef INC_06_QUICK_SORT_DEAL_WITH_NEARLY_ORDERED_ARRAY_SORTTESTHELPER_H #define INC_ ...

  8. C++中函数调用时的三种参数传递方式详解

    在C++中,参数传递的方式是“实虚结合”. 按值传递(pass by value) 地址传递(pass by pointer) 引用传递(pass by reference) 按值传递的过程为:首先计 ...

  9. iOS中 三种随机数方法详解

    ios 有如下三种随机数方法: //第一种 srand((unsigned)time(0)); //不加这句每次产生的随机数不变 int i = rand() % 5; //第二种 srandom(t ...

随机推荐

  1. tar分层压缩

    在Linux下使用 tar 命令来将文件打包并压缩是很通常的用法了. 可是Linux的文件系统对文件大小有限制,也就是说一个文件最大不能超过2G,如果压缩包的的内容很大,最后 的结果就会超过2G,又或 ...

  2. Android样式的开发:selector篇

    上一篇详细讲了shape的用法,讲解了怎么用shape自定义矩形.圆形.线形和环形,以及有哪些需要注意的地方.不过,shape只能定义单一的形状,而实际应用中,很多地方比如按钮.Tab.ListIte ...

  3. ethereum发erc20token

    以太坊发币智能合约代码简单介绍: 发币代码如下(https://ethereum.org/token#the-code网站中获得): pragma solidity ^; interface toke ...

  4. Xlight FTP搭建FTP服务器教程

    Xlight FTP搭建FTP服务器教程 1. 服务器公共设置 设置FTP 端口, ip 等 FTP 服务器公共的设定 2. 设定 FTP 用户, FTP 目录 等信息    备注: 这个用户是非Wi ...

  5. 【黑金原创教程】【FPGA那些事儿-驱动篇I 】原创教程连载导读【连载完成,共二十九章】

    前言: 无数昼夜的来回轮替以后,这本<驱动篇I>终于编辑完毕了,笔者真的感动到连鼻涕也流下来.所谓驱动就是认识硬件,还有前期建模.虽然<驱动篇I>的硬件都是我们熟悉的老友记,例 ...

  6. ios时间差

    /** * @method * * @brief 获取两个日期之间的天数 * @param fromDate       起始日期 * @param toDate         终止日期 * @re ...

  7. day_5.18_py总结

  8. B - Is It A Tree?

    来源 hdu 1325 A tree is a well-known data structure that is either empty (null, void, nothing) or is a ...

  9. 初级ai思维导图,基础人工智能设计图

    2017年2月8日09:35:46 仅供代码和逻辑设计图纸,只提供一个参考设计,后面可能会更新具体实施说明

  10. STM FLASH在线编程 升级

    注意字节到 stm flash 顺序是反的 例如 12 34 56 78 世纪写入内存 应该是 78 56 34 12