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

一 单机模式

1.下载

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

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

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

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

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

附zoo.cfg文件

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

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

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

5.开启zookeeper集群节点

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

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

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

7.关闭zookeeper集群节点

[root@hadoop conf]# zkServer.sh stop
ZooKeeper JMX enabled by default
Using config: /usr/local/zookeeper/bin/../conf/zoo.cfg
Stopping zookeeper ... STOPPED [root@hadoop conf]# jps
Jps [root@hadoop conf]# zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /usr/local/zookeeper/bin/../conf/zoo.cfg
Error contacting service. It is probably not running.

二 伪集群模式

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

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

[root@hadoop ~]# mkdir /zoo
[root@hadoop ~]# cp -r /usr/local/zookeeper /zoo/zoo1
[root@hadoop ~]# cp -r /usr/local/zookeeper /zoo/zoo2
[root@hadoop ~]# cp -r /usr/local/zookeeper /zoo/zoo3
[root@hadoop ~]# cd /zoo/
[root@hadoop zoo]# ls
zoo1 zoo2 zoo3

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

[root@hadoop zoo]# vi /zoo/zoo1/conf/zoo.cfg #节点1
dataDir=/zoo/zoo1/data
dataLogDir=/zoo/zoo1/data/log
clientPort=
#由于我们用的同一个主机hadoop,为了防止端口冲突,设置端口号均不同
#如果是3个节点分别在3台机器上,端号可以一样
#此处主机名hadoop也可以写成主机IP地址
server.=hadoop::
server.=hadoop::
server.=hadoop:: [root@hadoop zoo]# vi /zoo/zoo2/conf/zoo.cfg #节点2
dataDir=/zoo/zoo2/data
dataLogDir=/zoo/zoo2/data/log
clientPort=
server.=hadoop::
server.=hadoop::
server.=hadoop:: [root@hadoop zoo]# vi /zoo/zoo3/conf/zoo.cfg #节点3
dataDir=/zoo/zoo3/data
dataLogDir=/zoo/zoo3/data/log
clientPort=
server.=hadoop::
server.=hadoop::
server.=hadoop::

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

[root@hadoop zoo]# echo  > /zoo/zoo1/data/myid
[root@hadoop zoo]# echo > /zoo/zoo2/data/myid
[root@hadoop zoo]# echo > /zoo/zoo3/data/myid

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

[root@hadoop /]# /zoo/zoo1/bin/zkServer.sh start #启动节点1
ZooKeeper JMX enabled by default
Using config: /zoo/zoo1/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED [root@hadoop /]# jps #1个QuorumPeerMain代表1个节点启动成功
QuorumPeerMain
Jps [root@hadoop /]# /zoo/zoo1/bin/zkServer.sh status #此时节点1是LOOKING状态
ZooKeeper JMX enabled by default
Using config: /zoo/zoo1/bin/../conf/zoo.cfg
Error contacting service. It is probably not running. [root@hadoop /]# /zoo/zoo2/bin/zkServer.sh start #启动节点2
ZooKeeper JMX enabled by default
Using config: /zoo/zoo2/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED [root@hadoop /]# jps #2个QuorumPeerMain代表2个节点启动成功
QuorumPeerMain
Jps
QuorumPeerMain [root@hadoop /]# /zoo/zoo2/bin/zkServer.sh status #通过选举节点2为leader
ZooKeeper JMX enabled by default
Using config: /zoo/zoo2/bin/../conf/zoo.cfg
Mode: leader
[root@hadoop /]# /zoo/zoo1/bin/zkServer.sh status #节点1为follower
ZooKeeper JMX enabled by default
Using config: /zoo/zoo1/bin/../conf/zoo.cfg
Mode: follower [root@hadoop /]# /zoo/zoo3/bin/zkServer.sh start #启动节点3
ZooKeeper JMX enabled by default
Using config: /zoo/zoo3/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED [root@hadoop /]# jps #3个QuorumPeerMain代表3个节点启动成功
QuorumPeerMain
Jps
QuorumPeerMain
QuorumPeerMain [root@hadoop /]#
[root@hadoop /]# /zoo/zoo3/bin/zkServer.sh status #leader已被选举出来,节点3只能当follower了
ZooKeeper JMX enabled by default
Using config: /zoo/zoo3/bin/../conf/zoo.cfg
Mode: follower
[root@hadoop /]# /zoo/zoo1/bin/zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /zoo/zoo1/bin/../conf/zoo.cfg
Mode: follower
[root@hadoop /]# /zoo/zoo2/bin/zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /zoo/zoo2/bin/../conf/zoo.cfg
Mode: leader

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

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

三 集群模式

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

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

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

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

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

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

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

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

附zookeeper状态脚本

[root@hadoop ~]# cd /usr/local/zookeeper/bin/
[root@hadoop bin]# vi zoo_status.sh
#!/bin/bash
for i in `cat /etc/hosts|awk '{print $2}' | grep -v localhost`
do
ssh $i << EOF
zkServer.sh status
EOF
done
[root@hadoop bin]# chmod zoo_status.sh
[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. [Object Tracking] Overview of Object Tracking

    From: 目标跟踪方法的发展概述 From: 目标跟踪领域进展报告 通用目标的跟踪 经典目标跟踪方法 2010 年以前,目标跟踪领域大部分采用一些经典的跟踪方法,比如 Meanshift.Parti ...

  2. How to hard reset Visual Studio instance

    When developing extensions sometimes you just mess up, others someone else does. If you start gettin ...

  3. react学习笔记(一)用create-react-app构建 React 开发环境

    React 可以高效.灵活的用来构建用户界面框架,react利用高效的算法最小化重绘DOM. create-react-app 是来自于 Facebook,通过该命令不需配置就能快速构建 React ...

  4. 【Docker】退出容器和进入容器

    运行容器:docker run -it 镜像名 /bin/bash 退出容器: exit 或者 Ctrl+P+Q 查看容器:docker ps -a 查看运行的容器:docker ps 重启容器:do ...

  5. day_6.9py网络编程

    .路由器:能够链接不同的网络使他们之间能够通信 mac就是手拉手传输数据用的

  6. redis(二)--用Redis作MySQL数据库缓存

    用Redis作MySQL数据库缓存,必须解决2个问题.首先,应该确定用何种数据结构存储来自mysql的数据:在确定数据结构之后,还要考虑用什么标识作为该数据结构的键. 直观上看,Mysql中的数据都是 ...

  7. javascript parseUrl函数(来自国外的获取网址url参数)

    function parseURL(url) { var a = document.createElement('a'); a.href = url; return { source: url, pr ...

  8. python爬取并批量下载图片

    import requests from lxml import etree url='http://desk.zol.com.cn/meinv/' add1='.html' urls=[] i = ...

  9. 语音识别bug

    # 如果消息为200,则表示talker在交互过程中未识别到用户的语音输入,开启人脸验证确认用户是否还在面前(排除噪声的影响) # 确认时间为3秒,3秒都没有人脸,则确认用户不在.确认用户还在,则提醒 ...

  10. ubuntu为文件添加可执行权限

    为一个文件添加可执行权限 chmod +x filename 为一个文件夹下的所有文件添加可执行权限 chmod +x *