ZooKeeper集群

来源:互联网 发布:网络运维解决方案 编辑:程序博客网 时间:2024/05/16 06:42

一、Zookeeper简介

来自百度百科:http://baike.baidu.com/link?url=a0QyhqJwReTYbyWvoq6CvGQmRDcFAnX797Ehb8dllJUtzMADQDuSJvSr2Uyq6Odbx7dgGvHAKRYS62UiBtENLa

ZooKeeper是Hadoop的正式子项目,它是一个针对大型分布式系统的可靠协调系统,提供的功能包括:配置维护、名字服务、分布式同步、组服务等。ZooKeeper的目标就是封装好复杂易出错的关键服务,将简单易用的接口和性能高效、功能稳定的系统提供给用户。

Zookeeper是Google的Chubby一个开源的实现,是高有效和可靠的协同工作系统,Zookeeper能够用来leader选举,配置信息维护等,在一个分布式的环境中,需要一个Master实例或存储一些配置信息,确保文件写入的一致性等.[1]

ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,包含一个简单的原语集,是Hadoop和Hbase的重要组件。[2] 提供Java和C的接口。

ZooKeeper代码版本中,提供了分布式独享锁、选举、队列的接口,代码在zookeeper-3.4.3\src\recipes。其中分布锁和队列有Java和C两个版本,选举只有Java版本。

二、Zookeeper原理

来自百度百科:http://baike.baidu.com/link?url=a0QyhqJwReTYbyWvoq6CvGQmRDcFAnX797Ehb8dllJUtzMADQDuSJvSr2Uyq6Odbx7dgGvHAKRYS62UiBtENLa

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

ZooKeeper的基本运转流程:

1、选举Leader。

2、同步数据。

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

4、Leader要具有最高的zxid。

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

三、Zookeeper集群

1.安装JDK1.6

详情请看:Redhat中安装JDK

2.下载Zookeeper

[root@localhost softwares]# wget http://mirrors.cnnic.cn/apache/zookeeper/zookeeper-3.4.6/zookeeper-3.4.6.tar.gz

3.安装Zookeeper

解压Zookeeper

[root@localhost softwares]# tar -zxvf zookeeper-3.4.6.tar.gz 

4.生成3个Zookeeper的集群

(1)修改文件夹名称

[root@localhost softwares]# mv zookeeper-3.4.6 zookeeper-3.4.6_slave01

(2)生成另外两个Zookeeper

[root@localhost softwares]# cp -r zookeeper-3.4.6_slave01 zookeeper-3.4.6_slave02[root@localhost softwares]# cp -r zookeeper-3.4.6_slave01 zookeeper-3.4.6_slave03

(3)生成配置文件

[root@localhost conf]# cp zoo_sample.cfg zoo.cfg

slave01,slave02,slave03中zoo.cfg的内容分别如下:

tickTime=2000initLimit=10syncLimit=5dataDir=/softwares/zookeeper-3.4.6_slave01/dataclientPort=2181server.1=zookeeper_slave_01:2887:3887server.2=zookeeper_slave_02:2888:3888server.3=zookeeper_slave_03:2889:3889
tickTime=2000initLimit=10syncLimit=5dataDir=/softwares/zookeeper-3.4.6_slave02/dataclientPort=2182server.1=zookeeper_slave_01:2887:3887server.2=zookeeper_slave_02:2888:3888server.3=zookeeper_slave_03:2889:3889
tickTime=2000initLimit=10syncLimit=5dataDir=/softwares/zookeeper-3.4.6_slave03/dataclientPort=2183server.1=zookeeper_slave_01:2887:3887server.2=zookeeper_slave_02:2888:3888server.3=zookeeper_slave_03:2889:3889

5.配置hosts

[root@localhost conf]# more /etc/hosts192.168.74.129  zookeeper_slave_01192.168.74.129  zookeeper_slave_02192.168.74.129  zookeeper_slave_03

6.配置数据文件

在zookeeper-3.4.6_slave01、zookeeper-3.4.6_slave01、zookeeper-3.4.6_slave01中分别新建文件夹data,并在里面新建文件myid,myid里面的内容分别zoo.cfg server.*中的*号的值。比如zookeeper-3.4.6_slave01中myid的值是1,比如zookeeper-3.4.6_slave02中myid的值是2,比如zookeeper-3.4.6_slave03中myid的值是3。

zookeeper-3.4.6_slave01/data/myid

zookeeper-3.4.6_slave02/data/myid

zookeeper-3.4.6_slave03/data/myid

7.启动Zookeeper

[root@localhost bin]# ./zkServer.sh startJMX enabled by defaultUsing config: /softwares/zookeeper-3.4.6_slave01/bin/../conf/zoo.cfgStarting zookeeper ... STARTED
[root@localhost bin]# ./zkServer.sh startJMX enabled by defaultUsing config: /softwares/zookeeper-3.4.6_slave02/bin/../conf/zoo.cfgStarting zookeeper ... STARTED
[root@localhost bin]# ./zkServer.sh startJMX enabled by defaultUsing config: /softwares/zookeeper-3.4.6_slave03/bin/../conf/zoo.cfgStarting zookeeper ... STARTED

8.查看Zookeeper的状态

[root@localhost bin]# ./zkServer.sh statusJMX enabled by defaultUsing config: /softwares/zookeeper-3.4.6_slave01/bin/../conf/zoo.cfgMode: follower[root@localhost bin]# 
[root@localhost bin]# ./zkServer.sh statusJMX enabled by defaultUsing config: /softwares/zookeeper-3.4.6_slave02/bin/../conf/zoo.cfgMode: leader
[root@localhost bin]# ./zkServer.sh statusJMX enabled by defaultUsing config: /softwares/zookeeper-3.4.6_slave03/bin/../conf/zoo.cfgMode: follower

可以看出,slave02成为了主点,slave01、slave03成为了备点。

9.ZooKeeper测试

当主点挂掉时,就会选举slave02或slave03为主点,如果集群中挂掉的节点超过(n-1)/2,那么整个集群将会挂掉,也就是说,三个节点的集群如果挂掉两个,集群就会挂掉。

测试步骤如下:

(1)当前主点是slave02

[root@localhost bin]# ./zkServer.sh statusJMX enabled by defaultUsing config: /softwares/zookeeper-3.4.6_slave02/bin/../conf/zoo.cfgMode: leader

(2)关闭slave02

[root@localhost bin]# ./zkServer.sh stopJMX enabled by defaultUsing config: /softwares/zookeeper-3.4.6_slave02/bin/../conf/zoo.cfgStopping zookeeper ... STOPPED[root@localhost bin]# ./zkServer.sh statusJMX enabled by defaultUsing config: /softwares/zookeeper-3.4.6_slave02/bin/../conf/zoo.cfgError contacting service. It is probably not running.

(3)查看slave01和slave03的状态

[root@localhost bin]# ./zkServer.sh statusJMX enabled by defaultUsing config: /softwares/zookeeper-3.4.6_slave01/bin/../conf/zoo.cfgMode: follower
[root@localhost bin]# ./zkServer.sh statusJMX enabled by defaultUsing config: /softwares/zookeeper-3.4.6_slave03/bin/../conf/zoo.cfgMode: leader

发现slave01还是备点,slave03成为了主点

(4)再次挂掉主点slave03

[root@localhost bin]# ./zkServer.sh stopJMX enabled by defaultUsing config: /softwares/zookeeper-3.4.6_slave03/bin/../conf/zoo.cfgStopping zookeeper ... STOPPED[root@localhost bin]# ./zkServer.sh statusJMX enabled by defaultUsing config: /softwares/zookeeper-3.4.6_slave03/bin/../conf/zoo.cfgError contacting service. It is probably not running.

(5)查看节点slave01的状态

[root@localhost bin]# ./zkServer.sh statusJMX enabled by defaultUsing config: /softwares/zookeeper-3.4.6_slave01/bin/../conf/zoo.cfgError contacting service. It is probably not running.

发现slave01也挂掉,整个集群都挂掉。
(6)再次启动slave02

[root@localhost bin]# ./zkServer.sh startJMX enabled by defaultUsing config: /softwares/zookeeper-3.4.6_slave02/bin/../conf/zoo.cfgStarting zookeeper ... STARTED

(7)查看节点状态

[root@localhost bin]# ./zkServer.sh statusJMX enabled by defaultUsing config: /softwares/zookeeper-3.4.6_slave01/bin/../conf/zoo.cfgMode: leader
[root@localhost bin]# ./zkServer.sh statusJMX enabled by defaultUsing config: /softwares/zookeeper-3.4.6_slave02/bin/../conf/zoo.cfgMode: follower

发现slave01成为了主点,slave02成为了备点




 

0 0
原创粉丝点击