zookeeper相关


在这里插入图片描述

什么是zookeeper?

zookeeper是Google的chubby的一个开源实现是,Apache组织下的高性能,分布式的应用协调服务框架

为什么使用zookeeper?

使用yarn管理资源分配时候可能会出现单点和高可用的现象而崩溃导致整个集群不能用了,所以需要zookeeper去协调。

zookeeper集群搭建大法

  1. 上传zookeeper-*.tar.gz 压缩包

使用xftp上传
使用命令rz(需要安装lrzsz — yum install lrzsz -y)

  1. 解压zookeeper压缩包

tar -xf zookeeper-3.4.6.tar.gz

  1. 配置环境变量

vim /etc/profile
增加export ZOOKEEPER_HOME=zookeeper的绝对路径
Path后补充:$ZOOKEEPER_HOME/bin
执行 source /etc/profile

  1. 配置zookeeper配置文件

进入zookeeper根目录中conf目录下,可看到一个zoo_sample.cfg文件,拷贝重命名
    ( cp zoo_sample.cfg zoo.cfg)
配置zoo.cfg
   修改dataDir=zookeeper的绝对路径
   最下面增加server.1=主机名:2888:3888
   server.后的数字为集群中主机的myid文件中的数字(下面介绍),2888为提供   zookeeper对外的通讯,3888:为当leader挂掉之后,重新选择leader时 提供对外的通讯
在集群中有多少台主机则写几句

  1. 进入zookeeper根目录下创建文件myid

文件中追加上一条中server.后的数字,所有的集群都要加,且不一致,但与zoo.cfg中的配置中的server后的数字一致

  1. 将已经配置好的zookeeper发送到集群中别的主机中

scp -r zookeeper存放的路径/ root@集群中的某个主机名:要存放的路径 回车后输入密码
发送后修改根部录下的myid中的数字
scp -r etc/profile root@集群中的某个主机名:etc/profile 回车后输入密码
发送后执行 source /etc/profile

  1. 查看zookeeper集群个节点的启动状态:
    zkServer.sh status
    zkServer.sh stop

zookeeper分布式协调

特性

  1. 数据一致性:为客户端展示同一个试图,这是zookeeper里面的一个非常重要的更能。
  2. 可靠性:如果消息能被一台服务器接受,那么它将被所有的服务器接受。
  3. 实时性:zookeeper不能保证两个客户端同时得到刚更新的数据,如果需要最新数据,应该在读数据之前调用sunc()接口。
  4. 独立性:各个Client之间互不干预。
  5. 原子性:更新只能成功或者失败,没有中间状态。
  6. 顺序性:所有Server,统一消息发布的顺序一致

角色

角色状态
leader — 领导者leading — 领导者状态
follower — 跟随者following — 随从状态,同步leader状态,参与投票
observer — 观察者(observer监视leader,并将leader的状态告诉follower)observering — 观察状态,同步leader状态,不参与投票
looking – 竞选状态(当leader挂掉后或者集群刚刚启动)

原子广播

当某个请求被leader发送到follower后,follower要判断这个请求能不能执行(过半原则—zookeeper最好是奇数)

  1. 有一个写入请求,发送给follower,follower会将请求转发给leader
  2. leader收到后会发起一个请求,并且让所有的follower投票
  3. follower会响应leader的请求,并发起投票
  4. follower收到请求时,判断完毕后将结果返回给leader
  5. leader将请求写入的文件分发到所有的follower------(最终一致性–及时在写入的过程中有节点连接不上,当恢复的时候还会把节点上写入数据)

zab协议

  1. 广播模式 — 选举出来的leader,也对外提供服务
  2. 恢复模式 — 选举leader,也就是4大状态。(也就是角色表格中后面的4个状态)

选举机制

当leader挂掉之后,剩下的follower会发起投票,投出一个新的leader
以下图片来自这个网站,单击跳转
在这里插入图片描述
出现某个服务器票数最多的时候,则晋升为leader

  1. id----serverid(设置的myid)
  2. zxid-----(股份)
  3. 逻辑时钟------每个一个周期回加1(根据逻辑时钟判断我当前选举的状态)
    选举时会优先投给自己,然后选举失败后,会投给id最大的,id相同则投给zxid最大的
    文字步骤
  4. 服务器1启动,给自己投票,然后发投票信息,由于其它机器还没有启动所以它收不到反馈信息,服务器1的状态一直属于Looking。
  5. 服务器2启动,给自己投票,同时与之前启动的服务器1交换结果,由于服务器2的编号大所以服务器2胜出,但此时投票数没有大于半数,所以两个服务器的状态依然是LOOKING。
  6. 服务器3启动,给自己投票,同时与之前启动的服务器1,2交换信息,由于服务器3的编号最大所以服务器3胜出,此时投票数正好大于半数,所以服务器3成为领导者,服务器1,2成为小弟。
  7. 服务器4启动,给自己投票,同时与之前启动的服务器1,2,3交换信息,尽管服务器4的编号大,但之前服务器3已经胜出,所以服务器4只能成为小弟。
  8. 服务器5启动,后面的逻辑同服务器4成为小弟。

观察者机制(watch)

follower会查看leader的状态,将状态信息进行更新和发送,发送给follower

zookeeper结构认识

在这里插入图片描述

什么是Znode

Znode分为 持久临时顺序,Znode是zookeeper存储数据的数据单元。

  1. 持久Znode :
    1. 永远存在。
    2. zookeeper即使重启也会存在的,不会丢失。
  2. 临时Znode:
    1. 当客户端创建了Znode,只会被这个客户端占有使用。
    2. 一旦客户端停止,断开,临时的Znode就会被删除。
  3. 顺序Znode
    1. 防止名字冲突。
    2. 节点后会跟随一个10位数字的顺序号。

监视者的引入

zookeeper事件通知机制(watchers),是效仿观察者模式实现的zookeeper的事件通知机制。

  1. 当Znode的数据发生变化时监听一次。
  2. 发生删除事件时监听一次。
  3. 子目录节点增加或者删除时监听一次。

zookeeper的节点要求

  1. <=255个节点
  2. 奇数几点(为了过半原则)

zookeeper工作流程

  1. zookeeper启动(zkServer.sh start)
  2. zookeeper从多个实例中选取一个leader(根据paxos)
  3. zookeeper等待客户端连接
  4. 客户端连接到zookeeper的任何一个节点
  5. 连接的节点会为客户端分配一个会话id,并想客户端确认
  6. 客户端定期向节点发送心跳
  7. 读取:客户端向具有znode路径的节点发送“读请求”,并通过所读节点的数据库中获取请求的znode,返回该节点
  8. 存储:客户端连接的服务器会将存储请求发给领导者,然后领导者会向所有的追随者重选发出写请求,利用过半原则(多数节点写入成功就算写入成功,否则写入失败)(原子性)。

注意点:

1、在启动集群时候关闭防火墙
2、myid对应
3、三台节点同时启动,启动之后再有节点挂掉无所谓


仅供参考

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值