简介:
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)集群中配置的节点数最好为基数个