hadoop生态之zookeeper安装配置(一)
ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Hadoop和Hbase的重要组件。它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务等。
ZooKeeper的目标就是封装好复杂易出错的关键服务,将简单易用的接口和性能高效、功能稳定的系统提供给用户。
Zookeeper架构图:
Zookeeper特点:
- 顺序一致性:从同一客户端发起的事务请求,最终将会严格地按照顺序被应用到 ZooKeeper 中去。
- 原子性:所有事务请求的处理结果在整个集群中所有机器上的应用情况是一致的,也就是说,要么整个集群中所有的机器都成功应用了某一个事务,要么都没有应用。
- 单一系统映像:无论客户端连到哪一个 ZooKeeper 服务器上,其看到的服务端数据模型都是一致的。
- 可靠性:一旦一次更改请求被应用,更改的结果就会被持久化,直到被下一次更改覆盖。
Zookeeper应用场景:
统一命名服务
分布式配置管理
分布式消息队列
分布式锁
分布式协调服务
Zookeeper集群角色:
server leader 领导者
server follower 追随者
Observer 观察者
ZooKeeper的基本运转流程:
1、选举Leader(集群搭建最好是:2n + 1奇数台服务器,便于leader选举)
2、同步数据。
3、选举Leader过程中算法有很多,但要达到的选举标准是一致的。
4、Leader要具有最高的执行ID,类似root权限。
5、集群中大多数的机器得到响应并接受选出的Leader。
Zookeeper工作原理:
Zookeeper的核心是原子广播,这个机制保证了各个server之间的同步。实现这个机制的协议叫做Zab协议。Zab协议有两种模式,它们分别是恢复模式和广播模式。当服务启动或者再领导者崩溃后,Zab就进入了恢复模式,当领导者被选举出来,且大多数server的完成了和leader的状态同步以后,恢复模式就结束了。状态同步保证了leader和server具体有相同的系统状态。
一旦leader已经和多数的follower进行了状态同步后,他就可以开始广播消息了,即进入广播状态。这时候当一个server加入zookeeper服务中,它会在恢复模式下启动,发现leader,并和leader进行状态同步。待到同步结束,它也参与消息广播。zookeeper服务一直维持在Broadcast状态,直到leader崩溃了或者leader失去了大部分的followers的支持。
广播模式需要保证proposal被按顺序处理,因此zk采用了递增的事务id号(zxid)来保证。所有的提议proposal都在被提出的时候加上了zxid。实现中zxid是一个64位的数字,它搞32位是epoch用来标识leader关系是否改变,每一次一个leader被选出来,它都会有一个新的epoch。低32位是个递增计数。
当leader崩溃或者leader失去大多数的follower,这时候zk进入恢复模式,恢复模式需要重新选举出一个新的leader,让所有的server都恢复到一个正确的状态。
Zookeeper安装配置:
1.下载zookeeper安装包,选择需要的版本zookeeper-3.4.9.tar.gz,链接地址:http://archive.apache.org/dist/zookeeper
2.把安装包上传到Centos服务器的指定的目录,例如:/opt/mysoft/目录
3.解压zookeeper-3.4.9.tar.gz 并且重命名
tar -zxvf zookeeper-3.4.9.tar.gz
rm zookeeper-3.4.9 zookeeper
4.配置环境变量:/etc/profile
命令:vi /etc/profile
添加如下内容:
export ZOOKEEPER=/opt/mysoft/zookeeper
export PATH=$PATH:$JAVA_HOME/bin:$ZOOKEEPER/bin:$PATH
使配置文件生效:source /etc/profile
5.配置zookeeper
创建每台 zookeeper的myid
cd /opt/mysoft/zookeeper
mkdir data(用来存放数据,下面配置文件引用)
mkdir logs (用来存放日志,下面配置文件引用)
cd data
vi myid
第一台服务器输入 1,第二台服务器输入 2 以此类推……(myid文件中的编号每台唯一)
wq!保存文件
配置zoo.cfg文件:
cd /opt/zookeeper/conf
mv zoo_sample.cfg zoo.cfg
vi zoo.cfg
添加数据和日志目录及服务器ip配置信息:
将配置好的zookeeper复制到集群服务器上:
命令:scp -r /opt/mysoft/zookeeper 主机名2:/opt/mysoft
scp -r /opt/mysoft/zookeeper 主机名3:/opt/mysoft
登录到主机名2的服务器,修改主机名2的myid:
vi /opt/mysoft/zookeeper/data/myid
1修改为2
登录到主机名3的服务器,修改主机名3的myid
vi /opt/mysoft/zookeeper/data/myid
1修改为3
拷贝主机名1上面的profile文件到主机名2和主机名三服务器上:
scp /etc/profile 主机名2:/etc/
scp /etc/profile 主机名3:/etc/
登录主机名2使配置文件生效:source /etc/profile
登录主机名3使配置文件生效:source /etc/profile
验证zookeeper是否配置成功:
分别登录每一台机器执行命令:zkServer.sh start
然后执行:zkServer.sh status 后,若有一个leader 其它为follower则表明zookeeper集群安装和配置成功。
关闭zookeeper:
依次登陆每台服务器,临时关闭zookeeper服务
zkServer.sh stop