简介:

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

原理:

ZooKeeper是以Fast Paxos算法为基础的,Paxos 算法存在活锁的问题,即当有多个proposer交错提交时,有可能互相排斥导致没有一个proposer能提交成功,而Fast Paxos作了一些优化,通过选举产生一个leader (领导者),只有leader才能提交proposer,具体算法可见Fast Paxos。因此,要想弄懂ZooKeeper首先得对Fast Paxos有所了解。

ZooKeeper的基本运转流程:

1、选举Leader。

2、同步数据。

3、选举Leader过程中算法有很多,但要达到的选举标准是一致的。

4、Leader要具有最高的执行ID,类似root权限。

5、集群中大多数的机器得到响应并接受选出的Leader。



一、安装介质

https://archive.apache.org/dist/zookeeper/zookeeper-3.4.5/

二、安装方法

1、解压安装包

[root@hadoop-server01 conf]# tar -xvf zookeeper-3.4.5.tar.gz  -C /usr/local/apps/

2、修改配置文件

[root@hadoop-server01 conf]# cp zoo_sample.cfg zoo.cfg

[root@hadoop-server01 conf]# vi zoo.cfg

# The number of milliseconds of each tick

tickTime=2000

# The number of ticks that the initial

# synchronization phase can take

initLimit=10

# The number of ticks that can pass between

# sending a request and getting an acknowledgement

syncLimit=5

# the directory where the snapshot is stored.

# do not use /tmp for storage, /tmp here is just

# example sakes.

dataDir=/usr/local/apps/zookeeper-3.4.5/data

# the port at which the clients will connect

clientPort=2181

#

# 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=3

# Purge task interval in hours

# Set to "0" to disable auto purge feature

#autopurge.purgeInterval=1

server.1=hadoop-server01:2888:3888

server.2=hadoop-server02:2888:3888

server.3=hadoop-server03:2888:3888

#说明

#2888端口代表leader和follower之间通讯端口

#3888代表follower和follower之间的投票端口

3、创建myid文件

[root@hadoop-server01 data]# cd /usr/local/apps/zookeeper-3.4.5/data

[root@hadoop-server01 data]# echo 1 > myid

4、将节点1修改的文件分发到其它节点

[root@hadoop-server01 apps]# scp -r zookeeper-3.4.5/ root@hadoop-server02:/usr/local/apps/

[root@hadoop-server01 apps]# scp -r zookeeper-3.4.5/ root@hadoop-server03:/usr/local/apps/

5、修改myid文件

[root@hadoop-server02 data]# cd /usr/local/apps/zookeeper-3.4.5/data

[root@hadoop-server02 data]# echo 2 > myid

[root@hadoop-server03 data]# cd /usr/local/apps/zookeeper-3.4.5/data

[root@hadoop-server03 data]# echo 3 > myid

6、启动zk服务

[root@hadoop-server01 bin]# ./zkServer.sh start

JMX enabled by default

Using config: /usr/local/apps/zookeeper-3.4.5/bin/../conf/zoo.cfg

Starting zookeeper ... STARTED

[root@hadoop-server01 bin]# jps

2514 QuorumPeerMain

2531 Jps

[root@hadoop-server02 bin]# ./zkServer.sh  start

JMX enabled by default

Using config: /usr/local/apps/zookeeper-3.4.5/bin/../conf/zoo.cfg

Starting zookeeper ... STARTED

[root@hadoop-server02 bin]# jps

2403 QuorumPeerMain

2434 Jps

[root@hadoop-server03 bin]# ./zkServer.sh  start

JMX enabled by default

Using config: /usr/local/apps/zookeeper-3.4.5/bin/../conf/zoo.cfg

Starting zookeeper ... STARTED

[root@hadoop-server03 bin]# jps

2352 QuorumPeerMain

2377 Jps

7、查看当前节点的工作模式

[root@hadoop-server01 bin]# ./zkServer.sh  status

JMX enabled by default

Using config: /usr/local/apps/zookeeper-3.4.5/bin/../conf/zoo.cfg

Mode: follower

[root@hadoop-server02 bin]# ./zkServer.sh  status

JMX enabled by default

Using config: /usr/local/apps/zookeeper-3.4.5/bin/../conf/zoo.cfg

Mode: leader

[root@hadoop-server03 bin]# ./zkServer.sh  status

JMX enabled by default

Using config: /usr/local/apps/zookeeper-3.4.5/bin/../conf/zoo.cfg

Mode: follower

特点:

(1)集群中只要有半数以上的节点活跃,集群服务可以正常提供

(2)集群中配置的节点数最好为基数个