介:

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]# ./ 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]# ./  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]# ./  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]# ./  status
JMX enabled by default
Using config: /usr/local/apps/zookeeper-3.4.5/bin/../conf/zoo.cfg
Mode: follower
[root@hadoop-server02 bin]# ./  status
JMX enabled by default
Using config: /usr/local/apps/zookeeper-3.4.5/bin/../conf/zoo.cfg
Mode: leader
[root@hadoop-server03 bin]# ./  status
JMX enabled by default
Using config: /usr/local/apps/zookeeper-3.4.5/bin/../conf/zoo.cfg
Mode: follower

特点:

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

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



转载于:https://blog.51cto.com/2951890/2140133