ZooKeeper

ZooKeeper

ZooKeeper提供通用的分布式锁服务,用以协调分布式应用

​ Hadoop使用Zookeeper的事件处理确保整个集群只有一个NameNode,存储配置信息等.

​ HBase使用Zookeeper的事件处理确保整个集群只有一个HMaster,察觉HRegionServer联机和宕机,存储访问控制列表等.

Zookeeper的核心是原子广播,这个机制保证了各个server之间的同步。实现这个机制的协议叫做Zab协议。

Zab协议有两种模式:恢复模式 广播模式

zookeeper:注册,监听事件Watcher,回调函数

znode有两种类型,瞬时的(ephemeral)和持久的(persistent)

znode有四种形式的目录节点

PERSISTENT EPHEMERAL PERSISTENT_SEQUENTIAL EPHEMERAL_SEQUENTIAL

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

zookeeper允许分区出现(最终一致性)

顺序性避免冲突

角色模型

集群状态 选举模式 安其内 , 广播模式 壤其外

Server状态

LOOKING:当前Server不知道leader是谁,正在搜寻

LEADING:当前Server即为选举出来的leader

FOLLOWING:leader已经选举出来,当前Server与之同步

主从分工

领导者(leader)负责进行投票的发起和决议,更新系统状态

学习者(learner)包括跟随者(follower)和观察者(observer),follower用于接受客户端请求并向客户端返回结果,在选主过程中参与投票

Observer 可以接受客户端连接,将写请求转发给leader,但observer不参加投票过程,只同步leader的状态,observer的目的是为了扩展系统,提高读取速度

客户端(client) 请求发起方

在这里插入图片描述

zookeeper的广播模式
广播模式,两阶段提交 --对外
在主从模型的机制下,zookeeper内部分为一个leader和n个follower,其中follower用于收集并处理简易客户端需求,将无法处理的客户端需求传给leader;leader收到follower所传信息后,开始发起投票并通知follwer进行投票,follwer把投票结果发送给leader,leader将结果汇总,然后由leader下达执行客户端请求指令,将指令以消息队列形式告知所有follower,这时所有follower都有关于客户端处理的最新消息。

zookeeper的恢复模式,(fllower同时知道) --对内
当zookeeper中的leader发生故障时,zookeeper需要通过选票的方式,选出leader,选票规则应用到serverID(sid)sid是集群启动时每个服务器自带,还需要用到版本ID(最新消息)。当leader故障时,先比较各个follower的版本ID,若一致再比较sidm,谁的版本号大谁就是leader,版本号相同,sid大就是leader。

详述zookeeper选主的流程
当zookeeper集群第一次起动时,此时版本号相同, 若多台server同步启动,sid大的为主
​ 若多台server逐个启动,最先大的sid为主
当leader挂掉时,假设此时只有一个节点知晓,我们假设此时第一个知晓leader挂掉的服务器为a,a服务器先给自己做leader投一票,然后将leader挂掉的消息传递给其他服务器,若b版本号大于a,此时b会否定a做leader的权利,并收掉a的票,同理,若c版本号小于a,则c认同a做leader并给a投一票。因为各个服务器投票是乱序的,所以最终会选举出版本号最大的为leader,若版本号相同,sid大的为leader。

列出zookeeper节点命令及其作用
cZxid:节点创建时间zxid
ctime:节点创建时间
mZxid:节点最近一次修改的时间zxid
mtime:节点最近一次修改的时间
cversion:子节点数据更新次数
dataVersion:本节点数据更新次数
aclVersion:节点ACL(授权信息)的更新次数
ephemeralOwner:如果该节点为临时节点, ephemeralOwner值表示与该节点绑定的session id. 如果该节点不是临时节点,ephemeralOwner值为0

ls命令查看当前Zookeeper中所包含的内容 ls /
create命令创建一个新的Znode节点"testNode" create /testNode test
get命令可以查看我们创建的节点 get /testNode 打印出节点的内容
set命令对节点修改 set /testNode newTest
stat命令查看节点信息 stat /testNode
delete命令删除对应的节点 delete /testNode
rmr 类似rm -rf 删除目录及目录下所有内容 rmr /a

详述在zookeeper案例中,zookeeper的工作流程
客户端向follwer发出一个写的请求;
follwer会把请求发送给leader;
leader接收到以后开始发起投票并通知follwer进行投票;
follwer把投票结果发送给leader;
leader将结果汇总后如果需要写入,则开始写入同时把写入操作通知给leader,然后commit;
follwer把请求结果返回给客户端

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值