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成为了备点
- ZooKeeper集群
- Zookeeper 集群
- Zookeeper 集群
- Zookeeper集群
- ZooKeeper集群
- Zookeeper集群
- zookeeper集群
- zookeeper集群
- ZooKeeper集群
- zookeeper集群
- zookeeper集群
- Zookeeper集群
- zookeeper 集群
- ZooKeeper集群
- zookeeper(3) zookeeper集群搭建
- Zookeeper 介绍 Zookeeper 搭建 Zookeeper 集群搭建
- HBase集群+Zookeeper集群安装
- Zookeeper集群和伪集群
- [LeetCode]Best Time to Buy and Sell Stock
- 你再优秀也有人对你不屑一顾,再不堪也有人把你视若生命
- Win7 64位下TortoiseSVN的文件夹及文件SVN图标不显示正确解决方法
- POJ3481 Double Queue (Splay)
- Android 最新获取手机内置存储大小,SD卡存储空间大小方法
- ZooKeeper集群
- 代际垃圾回收器的一种快速Write Barrier算法
- 实现谷歌商店商品列表的每个item的背景效果(底部下划线以及底部阴影的效果)
- sql中的DML与DDL
- MATLAB报错:MTIMES is not fully supported for integer classes. At least one input must be scalar.
- spark on yarn运行产生缺jar包错误及解决办法
- Windows下各种类型的守护进程的写法
- Fund Management - POJ 3570 dp
- 基于Linux内核的应用程序构造(二)——应用程序编译