美文网首页
zookeeper 学习

zookeeper 学习

作者: 起司猫_0e99 | 来源:发表于2018-06-05 22:42 被阅读0次

    2018年6月5日22:40:04 这周内在进行整理

    初识 zookeeper

    • 什么是 zookeeper
      zookeeper 是一个开源的分布式协调服务,也是一个提供了分布式数据一致性解决方案的软件。
    • zookeeper 有哪些应用
      数据的发布/订阅(配置中心:disconf、apollo)、负载均衡、集群的 master 选举、分布式队列、分布式锁。
    • zookeeper 的特性
    1. 顺序一致性
      从客户端发送的请求,会严格按照顺序被应用到服务器端。
    2. 原子性
      事务在整个集群中所有机器的应用情况是一致的,要么所有机器都应用,要么所有机器都不应用。
    3. 可靠性
      一旦服务器对某个事务进行了处理,并做出了返回,那么将会在整个集群中进行同步。
    4. 实时性
      一旦事务在服务器端被应用,客户端能立刻从服务端读到数据的变更。(近实时性)

    zookeeper 安装

    ​ 前面说 zookeeper 是开源的软件,安装起来也非常简单,即开即用,解压后可以立即使用。

    安装步骤

    1. 下载 zookeeper

    2. 上传后进行解压,因为 zookeeper 是 java 编写的,所以我们需要优先安装 java 环境。

    3. 复制一份 zoo_sample.cfg 文件到 zoo.cfg

    4. 启动 zookeeper 服务端,并尝试通过自带的客户端访问服务端

      zkServer.sh {start|start-foreground|stop|restart|status|upgrade|print-cmd}

    zookeeper 集群

    ​ zookeeper 集群中有三种成员 leader/flower/(observer),一般系统较大的话,会配置 observer 服务器,observer 不参与集群中的投票及选举。

    搭建步骤

    1. 配置 myid
    2. 每台机器的 zoo.cfg 配置文件中加入 server.id=host:port1:port2 配置
    3. 重启服务

    zookeeper 数据模型

    ​ zookeeper 有两类节点,一类就存储时间而言,一类就存储规律而言。所以一共有四种节点,分别为下面的 4 种:

    1. 临时节点

      生命周期与客户端的会话保持一致,会话失效,节点自动清理

    2. 临时有序节点

      临时节点加上顺序的特性

    3. 持久化节点

      创建后一直存在于服务器上,直到主动清理

    4. 持久化有序节点

      持久化节点加上了有序的特性

    zookeeper Watcher 机制

    ​ zookeeper 允许客户端向服务器端注册一个 watcher 监听,当服务器端触发了指定事件后会触发 watcher,watcher 通知是一次性的,当服务器端对客户端通知后,watcher 就会失效。使用 watcher 机制可以做我们的配置中心,配置存放在 zookeeper 上,客户端向配置节点注册监听,当节点内容发生变化后,服务器端会对通知客户端,与此同时 watcher 也失效了。

    zookeeper ACL

    ​ zookeeper 提供了控制节点访问权限的功能,用于保证 zookeeper 中数据的安全性,避免错误操作带来的严重后果。

    ​ 权限控制分为三个维度:scheme id permission

    • scheme 授权策略

      1. digest 用户授权
      2. ip ip授权
      3. world 开放式
      4. super 超级用户
    • id 验证模式

    • permission 权限授权

      CREATE (c) / READ (r) / WRITE (w) / DELETE (d) / ADMIN (a)

    zookeeper 会话

    ​ zookeeper 客户端与服务端建立会话一般会有下面几种状态

    • NOT_CONNECTED
    • CONNECTING
    • CONNECTED
    • CLOSE

    zookeeper 操作命令

    ​ 下面有一些常用的命令

    1. create [-s] [-e] path data acl
    2. get path [watch]
    3. set path data [version]
    4. delete path [version]
    5. ls path [watch]
    6. stat path [watch]
    7. setAcl path acl
    8. getAcl path
    9. addauth scheme auth

    zookeeper API

    • zookeeper
    • zkClient
    • curator

    zookeeper 应用实现

    • 配置中心
    • 分布式队列
    • 分布式锁
    • 负载均衡
    • master 选举

    术语

    1. 中性化、去中心化
    2. 冷备、热备
    3. CAP、BASE 理论
    4. ACID

    附录

    zoo.cfg 配置解析

    # 心跳时间
    tickTime=2000 
    # 数据目录
    dataDir=/tmp/zookeeper 
    # server 端与 client 端通信的端口号
    clientPort=2181 
    # log 存放目录
    dataLogDir=/tmp/log/zookeeper 
    
    # 集群初始化连接时,follow 与 leader 之间的最长心跳时间
    initLimit=10 
    # leader 与 follower 之间的最长心跳时间
    syncLimit=5
    # 集群服务器配置
    server.id=host:port1:port2
    maxClientCnxns=60
    autopurge.snapRetainCount=3
    autopurge.purgeInterval=1
    

    stat 属性解析

    # 节点创建的事务ID
    cZxid = 0x30                        
    # 节点创建时间
    ctime = Fri May 25 19:03:21 CST 2018
    # 节点最后一次被更新的事务ID
    mZxid = 0x30                        
    # 节点最后一次的更新时间
    mtime = Fri May 25 19:03:21 CST 2018
    # 当前节点下的子节点最后一次被修改的事务ID
    pZxid = 0x30                        
    # 子节点的版本号
    cversion = 0                        
    # 当前节点的数据的版本号
    dataVersion = 0                     
    # acl 权限控制的版本号
    aclVersion = 0                      
    # 创建临时节点时,用于存放 sessionId
    ephemeralOwner = 0x0                
    # 数据长度
    dataLength = 2                      
    # 子节点数
    numChildren = 0                 
    

    相关文章

      网友评论

          本文标题:zookeeper 学习

          本文链接:https://www.haomeiwen.com/subject/vigpsftx.html