Hadoop之Zookeeper

Hadoop 之 Zookeeper

zookeeper 台数

  • 1n + 1 (奇数 台zookeeper)

    • 防止由脑裂造成的集群不可用。
    • 在容错能力相同的情况下,奇数台更节省资源。
  • 端口号

    • 1181:对client端提供服务

    • 3888:选举leader使用

    • 1888:集群内机器通讯使用(Leader监听此端口)

zookeeper 算法

  • ZooKeeper是以Fast Paxos算法为基础的,

  • 老版本是以Paxos算法为基础,Paxos 算法存在活锁的问题,即当有多个proposer交错提交时,有可能互相排斥导致没有一个proposer能提交成功,而Fast Paxos作了一些优化,通过选举产生一个leader (领导者),只有leader才能提交proposer,具体算法可见Fast Paxos。

zookeeper 角色

  • 领导者(leader),负责进行投票的发起和决议,更新系统状态(数据同步),发送心跳。事务请求唯一调度者和处理者,保证集群事务处理的顺序性

  • 学习者(learner),包括跟随者(follower)和观察者(observer)。

    • 跟随者(follower),用于接受客户端请求、向客户端返回结果,在选主过程中参与投票。收到写事务请求直接转发给Leader

    • 因为我们就三台zk所有这个角色就被忽略了,可以接受客户端请求,将写请求转发给leader,但observer不参加投票过程,只同步leader的状态,observer的目的是为了扩展系统,提高读取速度。

    1)leader失效后会在follower中重新选举新的leader

    1)每个follower都和leader有连接,接受leader的数据更新操作

    3)客户端可以连接到每个server,每个server的数据完全相同(强一致性)

    4)每个节点的服务Server,记录事务日志和快照到持久存

Zookeeper 工作原理

  • ZAB协议的全称是ZooKeeper Atomic Broadcast(ZooKeeper原子消息广播协议)。ZAB协议是一种特别为ZooKeeper设计的崩溃可恢复的原子消息广播算法。+

  • Zab协议有两种模式,它们分别是 恢复模式(选主)和 广播模式(同步)。

    • 恢复模式:

      当服务启动或者在领导者崩溃后,Zab就进入了恢复模式,恢复模式不接受客户端请求,当领导者被选举出来,且大多数Server完成了和leader的状态同步以后,恢复模式就结束了。状态同步保证了leader和Server具有相同的系统状态。

    • 广播模式:

      一旦Leader已经和多数的Follower进行了状态同步后,他就可以开始广播消息了,即进入广播状态。 这时候当一个Server加入ZooKeeper服务中,它会在恢复模式下启动,发现Leader,并和Leader进行状态同步。待到同步结束,它也参与消息广播。

    • ZooKeeper的广播状态一直到Leader崩溃了或者Leader失去了大部分的Followers支持。

Zookeeper 监听原理

选举机制

  • 半数机制:集群中半数以上机器存活,集群可用。所以Zookeeper适合安装奇数台服务器。
  • Zookeeper虽然在配置文件中并没有指定Master和Slave。但是,Zookeeper工作时,是有一个节点为Leader,其他则为Follower,Leader是通过内部的选举机制临时产生的。
  • 以一个简单的例子来说明整个选举的过程。
  • 假设有五台服务器组成的Zookeeper集群,它们的id从1-5,同时它们都是最新启动的,也就是没有历史数据,在存放数据量这一点上,都是一样的。假设这些服务器依序启动,来看看会发生什么。

Zookeeper的选举机制

  1. 服务器1启动,发起一次选举。服务器1投自己一票。此时服务器1票数一票,不够半数以上(3票),选举无法完成,服务器1状态保持为LOOKING;

  2. 服务器1启动,再发起一次选举。服务器1和1分别投自己一票并交换选票信息:此时服务器1发现服务器1的ID比自己目前投票推举的(服务器1)大,更改选票为推举服务器1。此时服务器1票数0票,服务器1票数1票,没有半数以上结果,选举无法完成,服务器1,1状态保持LOOKING

  3. 服务器3启动,发起一次选举。此时服务器1和1都会更改选票为服务器3。此次投票结果:服务器1为0票,服务器1为0票,服务器3为3票。此时服务器3的票数已经超过半数,服务器3当选Leader。服务器1,1更改状态为FOLLOWING,服务器3更改状态为LEADING;

  4. 服务器4启动,发起一次选举。此时服务器1,1,3已经不是LOOKING状态,不会更改选票信息。交换选票信息结果:服务器3为3票,服务器4为1票。此时服务器4服从多数,更改选票信息为服务器3,并更改状态为FOLLOWING;

  5. 服务器5启动,同4一样当小弟

  • 在选举的过程 还会涉及到 轮次zxid

1.1.7 Zookeeper 读写流程

  • 写数据流程

    • 在Client向Follwer 或 Observer 发出一个写的请求;

    • Follwer 或 Observer 把请求发送给Leader;

    • Leader接收到以后向所有follower发起提案;

    • Follwer收到提案后执行写操作,然后把操作结果发送给Leader;

    • 当半数以上follower返回提案结果后,leader会commit该提议,通知其他Follower 和 Observer 同步信息;

    • Follwer 或Observer把请求结果返回给Client

  • 读数据流程

    • 1)在Client向Follwer 或 Observer 发出一个读的请求;

    • 1)Follwer 或 Observer 把请求结果返回给Client;

1.1.8 Zookeeper 特点和 节点类型

  • 最终一致性:client不论连接到哪个Server,展示给它都是同一个视图,这是zookeeper最重要的特性;

  • 可靠性:具有简单、健壮、良好的性能,如果消息被某一台服务器接受,那么它将被所有的服务器接受;

  • 实时性:Zookeeper保证客户端将在一个时间间隔范围内获得服务器的更新信息,或者服务器失效的信息。

  • 但由于网络延时等原因,Zookeeper不能保证两个客户端能同时得到刚更新的数据,如果需要最新数据,应该在读数据之前调用sync()接口;

  • 等待无关(wait-free):慢的或者失效的client,不得干预快速的client的请求,使得每个client都能有效的等待;

  • 原子性:更新只能成功或者失败,没有中间状态;

  • 顺序性:按照客户端发送请求的顺序更新数据(队列);

  • 面试题

    • 讲一讲什么是CAP法则?Zookeeper符合了这个法则的哪两个?

      CAP法则:强一致性、高可用性、分区容错性;

      指的是在一个分布式系统中,Consistency(一致性)、 Availability(可用性)、Partition tolerance(分区容错性), 最多只能同时三个特性中的两个,三者不可兼得

    • Zookeeper符合强一致性、高可用性!

临时节点和永久节点存在的意义,就是不让树状结构太大,影响同步速度

  • 临时节点  该节点的生命周期依赖于创建它们的会话。不允许拥有子节点。

  • 永久节点  很多数据要被所有的session所共享,数据存储成永久节点,比如多个session存储相同的数据,如果都使用临时节点,浪费空间,可以存储成永久节点,一份就可以了,被所有session所共享。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值