简介

ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Hadoop和Hbase的重要组件。它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务等。
ZooKeeper的目标就是封装好复杂易出错的关键服务,将简单易用的接口和性能高效、功能稳定的系统提供给用户。
ZooKeeper包含一个简单的原语集,[1] 提供Java和C的接口。
ZooKeeper代码版本中,提供了分布式独享锁、选举、队列的接口,代码在zookeeper-3.4.3\src\recipes。其中分布锁和队列有Java和C两个版本,选举只有Java版本。(概述图片来源:[2] )
来源:百度百科

前言

如果是开发,或者测试之类的,可以直接使用docker,
方便简单,而且还容易部署集群哦
风.fox

环境

系统:Centos 7.X
JAVA:1.8.X

JAVA JDK


作者:fox.风

安装

http://zookeeper.apache.org/releases.html
http://www.apache.org/dyn/closer.cgi/zookeeper/
推荐 直接安装zookeeper

创建用户

新建用户

useradd zookeeper
#设置密码
passwd zookeeper

设置密码

直接安装zookeeper(无须编译)

下载地址:http://mirror.bit.edu.cn/apache/zookeeper/

wget http://mirror.bit.edu.cn/apache/zookeeper/zookeeper-3.4.13/zookeeper-3.4.13.tar.gz

tar -zxvf zookeeper-3.4.13.tar.gz
mv zookeeper-3.4.13/ /usr/local/zookeeper/

设置全局变量

vim /etc/profile.d/zokeeper.sh #推荐
或者
vim ~/.bash_profile

最后一行加入

export ZOOKEEPER_HOME=/usr/local/zookeeper
export PATH=$ZOOKEEPER_HOME/bin:$PATH

使之生效

source /etc/profile    #推荐
或者
source ~/.bash_profile

配置文件位置

/usr/local/zookeeper/conf/zoo.cfg

注意:默认配置文件并没有,直有一个案例文件 zoo_sample.cfg
使用的时候要 自行复制一个

cp /usr/local/zookeeper/conf/zoo_sample.cfg /usr/local/zookeeper/conf/zoo.cfg

编译安装方式


教程地址

配置

集群中任意一台机器上的zoo.cfg文件的内容都是一致的
位置:ZOOKEEPER_HOME目录/conf/zoo.cfg

#创建目录
mkdir -p /usr/local/zookeeper/data
#编辑配置文件
vim /usr/local/zookeeper/conf/zoo.cfg

zoo.cfg

tickTime=2000
dataDir=/usr/local/zookeeper/data
clientPort=2181
initLimit=5
syncLimit=2
server.1=zoo1:2888:3888
#注意 必须一个一个启动成功后加入,否则报错
server.2=zoo2:2888:3888
server.3=zoo3:2888:3888

zoo1 记得配置 hosts 文件中的主机地址映射

机器配置:server.X=host:port:port(每行写一个)
server.X=A:B:C 其中X是一个数字, 表示这是第几号server. A是该server所在的IP地址. B配置该server和集群中的leader交换消息所使用的端口. C配置选举leader时所使用的端口.
我们需要在数据目录(数据目录就是dataDir参数指定的那个目录)下创建一个myid文件,myid中就是这个X数字
X的范围是1~255

tickTime: Zookeeper 服务器之间或客户端与服务器之间维持心跳的时间间隔,也就是每个 tickTime 时间就会发送一个心跳。
InitLimit : 允许 follower (相对于 leader 而言的“客户端”)连接并同步到 leader 的初始化连接时间,它以 tickTime 的倍数来表示。当超过设置倍数的 tickTime 时间,则连接失败。
syncLimit:该参数配置leader和follower之间发送消息, 请求和应答的最大时间长度. 此时该参数设置为2, 说明时间限制为2倍tickTime, 即4000ms.
dataDir: Zookeeper 保存数据的目录,默认情况下,Zookeeper 将写数据的日志文件也保存在这个目录里。
dataLogDir : Zookeeper 保存日志的目录。
clientPort:客户端连接 Zookeeper 服务器的端口,Zookeeper 会监听这个端口,接受客户端的访问请求。

如果是开发使用(单机模式),把server.x 从配置文件中删除

server.1=zoo1:2888:3888
server.2=zoo2:2888:3888
server.3=zoo3:2888:3888

ZooKeeper端口说明

2181:对cline端提供服务
3888:选举leader使用
2888:集群内机器通讯使用(Leader监听此端口)

启动

ZOOKEEPER_HOME目录/bin/zkServer.sh start

/usr/local/zookeeper/bin/zkServer.sh start

其他命令

/usr/local/zookeeper/bin/zkServer.sh status        #查看状态
/usr/local/zookeeper/bin/zkServer.sh stop           #关闭

tail -600f /usr/local/zookeeper/data/zookeeper.out  #查看日志

客户端

ZOOKEEPER_HOME目录/bin/zkCli.sh -server 127.0.0.1:2181

/usr/local/zookeeper/bin/zkCli.sh -server 127.0.0.1:2181

伪集群模式

就是把 zookeeper 目录复制3份,配置文件改改(主要端口和目录,不要冲突了),
最后启动这3个进程
例如

server.1=zoo1:2888:3888
server.2=zoo2:6888:7888
server.3=zoo3:8888:9888

集群模式

zoo.cfg 配置文件一样,myid中内容不一样

server.1=zoo1:2888:3888
server.2=zoo2:2888:3888
server.3=zoo3:2888:3888

查看启动

jps
输出

1842 QuorumPeerMain
1877 Jps

QA

My id 0 not in the peer list