Hadoop ----- Zookeeper安装及介绍

Zookeeper介绍

  • 是一个分布式的,开放源码的分布式应用程序协调服务

  • 是用来保证数据在集群键的事务一致性

Zookeeper 应用场景

  • 集群分布式锁

  • 集群统一命名服务

  • 分布式协调服务

Zookeeper 角色与特性

  • leader

接受所有follower 的提案请求并统一协调发起天的投票,负责与所有的follower进行内部的数据交换

  • follower

直接为客户端服务并参与提案的投票,同时与leader进行数据交换

  • observer

直接为客户端服务但并不参与提案的投票,同时也与leader进行数据交换

Zookeeper角色选举

  • 服务在启动的时候是没有角色的(looking)

  • 角色通过选举产生

  • 选举产生一个leader,剩下的是follower

选举leader原则

  • 集群中超过半数机器投票选择leader

  • 假如集群中拥有N台服务器,那么leader必须得到 n/2 +1 台服务器投票

  • 如果leader死亡,从新选举leader

  • 如果死亡的机器数量到达一般,集群挂起

  • 如果无法得到足够的投票数量,就重新发起投票,如果参与投票的机器不足 n/2+1 集群停止工作

  • 如果follower 死亡过多,剩余机器不足 n/2+1 集群也会停止工作

  • observer 不计算在投票设备数量内

Zookeeper 可伸缩扩展性原理

  • 客户端提交一个请求,若是读请求,则由每台server的本地副本数据库直接响应,若是写请求,
    若是写请求,需要通过一致性协议(Zab)来处理

    • Zab协议规定:
  • 来自客户端的所有写请求,都要转发给zookeeper服务器中唯一的leader,有leader根据该请求发起一个
    Proposal,然后其他的server对该Proposal进行Vote,之后leader会向所有的server发送一个通知消息,
    最后当客户端所连接的server收到该消息时,会把该操作更新到内存中并对客户端的写请求做出回应

  • zppkeeper服务器在协议里扮演两个职能,它们一方面从客户端接受连接与操作请求,另一方面对操作结果进行投票,
    这两个职能在zookeeper集群扩展的时候彼此制约。

  • 从Zab协议对写请求的处理过程中可以发现,增加follower的数量,则增加了对协议中投票过程的压力。
    因为leader节点必须等待集群中过半server响应投票,于是节点的增加使部分计算机运行较慢,从而
    拖慢整个投票过程的可能性夜随之提高,随着集群变大,写操也会随之下降。

  • 所以引入了不参与投票的服务器Observer,Observer可以接受客户端的连接,并将写请求转发给leader节点,
    但是leader节点不会要求Observer参加投票。相反Observer不参与投票过程,仅和其他服务节点一起得到投票结果

  • Observer的扩展,给Zookeeper的可伸缩性带来了全新的景象,我们可以加入很多Observer节点,而无须担心
    影响吞吐量。但他并非是无懈可击,因为协议中的通知阶段,仍然会与服务器数量呈现线性关系,

  • Observer 提升读性能的可伸缩性

  • Observer 提供了广域网能力

Zookeeper安装

1)编辑/etc/hosts ,所有集群主机可以相互 ping 通(在nn01上面配置,同步到node1,node2,node3)

[root@nn01 hadoop]# vim /etc/hosts
192.168.1.21  nn01
192.168.1.22  node1
192.168.1.23  node2
192.168.1.24  node3
192.168.1.25  node4

[root@nn01 hadoop]# for i in {22..24}
do  
scp /etc/hosts 192.168.1.$i:/etc/ 
done        //同步配置

2)安装 java-1.8.0-openjdk-devel,由于之前的hadoop上面已经安装过,这里不再安装,若是新机器要安装

3)zookeeper 解压拷贝到 /usr/local/zookeeper

[root@nn01 ~]# tar -xf zookeeper-3.4.10.tar.gz 
[root@nn01 ~]# mv zookeeper-3.4.10 /usr/local/zookeeper

4)配置文件改名,并在最后添加配置

[root@nn01 ~]# cd /usr/local/zookeeper/conf/
[root@nn01 conf]# ls
configuration.xsl  log4j.properties  zoo_sample.cfg
[root@nn01 conf]# mv zoo_sample.cfg  zoo.cfg
[root@nn01 conf]# chown root.root zoo.cfg
[root@nn01 conf]# vim zoo.cfg
server.1=node1:2888:3888
server.2=node2:2888:3888
server.3=node3:2888:3888
server.4=nn01:2888:3888:observer

5)拷贝 /usr/local/zookeeper 到其他集群主机

[root@nn01 conf]# for i in {22..24}; do rsync -aSH --delete /usr/local/zookeeper/ 192.168.1.$i:/usr/local/zookeeper  -e 'ssh' & done
[4] 4956
[5] 4957
[6] 4958

6)创建 mkdir /tmp/zookeeper,每一台都要

[root@nn01 conf]# mkdir /tmp/zookeeper
[root@nn01 conf]# ssh node1 mkdir /tmp/zookeeper
[root@nn01 conf]# ssh node2 mkdir /tmp/zookeeper
[root@nn01 conf]# ssh node3 mkdir /tmp/zookeeper

7)创建 myid 文件,id 必须与配置文件里主机名对应的 server.(id) 一致

[root@nn01 conf]# echo 4 >/tmp/zookeeper/myid
[root@nn01 conf]# ssh node1 'echo 1 >/tmp/zookeeper/myid'
[root@nn01 conf]# ssh node2 'echo 2 >/tmp/zookeeper/myid'
[root@nn01 conf]# ssh node3 'echo 3 >/tmp/zookeeper/myid'

8)启动服务,单启动一台无法查看状态,需要启动全部集群以后才能查看状态,每一台上面都要手工启动(以nn01为例子)

[root@nn01 conf]# /usr/local/zookeeper/bin/zkServer.sh start

注意:刚启动zookeeper查看状态的时候报错,启动的数量要保证半数以上,这时再去看就成功了

9)查看状态

[root@nn01 conf]# /usr/local/zookeeper/bin/zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /usr/local/zookeeper/bin/../conf/zoo.cfg
Mode: observe

[root@nn01 conf]# /usr/local/zookeeper/bin/zkServer.sh stop  
//关闭之后查看状态其他服务器的角色

[root@nn01 conf]# yum -y install telnet
[root@nn01 conf]# telnet node3 2181 
Trying 192.168.1.24...
Connected to node3.
Escape character is '^]'.
ruok        //发送
imokConnection closed by foreign host.        //imok回应的结果

10)利用 api 查看状态(nn01上面操作)

[root@nn01 conf]# /usr/local/zookeeper/bin/zkServer.sh start
[root@nn01 conf]# vim api.sh
#!/bin/bash
function getstatus(){
    exec 9<>/dev/tcp/$1/2181 2>/dev/null
    echo stat >&9
    MODE=$(cat <&9 |grep -Po "(?<=Mode:).*")
    exec 9<&-
    echo ${MODE:-NULL}
}
for i in node{1..3} nn01;do
    echo -ne "${i}\t"
    getstatus ${i}
done


[root@nn01 conf]# chmod 755 api.sh
[root@nn01 conf]# ./api.sh 
node1    follower
node2    leader
node3    follower 
nn01    observer
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值