我有一壶酒,足以慰平生。

0%

zookeeper

Zookeeper

概念

Zookeeper是一个开源的分布式的,为分布式应用提供协调服务的Apache项目。

Zookeeper从设计模式角度来理解:是一个基于观察者模式设计的分布式服务管理框架,它负责存储和管理大家都关心的数据,然后接受观察者的注册,一旦这些数据的状态发生变化,Zookeeper就将负责通知已经在Zookeeper上注册的那些观察者做出相应的反应,从而实现集群中类似Master/Slave管理模式。

==Zookeeper=文件系统+通知机制==

特点

1)Zookeeper:一个领导者(leader),多个跟随者(follower)组成的集群。

2)Leader负责进行投票的发起和决议,更新系统状态。

3)Follower用于接收客户请求并向客户端返回结果,在选举Leader过程中参与投票。

4)集群中只要有半数以上节点存活,Zookeeper集群就能正常服务。

5)全局数据一致:每个server保存一份相同的数据副本,client无论连接到哪个server,数据都是一致的。

6)更新请求顺序进行,来自同一个client的更新请求按其发送顺序依次执行。

7)数据更新原子性,一次数据更新要么成功,要么失败。

8)实时性,在一定时间范围内,client能读到最新数据。

数据结构

ZooKeeper数据模型的结构与Unix文件系统很类似,整体上可以看作是一棵树,每个节点称做一个ZNode。

很显然zookeeper集群自身维护了一套数据结构。这个存储结构是一个树形结构,其上的每一个节点,我们称之为”znode”,每一个znode默认能够存储1MB的数据,每个ZNode都可以通过其路径唯一标识,如下图所示

image-20200719110643922

应用场景

提供的服务包括:分布式消息同步和协调机制、服务器节点动态上下线、统一配置管理、负载均衡、集群管理等,如下图所示。

配置管理:

img

软负载均衡:

img

集群管理:

img

Zookeeper安装

  1. 安装前准备

    • 安装jdk

    • 通过filezilla工具拷贝zookeeper到到linux系统下

    • 解压到指定目录

      1
      [root@hadoop01 ~]# tar -zxvf zookeeper-3.4.10.tar.gz -C /usr/local/
  2. 配置修改和环境变量

    将/usr/local/zookeeper-3.4.10/conf这个路径下的zoo_sample.cfg修改为zoo.cfg;

    进入zoo.cfg文件:vi zoo.cfg,修改dataDir路径为dataDir=/usr/local/zookeeper-3.4.10/zkData

    在/usr/local/zookeeper-3.4.10/这个目录上创建zkData文件夹

    1
    [root@hadoop01  zookeeper-3.4.10]# mkdir zkData
  3. 操作zookeeper

    • 启动zookeeper

      1
      [root@hadoop01  zookeeper-3.4.10]# zkServer.sh start

      三台服务器都得开。

    • 查看进程是否启动

      1
      2
      3
      4
      5
      6
      [root@hadoop01 ~]# jps
      2275 NameNode
      2451 SecondaryNameNode
      2629 ResourceManager
      3000 Jps
      2971 QuorumPeerMain //zookpeer 进程
    • 查看状态

      1
      [root@hadoop01  zookeeper-3.4.10]# zkServer.sh status

      根据选举机制可知第二个开启的服务器会被选为leader。

      如下图所示:

      image-20200719112115599

    • 启动客户端

      1
      [root@hadoop01  zookeeper-3.4.10]# bin/zkCli.sh
    • 退出客户端

      1
      [zk: localhost:2181(CONNECTED) 0] quit
    • 停止zookeeper

      1
      [root@hadoop01  zookeeper-3.4.10]# bin/zkServer.sh stop

zookeeper一键启动shell命令

  1. 创建sbin目录,写shell脚本,具体代码如下:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    #!/bin/sh
    echo "--------------------zookeeper集群启动----------------------"
    for host in hadoop01 hadoop02 hadoop03
    #固定搭配
    do
    #具体逻辑
    ssh $host "/usr/local/zookeeper-3.4.6/bin/zkServer.sh start"
    #输出提示
    echo "$host, 启动成功!!!"
    #结束
    done

    ssh 免密登陆集群中的服务器,到zookeeper的bin目录执行启动命令。

  2. 查看状态命令、停止命令同理。

  3. 配置sbin目录的环境变量。

    1
    2
    3
    vi /etc/profile

    source /etc/profile
  4. 修改zookeeper bin目录下的zkENV.sh

    在末行添加java环境。

    image-20200721102705409

  5. 测试

    • 启动

      image-20200721102336353

    • 状态

      image-20200721103104186

    • 停止

      image-20200721103121552

您的支持是我继续创作的动力