ZooKeeper 学习

1.Zookeeper下载与安装

2.先安装jdk才能安装Zookeeper

1.查询要安装jdk的版本:

命令: yum -y list java*

在这里插入图片描述

2.安装jdk1.8

命令:yum install -y java-1.8.0-openjdk.x86_64

3.查询jdk版本

命令: java -version

在这里插入图片描述

这样就安装成功了。默认给安装到usr/lib/jvm/ 还有一种手动的

3.1 在CentOS下安装Zookeeper

  • 将下载的zookeeper压缩包上传到云服务器,我自己是将所有压缩包放到**/usr/local/src/software/ **下
    • 切换文件夹
    • cd /usr/local/src/software
    • tar -zxvf apache-zookeeper-3.6.2-bin.tar.gz 解压zookeeper压缩包
    • mv zookeeper-3.4.14 zookeeper 修改文件夹名字为zookeeper方便记忆
    • cd /usr/local/src/software/zookeeper
    • 在zookeeper目录下创建data 目录mkdir data,并pwd获取data目录的路径**/usr/local/src/software/zookeeper/data**
    • cd /usr/local/src/software/zookeeper/conf 进入conf目录下
      • mv zoo_sample.cfg zoo.cfg修改zoo_sample.cfg文件名称为zoo.cfg
      • vim zoo.cfg 修改配置文件,wq保存退出:

在这里插入图片描述

  • useradd zookeeper 创建一个名为zookeeper的用户

  • 在这里插入图片描述

  • chown -R zookeeper:zookeeper zookeeper/ 将zookeeper文件夹权限交给刚添加的zookeeper用户

在这里插入图片描述

  • 然后我们就可以进行启动zookeeper操作了

    • 我们进入zookeeper的bin目录:

      cd /usr/local/src/software/zookeeper/bin

在这里插入图片描述

  • ./zkServer.sh start 启动zookeeper:

在这里插入图片描述

  • 为了验证是否启动成功,我们来使用客户端连接一下zookeeper服务:
    • 先使用netstat -tlun 查看端口服务开启情况:

在这里插入图片描述

  • 建议可以直接把防火墙关闭,这样就不用在防火墙中添加规则了

  • 阿里云安全组开端口

在这里插入图片描述

  • 然后在我们本电脑(windows下zookeeper下载好解压即可使用)上使用zookeeper的客户端连接下载服务器的zookeeper

    • cd D:\zookeeper\apache-zookeeper-3.6.2-bin\bin

    • ./zkCli.cmd -timeout 5000 -server x.xxx.xx.xxx:2181 ip地址为自己服务其的ip

在这里插入图片描述

3.2 ZooKeeper数据模型

在这里插入图片描述

  • 每一个节点都叫做zNode,可以有子节点,也可以有数据
  • 每个节点都能设置相应的权限控制用户的访问
  • 每个节点存储的数据不宜过大
  • 每个节点都带有一个版本号,数据变更时,版本号变更(乐观锁)
  • 节点分永久节点跟临时节点

4.Zookeeper 常用命令之zkCli

  • 要切换解压文件目录下 cd /usr/local/src/software

  • chown -R zookeeper:zookeeper zookeeper/ 将zookeeper文件夹权限赋给zookeeper用户

  • su zookeeper 切换到zookeeper用户

  • 然后进入zookeeper的bin目录下执行./zkServer.sh start启动zookeeper,关闭zookeeper ./zkServer.sh stop

    • 如果出现下面错误信息,说明zookeeper权限赋于失败,重新su root 切换root 用户再次将整个zookeeper文件夹的权限赋给zookeeper用户:

      img

  • 然后即可成功启动:

    在这里插入图片描述

  • 学习下zkCli 命令

  • 查看 帮忙指令 help

4.1zkCli命令

  • 启动zkCli,在bin目录下执行 ./zhCli.sh -h
  • 关闭zkCli,close

创建节点和查看节点

  • create [-s] [-e] path acl 创建节点
  • -s: 表示创建顺序节点
  • -e:表示创建临时节点
  • data:表示创建的节点的数据内容

在这里插入图片描述

  • 查看节点

    • 获取根节点: ls /
    • 获取某个节点的子节点:ls /path, eg:ls /zk_test
    • 获取某个节点的数据: get /path
  • 查看节点的状态: stat /path

    [zk: 127.0.0.1:2181(CONNECTED) 7] stat /heng0000000001
    cZxid = 0xb											---> 事务id
    ctime = Wed Mar 03 15:46:09 CST 2021				  	---> 节点创建的时间
    mZxid = 0xb											---> 最后一次更新时的事务id
    mtime = Wed Mar 03 15:46:09 CST 2021					---> 最后一次更新时间
    pZxid = 0xb											--->该节点的子节点列表最后一次被修改的事务id
    cversion = 0										---> 子节点列表的版本
    dataVersion = 0										---> 数据内容的版本
    aclVersion = 0										---> acl版本
    ephemeralOwner = 0x0								---> 用于临时节点,表示创建临时节点的事务id
    														如果当前节点不是临时节点,则该字段为0
    dataLength = 7										---> 数据内容的长度
    numChildren = 0										---> 子节点的数量
    
  • 获取某个节点的子节点以及当前节点的状态:ls2 /path

修改节点

  • 修改节点的数据:set /path data [version]

在这里插入图片描述

删除节点

  • delete /path [version] 非递归删除
  • rmr /path [version] 递归删除
[zk: 127.0.0.1:2181(CONNECTED) 12] ls /
[heng, heng0000000001, zk_test, zookeeper]
[zk: 127.0.0.1:2181(CONNECTED) 13] delete /heng0000000001
[zk: 127.0.0.1:2181(CONNECTED) 14] ls /
[heng, zk_test, zookeeper]
[zk: 127.0.0.1:2181(CONNECTED) 15] delete /zk_test
[zk: 127.0.0.1:2181(CONNECTED) 16] ls /
[heng, zookeeper]

5.ZooKeeper 中的Session 机制 与 Watcher

在这里插入图片描述

  • 对节点的watcher操作:get/stat + watch

    针对每一个节点的操作,都可以有一个监控者,当节点发生变化,会触发watcher事件 zk中watcher是一次性的,触发后立即销毁 所有有监控者的节点的变更操作都能触发watcher事件

    • watch事件是一次性 看实操:

      在这里插入图片描述

在这里插入图片描述

前面哪个客户端打印的结果是:

在这里插入图片描述

  • 子节点的watcher操作(监控父节点,当父节点对应的子节点发生变更的时候,父节点上的watcher事件会被触发) ls/ls2 +watch增删会触发、修改不会,如果子节点再去新增子节点,不会触发(触发watcher事件一定是直系子节点)

6.ZooKeeper 中的 ACL权限控制

  • 针对节点可以设置相关的读写等权限,目的是为了保证数据的安全性

  • 权限permissions可以指定不同的权限范围及角色

  • 常用的命令

    • getAcl 获取节点权限

    • setAcl 设置节点权限

    • addauth 输入认证授权信息,注册时输入明文密码,在zk里,以加密的形式保存

      [zk: 8.135.114.163:2181(CONNECTED) 20] create /heng HelloWorld
      Node already exists: /heng
      [zk: 8.135.114.163:2181(CONNECTED) 21] getAcl /heng
      'world,'anyone
      : cdrwa 		# acl 的组成[scheme:id: permissions]
      
  • acl 的组成**[scheme: id:permissions]** ,即:【约束:id:权限】

  • scheme 授权机制

    • world 下只有一个id,也就是anyone,表示所有人 world:anyone:permissions
    • auth 代表认证登录,需要注册用户有权限才可以 auth:user:password:permissions
    • digest 需要密码加密才能访问 digest:username:BASE64(SHA1(password)):permissions(跟auth区别在于,auth明文,digest为密文)
    • ip 例如:ip:localhost:psermissions
    • super 代表超管,拥有所有的权限;
    • 打开zk目录下的/bin/zkServer.sh服务器脚本文件,找到如下一行:
  • id:允许访问的用户

  • permissions:权限组合字符串

cdrwa:
c ---> create 创建子节点
d ---> delete 删除子节点
r ---> read 读取节点的数据
w ---> write 写入数据
a ---> admin 可管理的权限
cdrwa cdr cdw 
  • acl使用场景:
  • 开发环境跟测试环境,使用acl就可以进行分离,开发者无权去操作测试的节点,生产环境上控制指定ip的服务可以访问相关的节点

7.ZooKeeper 中的三种角色及其选举机制

7.1 三种角色及其作用

  • leader:作为整个zk集群写请求的唯一处理者,并负责进行投票的发起和决议,更新系统的状态
  • follower接收客户端请求,处理读请求,并向客户端返回结果;将写请求转给 Leader;在选举 Leader过程中参与投票。
  • observer:可以理解为无选举投票权的 Flollower,其主要是为了协助 Follower 处理更多的读请求。如果 Zookeeper 集群的读请求负载很高,或者客户端非常非常多,多到跨机房,则可以设置一些 Observer 服务器,以提高读取的吞吐量。

7.2注册中心常见的三种模式

  • zk的核心是广播机制,该机制保证了各个zk之间数据同步(数据一致性)zk实现的机制为ZAB协议
  • 恢复模式: 如果leader崩溃,这个时候就会进入恢复模式,使整个zk集群恢复到正常的工作状态
  • 同步模式:新的leader选举出来后,就乎进入同步模式(各个follower会去同步新的leader上的数据),当大多数zkServer完成了与leader的状态同步之后,恢复模式就结束
  • 广播模式:客户端想写入数据,这个时候leader发起提议,当leader的提议被大多数的zkServer统一之后,leader就会去修改自身的数据,并将修改后的数据广播给其他的follower

7.3 Zookeeper 的选举机制

  • myid

    这是 zk 集群中服务器的唯一标识,称为 myid。例如,有三个 zk 服务器,那么编号分别是 1,2,3。

  • zxid

    ReentranReadWriteLock 32位
    
    高位              低位
    0000000000000000  0000000000000000
    
                       epoch                                 xid
    00000000000000000000000000000000   00000000000000000000000000000000
    zxid 为 Long 类型,其中高 32 位表示 epoch,低 32 位表示 xid。即 zxid 由两部分构成:epoch 与 xid。
    每个 Leader 都会具有一个不同的 epoch 值,表示一个时期、时代。新的 Leader 产生,则会更新所有zkServer 的 zxid 中的 epoch。
    而 xid 则为 zk 的事务 id,每一个写操作都是一个事务,都会有一个 xid。每一个写操作都需要由 Leader 发起一个提议,由所有 Follower 表决是否同意本次写操作。
    
  • .逻辑时钟

    逻辑时钟,Logicalclock,是一个整型数,该概念在选举时称为 logicalclock,而在 zxid 中则为 epoch 的值。即 epoch 与 logicalclock 是同一个值,在不同情况下的不同名称。

  • zk的选举状态

    LOOKING,选举状态(查找 Leader 的状态)。
    LEADING,领导者状态。处于该状态的服务器称为 Leader。
    FOLLOWING,随从状态,同步 leader 状态。处于该状态的服务器称为 Follower。
    OBSERVING,观察状态,同步 leader 状态。处于该状态的服务器称为 Observer。
    

8.ZooKeeper 集群搭建实操

原章 海贼王的:
https://blog.csdn.net/weixin_43591980/article/details/109803946?spm=1001.2014.3001.5502

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值