zookeeper

zookeeper

简介

Zookeeper是一个分布式开源框架,提供了协调分布式应用的基本服务,它向外部应用暴露一组通用服务——分布式同步(Distributed Synchronization)、命名服务(Naming Service)、集群维护(Group Maintenance)等,简化分布式应用协调及其管理的难度,提供高性能的分布式服务。ZooKeeper本身可以以单机模式安装运行,不过它的长处在于通过分布式ZooKeeper集群(一个Leader,多个Follower),基于一定的策略来保证ZooKeeper集群的稳定性和可用性,从而实现分布式应用的可靠性。

组成

  • znode
  • 原语
  • watcher机制

节点(Znode)

节点类型

  • 临时节点(ephemeral): 依赖于会话,会话结束,临时节点被自动删除; 没有子节点;
  • 永久节点(persistent): 不依赖于会话, 需显式删除;
  • 顺序节点(sequential): 节点创建时,在末尾添加一个递增计数,该计数对父节点唯一;

节点属性

会话(Session)

监视(Watches)

操作

  • create
  • delete
  • exists
  • getACL/setACL
  • getChildren
  • getData/setData
  • sync

leader选举算法

  • 所有节点都创建相同路径的顺序临时node;
  • 创建序号最小的node的节点成为leader, 其他节点成为follower;
  • follower节点监视下一个最小序号的znode, 例如: 8 -> 7;
  • 若leader关闭, leader节点创建的znode将会被删除;
  • 下一个节点获取leader的移除通知, 检查是否存在其他更小的znode, 若无, 这成为leader; 否则, 该最小znode节点成为leader;
  • 其他节点遵循同样算法;

应用

  • 分布式锁:
  • 统一命名服务:
  • 配置管理:
  • 集群管理:
  • 队列服务:
    • 同步队列
    • FIFO队列

安装

  1. 下载:http://www.apache.org/dyn/closer.cgi/zookeeper/

    1
    2
    3
    
    tar xf zookeeper-3.4.10.tar.gz
    cd zookeeper-3.4.10
    cp conf/zoo_sample.cfg conf/zoo.cfg
    

    Zoo.cfg 文件配置如下:

    1
    2
    3
    4
    
    dataDir=/data/zookeeper/
    server.1=note1:2888:3888
    server.2=note2:2888:3888
    server.3=note3:2888:3888
    
  2. 个节点分别设置myid

    1
    2
    
    $ mkdir -p /data/zookeeper
    $ echo "1" > /data/zookeeper/data/myid
    

操作

  • 启动:

    1
    2
    3
    4
    
    $ bin/zkServer.sh start          # 启动当前节点
    $ bin/zkServer.sh status      # 查看节点状态
    $ bin/zkServer.sh stop        # 停止当前节点
    $ bin/zkCli.sh                # 启动命令行客户端
    
updatedupdated2024-05-152024-05-15