zookeeper 学习

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 学习)