ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,它包含一个简单的原语集,分布式应用程序可以基于它实现同步服务,配置维护和命名服务等。Zookeeper是hadoop的一个子项目,在分布式应用中,由于工程师不能很好地使用锁机制,以及基于消息的协调机制不适合在某些应用中使用,因此需要有一种可靠的、可扩展的、分布式的、可配置的协调机制来统一系统的状态。
运行原理:Zookeeper的核心是原子广播,这个机制保证了各个Server之间的同步。实现这个机制的协议叫做Zab协议。Zab协议有两种模式,它们分别是恢复模式(选主)和广播模式(同步)。当服务启动或者在领导者崩溃后,Zab就进入了恢复模式,当领导者被选举出来,且大多数Server完成了和leader的状态同步以后,恢复模式就结束了。状态同步保证了leader和Server具有相同的系统状态。为了保证事务的顺序一致性,zookeeper采用了递增的事务id号(zxid)来标识事务。所有的提议(proposal)都在被提出的时候加上了zxid。实现中zxid是一个64位的数字,它高32位是epoch用来标识leader关系是否改变,每次一个leader被选出来,它都会有一个新的epoch,标识当前属于那个leader的统治时期。低32位用于递增计数。
每个Server在工作过程中有三种状态:
LOOKING:当前Server不知道leader是谁,正在搜寻
LEADING:当前Server即为选举出来的leader
FOLLOWING:leader已经选举出来,当前Server与之同步
环境:
192.9.200.130 192.9.200.159 192.9.200.160
解压及安装:
zookeeper下载地址:http://mirror.bit.edu.cn/apache/zookeeper/
我下载的是zookeeper-3.5.3
将zookeeper压缩包复制到linux下。
1、解压:
tar -xvf zookeeper-3.53.tar.gz(注意:解压的时候参数不要用zxf,要用xvf)
2、将解压后的zookeeper移动到/usr/local/目录下。
mv zookeeper-3.5.3 /usr/local/
3、修改名称
mv zookeeper-3.53 zookeeper
4、复制zookeeper/conf/zoo_sample.cfg为zoo.cfg
cp zoo_sample.cfg zoo.cfg
5、修改zoo.cfg
vi zoo.cfg
1)、修改dataDir=/usr/local/zookeeper/data
2)、添加dataLogDir=/usr/local/zookeeper/log
3)、最后面添加
server.1=192.9.200.130:2888:3888
server.2=192.9.200.159:2888:3888
server.3=192.9.200.160:2888:3888
解释:ip地址:心跳端口:服务端口
6、在zookeeper目录下新建data和log目录
mkdir data mkdir log
7、在data目录下新建myid文件
touch myid (第1个服务器的myid为1,第2个为2,第3个为3. 分别对应server.1、server.2、server.3)
3台服务器以上步骤都相同。
=======================我是一条华丽的分割线===============================
8、分别启动3台服务器。
1)、进入zookeeper/bin目录
./zkServer.sh start
2)、查看启动是否成功,三台服务器会选择一台作为leader,另外两台作为follower
./zkServer.sh status
9、OK,集群搭建成功。
注意事项:
1、需要关闭防火墙。
2、当我们启动第一个zookeeper的时候,查看状态会出现
查看zookeeper/logs/zookeeper.out日志,发现另外两个服务器拒绝链接,这是因为另外两个服务器zookeeper没有启动,不用管,然后启动另外两个服务器,之后将第一个服务器重启下就可以。