一、zookeeper的基本功能和应用场景



二、zookeeper的整体运行机制



三、数据存储形式

zookeeper中对用户的数据采用kv形式存储,只是zk有点特别。 key:是以路径的形式表示的,那就以为着,各key之间有父子关系,比如

/ 是顶层key

用户建的key只能在/ 下作为子节点,比如建一个key: /aa 这个key可以带value数据

也可以建一个key: /bb

也可以建key: /aa/xx

zookeeper中,对每一个数据key,称作一个znode

综上所述,zk中的数据存储形式如下:



四、znode类型

zookeeper中的znode有多种类型:

1、PERSISTENT 持久的:创建者就算跟集群断开联系,该类节点也会持久存在与zk集群中

2、EPHEMERAL 短暂的:创建者一旦跟集群断开联系,zk就会将这个节点删除

3、SEQUENTIAL 带序号的:这类节点,zk会自动拼接上一个序号,而且序号是递增的

组合类型:

PERSISTENT :持久不带序号

EPHEMERAL :短暂不带序号

PERSISTENT 且 SEQUENTIAL :持久且带序号

EPHEMERAL 且 SEQUENTIAL :短暂且带序号

五、zookeeper的集群部署

1、上传安装包到集群服务器
2、解压
3、修改配置文件
进入zookeeper的安装目录的conf目录
cp zoo_sample.cfg zoo.cfg
vi zoo.cfg
***********************
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/root/zkdata
clientPort=2181
server.1=hdp20-01:2888:3888
server.2=hdp20-02:2888:3888
server.3=hdp20-03:2888:3888
***********************
对3台节点,都创建目录 mkdir /root/zkdata
对3台节点,在工作目录中生成myid文件,但内容要分别为各自的id: 1,2,3
hdp20-01上:  echo 1 > /root/zkdata/myid
hdp20-02上:  echo 2 > /root/zkdata/myid
hdp20-03上:  echo 3 > /root/zkdata/myid

4、从hdp20-01上scp安装目录到其他两个节点
scp -r zookeeper-3.4.6/ hdp20-02:$PWD
scp -r zookeeper-3.4.6/ hdp20-03:$PWD

5、启动zookeeper集群
zookeeper没有提供自动批量启动脚本,需要手动一台一台地起zookeeper进程
在每一台节点上,运行命令:
bin/zkServer.sh start
启动后,用jps应该能看到一个进程:QuorumPeerMain

但是,光有进程不代表zk已经正常服务,需要用命令检查状态:
bin/zkServer.sh status
能看到角色模式:为leader或follower,即正常了。
*********************************************
想要用zkClient链接zookeeper,首先执行如下命令,连接到zookeeper server
命令:./zkCli.sh -server localhost:2181 或者:zkCli.sh start

脚本一键启动:
#! /bin/bash

for host in hadoop2 hadoop3 hadoop4
do
echo "${host}:${1}ing....."
ssh $host "source /etc/profile;/usr/local/zookeeper/zookeeper-3.4.10/bin/zkServer.sh $1"
done

复制代码

六、数据管理功能:

创建节点: create /aaa 'ppppp'

查看节点下的子节点: ls /aaa

获取节点的value: get /aaa

修改节点的value: set /aaa 'mmmmm'

删除节点:rmr /aaa

七、数据监听功能:

ls /aaa watch

查看/aaa的子节点的同时,注册了一个监听“节点的子节点变化事件”的监听器

get /aaa watch

获取/aaa的value的同时,注册了一个监听“节点value变化事件”的监听器

注意:注册的监听器在正常收到一次所监听的事件后,就失效

八、Zookeeper的API





九、集群部署角色

leader

  • 1.恢复数据
  • 维持与Learner的心跳
  • 接收Learner写请求
  • 接收Client的读写请求

Follower

  • 1.向leader发送请求
  • 接收Leader消息并进行处理
  • 接收Client的请求,如果为写请求,发送给Leader进行投票。

十、Zookeeper特性

  • 1.简单(精简的文件系统,简单的文件操作:排序和通知)
  • 2.易表达
  • 3.高可用性
  • 4.松耦合交互
  • 5.丰富的API

十一、Zookeeper使用场景

1.配置管理

2.负载均衡

3.分布式独占锁

4.分布式读写锁

5.分布式队列-FIFO

6.分布式队列-SyncQueue

7.集群管理

一键启动Zookeeper,一键查看状态
#! /bin/bash
ZOOKEEPER_HOME=/usr/local/zookeeper

if [ $ZOOKEEPER_HOME != "" ]; then
    ZOOCFG=$ZOOKEEPER_HOME/conf/zoo.cfg
    SLAVES=$(cat $ZOOCFG | sed '/^server/!d;s/^.*=//;s/:.*$//g;/^$/d')
    for s in $SLAVES
     do
      echo "INFO:starting zookeeper on ${s}"
      ssh $s "source /etc/profile;$ZOOKEEPER_HOME/bin/zkServer.sh $1"
      if [ $? != 0];
                then
                echo "Can not starting zookeeper server on host $s"
                exit 1
      fi
     done
fi
复制代码

十二、Zookeeper实现HA



十三、单点故障问题