Zookeeper知识总结

zookeeper是一个开源的分布式的,为分布式应用提供协调服务的apache项目;

工作机制:

zookeeper从设计模式来理解:是一个基于观察者模式设计的分布式服务管理框架,她负责存储和管理大家都关心的数据,然后接收观察者的注册,一旦这些数据的状态发生变化zookeeper就将负责通知已经在zookeeper上注册的哪些观察者做出相应的反应;

zookeeper = 文件系统+消息通知机制

zookeeper应用场景

zookeeper是一个经典的分布式数据一致性解决方案,致力于为分布式应用提供一个高性能,高可用,且居于严格顺序访问控制能力的分布式协调存储服务

  1. 维护配置信息:
    通常我们会将配置项放在配置文件中,再将配置文件放置在服务器上;当需要更改配置文件的时候,我们再去服务器上修改配置文件,但是随着分布式系统的兴起,许多服务都需要使用该配置文件,因此有必要保证配置服务的高可用性和各台服务器上配置数据的一致性
  2. 分布式锁服务
  3. 集群管理
  4. 生成分布式唯一id: 在过去的单表单库系统中通常可以通过数据库字段自带的auto_increment属性来自动为每条记录生成一个唯一的id,但是分库分表后,就无法再依靠数据库的auto_increment属性来唯一标识一条记录了,此时我们就可以用zookeeper在分布式情况下生成全局唯一的id

zookeeper的设计目标

  1. 高性能 zookeeper将全量数据存储在内存中,并直接服务于客户端的所有非事务请求,尤其适用于以读为主的应用场景
  2. 高可用 zookeeper一般以集群的方式对外提供服务,一般3-5台机器就可以组成一个高可用的zookeeper集群了,每台机器都会在内存中维护当前的服务器的状态,并且每台机器都相互保持者通信,只要集群中超过一半的机器都能够正常工作,那么整个集群就能够正常对外服务
  3. 严格顺序访问 对于可以端的每个更新请求,zookeeper都会分配一个全局唯一的递增编号买这个编号反映了所有事务操作的先后顺序;
zookeeper的数据模型

zookeeper的数据结点可以是为树状结构(或者目录) 书中的各节点被称为znode ,一个znode可以有多个子节点,zookeeper节点在结构上表现为树状,使用路径path来定位某个znode
znode 兼具文件和目录两种特点,即像文件一样维护者数据,元信息,acl,时间戳等数据结构,又像目录一样可以作为路径标识的一部分.

znode主要包含以下三部分:
节点的数据
节点的子节点
节点的状态stat:用来描述当前节点的创建,修改记录,

节点信息说明

  • cZxid : 数据节点创建时的事务id
  • ctime 数据节点创建时的时间
  • mZxid: 数据节点最后一次更新时的事务id
  • mtime 数据节点最后一次更新时的时间
  • pZxid 数据节点的子节点最后一次被修改时的事务id
  • cversion: 子节点的更新次数
  • dataversion 节点数据的更新次数
  • aclversion: 节点的acl的更新次数
  • ephemeralOwner 如果节点是临时节点,则表示创建该节点的会话的sessionId 如果节点是持久化节点,则该属性值为0
  • dataLength 数据内容的长度
  • numChildren 数据节点当前的子节点个数
节点类型

临时节点和持久化结点

Zookeeper的安装

  1. 创建zookeeper用户
  2. 安装jdk并配置JAVA_HOME的环境变量
  3. 解压zookeeper的压缩包
  4. cd conf 并且cp zoo_sample.cfg zoo.cfg 复制文件到zoo.cfg中
  5. vim zoo.cfg 修改配置文件
    修改dataDir的路径 记得创建对应的文件夹
  6. 启动zookeeper
    cd /zookeeper/bin 到bin目录下
    ./zkServer.sh start //启动
    ./zkServer.sh stop //停止
    ./zkSerevr.sh status //查看状态

客户端登录shell
./zkCli.sh 回车 [-server ip] 客户端登录到某一台服务器上 尽量启动zookeeper集群,否则只启动一台zookeeper不知道自己是leader还是follower,就拒绝操作了

  1. 新增节点 create [-s] [-e] path data
    -s代表顺序结点
    -e 代表临时结点
    创建持久化结点 create /hadoop "sofency"
    创建持久化顺序结点 create -s /aa "alice";
    创建临时结点 create -e /bb "hello"
    创建临时顺序结点create -s -e /hh "alice"
  2. 获取结点数据
    get /hadoop
  3. 修改结点的值
    set /hadoop “alice”
    乐观锁修改
    set /hadoop “alice” 2
    //解释
    //不仅结点值要对应上而且版本号2也要和结点的版本号对应上
  4. 删除结点
    delete path [version]
    和更新结点数据一样 也可以传入版本号,当你传入的数据版本号和当前数据的版本号不符合时,zookeeper不会执行删除操作
    要想递归删除 使用命令 rmr path
  5. 查看节点状态 stat /hadoop
  6. 返回结点列表 ls /hadoop ls2 /hadoop 会返回当前列表结点的所有信息
监听器

监听结点数据的变化
注解监听器
get /hadoop watch
stat /hadoop watch

当结点数据发生变化的时候,向客户端发出通知,需要注意的是 zookeeper的触发器是一次性的,即触发一次后就会立即失效;

acl权限控制

zookeeper类似文件系统,client可以创建节点,更新节点,删除节点,那么如何做到节点的权限的控制的呐?
acl权限控制,使用scheme : id : permission来标识
权限模式(scheme) 授权的策略
授权对象(id): 授权对象
权限(permission):授予的权限
zookeeper的权限控制是基于每个znode节点的,需要对每个结点设置权限
每个znode支持设置多种权限控制方案和多个权限
子节点不会继承父节点的权限,客户端无泉访问某节点 ,但可以访问它的子节点

eg:
setAcl /test1 ip:192.168.60.130:crwda 将节点权限设置为ip:192.168.60.130的客户端可以对节点进行增删改查管理权限

权限模式

方案描述
world只有一个用户:anyone 代表登录zookeeper的所有人(默认)
ip对客户端使用ip认证
auth使用已添加认证的用户认证
digist使用用户名:密码方式认证

权限

权限acl简写描述
createc可以创建节点
deleted可以删除节点
readr可以读取节点数据及描述子节点列表
writew可以设置节点数据
admina可以设置节点访问控制列表权限
查询节点的权限
getAcl /hadoop
world授权
setAcl /hadoop world:anyOne:crwda
ip多授权模式
setAcl /hadoop ip:192.168.60.129:crwda,ip:192.168.60.130:crwda
auth授权
首先先将用户添加进授权的范围内
addauth digist sofency:12344 添加用户 addauth digist 用户名:密码
setAcl /node1 auth:sofency:crdwa //设置权限

多种授权方式之间用逗号间隔开
setAcl path ip:host:power,auth:用户名:power

acl超级管理员

zookeeper的权限管理模式有一种叫做super,该模式提供一个超管可以方便的访问任何权限的节点,假设这个超管是super:admin 需要先为超管生成密码的密文
echo -n super:admin | openssl dgst -binary -sha1 | openssl base64
打开zookeeper目录下的/bin/zkServer.sh服务器的脚本 找到如下一行

nohup $JAVA "-Dzookeeper.log.dir=${ZOO_LOG_DIR}" "-Dzookeeper.root.logger=${ZOO_LOG4J_PROP}"
这就是脚本中启动zookeeper的命令,默认只有以上两个配置项,我们需要加上超管的配置项
“-Dzookeeper.DigestAuthenticationProvider.superDigest=super:密文”

之后启动zookeeper,输入以下命令添加权限
addauth digest super:admin # 添加认证用户

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值