zookeeper

zookeeper简介

  • zookeeper 动物管理员

    apache zookeeper致力于开发和维护开源服务器,实现高度可靠的分布式协调

  • 什么是zookeeper

    zookeeper是一种集中式服务,用于维护配置信息,命名,提供分布式同步和提供组服务。所有这些类型的服务都以分布式应用程序的某种形式使用,每次实施他们都需要做很多工作来修复不可避免的错误和竞争条件。由于难以实现这些类型的服务,应用程序最初通常会吝啬他们,这使得他们在变化的情况下变得脆弱并且难以管理。即使正确完成,这些服务的不同实现也会在部署应用程序时导致管理复杂性。

zookeeper功能

  • 1)存储数据:存储集群中每台机器都关心的数据(配置信息),需要接受服务器的注册
  • 2)监听

zookeeper工作机制

  • 基于观察者模式设计的分布式服务管理框架
  • 1)启动服务器,首先向zookeeper中注册信息,创建临时节点(通过目录结构/servers/)
  • 2)获取服务器列表并且注册监听(当服务器下线,在zookeeper中对应服务器节点将会消失)
  • 3)当服务器宕机,zookeeper将会通过监听功能(process(){}回调方法)向zookeeper发送下线通知
  • 4)监听功能重新获取服务器列表并再次进行监听

zookeeper的存储结构(目录树存储结构)

  • / ——–> 根目录(根目录下可以有多个节点)
  • z1、z2 ——–> 节点目录(Znode,默认存储1M数据)
  • /z1/zz1 、 /z1/zz2 、 /z2/zz1

应用场景

  • 1)集群同一配置管理
  • 2)集群同一命名服务
  • 3)集群统一管理
  • 4)服务器的动态上下线感知
  • 5)负载均衡

zookeeper集群安装

  • 单节点安装

    1)解压安装包
    2)重命名zookeeper/conf/zoo_sample.cfg 为 zoo.cfg
    3)修改zoo.cfg配置文件中的dataDir参数为自定义路径
    4)启动zk:bin/zkServer.sh start
    5)查看状态:bin/zkServer.sh status
    6)启动客户端:bin/zkCli.sh

  • 全分布安装
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    1)zoo.cfg:
    server.1=RedHat112:2888:3888
    server.2=RedHat113:2888:3888
    server.3=RedHat114:2888:3888

    2)在自定义dataDir路径下创建myid文件,并设置id
    myid:
    1

    3)配置环境变量

    4)将环境变量和zookeeper发送到其他服务器
    scp -zxvf -r zookeeper RedHat113:zookeeper
    scp -zxvf -r zookeeper RedHat114:zookeeper

    5)修改其他服务器myid

    6)生效环境变量

zookeeper操作

  • 启动shell客户端:zkCli.sh
  • zk:操作日志
  • ls path [watch]:查看path节点所包含的内容[监听]
  • ls2 path [watch]:查看path节点的详细信息[监听]
  • gat path [watch]:查看path节点所存储的数据

    get path watch:监听节点值;get path watch:监听路径
    cZxid:事务id,每次创建都以时间戳的形式产生唯一的Zxid
    ctime:节点创建时间
    mZxid:节点最后修改的时间戳id
    mtime:节点最后修改的时间
    pZxid:节点最后更新的子节点时间戳id
    cversion:节点修改次数
    dataVersion:节点数据的变化号
    dataLength:数据长度
    numChild:子节点数

  • stat path:查看节点的状态信息
  • set path acl:更改path节点中的数据
  • create [-s] [-e] path data acl:创建路径,data为创建目录节点所存储的数据,acl为应答类型,[-s]带序号的节点,[-e]短暂节点
  • delete path:删除节点(不能删除带有子节点的节点)
  • rmr path:递归删除

zookeeper选举机制

  • 当ZK1服务器启动时,先给自己投一票,ZK1作为follower
  • 当ZK2服务器启动时,给自己投一票的同时,ZK1也会给ZK2投一票,票数占半数以上,ZK2作为leader
  • 当ZK3服务器启动时,给自己投一票,此时发现已经存在leader,ZK3作为follower

注意事项

  • 只要有半数以上的节点存活,就能够正常工作(zk集群要求配置奇数台)