zoukankan      html  css  js  c++  java
  • Zookeeper学习记录

    Zookeeper学习记录

    一、简介

    ZooKeeper 是一个开源的分布式协同服务框架,

    它的设计目标是将那些复杂且容易出错的分布式协同服务封装起来,抽象出一个高效可靠的原语集,并以一系列简单的接口提供个用户使用。

    ZooKeeper 是 Google 的 Chubby 项目的开源实现,它曾经作为 Hadoop 的子项目,在大数据领域得到广泛应用。

    ZooKeeper 基于分布式计算的核心概念而设计,主要目的是给开发人员提供一套容易理解和开发的接口,从而简化分布式系统构建的任务。

    ZooKeeper 的设计保证了其健壮性,这就使得应用开发人员可以更多关注应用本身的逻辑,而不是协同工作上。

    ZooKeeper 从文件系统 API 得到启发,提供一组简单的 API,使得开发人员可以实现通用的协作任务,包括选举主节点、管理组内成员关系、管理元数据等。

    ZooKeeper 包括一个应用开发库(主要提供 Java 和 C 两种语言的 API)和一个用 Java 实现的服务组件。ZooKeeper 的服务组件运行在一组专用服务器之上,实现的服务组件。

    作用:存储与管理数据,并监控数据变化,通知到注册在zookeeper上的服务。

    二、应用场景

    Zookeeper 的主要应用场景有统一命名服务,统一配置管理,统一集群管理,服务器节点动态上下线等。

    三、数据结构

    Zookeeper 的数据结构与 Unix 文件系统很类似,整体上可以看作是一棵树,与 Unix 文件系统不同的是 Zookeeper 的每个节点都可以存放数据,

    每个节点称作一个 ZNode,默认存储1MB的数据,每个 ZNode 都可以通过其路径唯一标识。

    DataTree类

    四、watch机制

    为了替换客户端的轮询,避免无效的数据调用。采用了

    基于通知(notification)的机制:客户端向ZooKeeper注册需要接收通知的 znode,通过对znode设置监视点(watch)来接收通知。

    监视点是一个单 次触发的操作,意即监视点会触发一个通知。

    为了接收多个通知,客户端必须在每次通知后设置一个新的监视点。

    五、version机制

    六、过半写成功策略

    Leader 节点接收到写请求后,这个 Leader 会将写请求广播给各个 server,各个 server 会将该写请求加入待写队列,并向 Leader 发送成功信息,

    当 Leader 收到一半以上的成功消息后,说明该写操作可以执行。Leader 会向各个 server 发送提交消息,各个 server 收到消息后开始写。

    Follower 和 Observer 只提供数据的读操作,当他们接收的写请求时,会将该请求转发给 Leader 节点。

    集群中只要有半数以上的节点存活,Zookeeper 集群就能正常服务。因此 Zookeeper 集群适合安装奇数台机器。

    七、集群选举

    1、一致性算法

      Paxos(帕克索斯):Paxos 算法是 Lamport 宗师提出的一种基于消息传递的分布式一致性算法,使其获得2013年图灵奖。

          Zookeeper 基于 Fast Paxos 算法。

    2、选举过程

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

    (2)服务器 2 启动,再发起一次选举。服务器 1 和 2 分别投自己一票并交换选票信息:此时服务器 1 发现服务器 2 的 ID 比自己目前投票推举的(服务器 1)大,更改选票为推举服务器 2。

    此时服务器 1 票数 0 票,服务器 2 票数 2 票,没有半数以上结果,选举无法完成,服务器 1,2 状态保持 LOOKING;

    (3)服务器 3 启动,发起一次选举。此时服务器 1 和 2 都会更改选票为服务器 3。此次投票结果:服务器 1 为 0 票,服务器 2 为 0 票,服务器 3 为 3 票。

    此时服务器 3 的票数已经超过半数,服务器 3 当选 Leader。服务器 1,2 更改状态为 FOLLOWING,服务器 3 更改状态为 LEADING; 

    (4)服务器 4 启动,发起一次选举。此时服务器 1,2,3 已经不是 LOOKING 状态,不会更改选票信息。交换选票信息结果:服务器 3 为 3 票,服务器 4 为 1 票。

    此时服务器 4 服从多数,更改选票信息为服务器 3,并更改状态为 FOLLOWING;

    (5)服务器 5 启动,同 4 一样当小弟。

    3、选举实现类

    类:QuorumPeer

    默认Leader选举实现类(快速群首选举):FastLeaderElection

    接口:Election

    八、集群状态

    LOOKING

    LEADING

    FOLLOWING

    OBSERVING

    九、Zab协议

    ZooKeeper原子广播协议 (ZooKeeper Atomic Broadcast protocol)。

    状态更新的广播协议。

    通过该协议来广播各个服务器的状态变更信息。

    十、角色

    leader:领导者。写操作。

    follower:追随者。提交来自领导者的提议。

    observer:观察者。提交来自领导者的提议。不参加选举过程。

    learner:由于群首将 状态变化发送给追随者和观察者,这两种服务器也都被称为学习者。

    PARTICIPANT服务器:参与者服务器。可以是群首也可以是追随者。

    OBSERVER服务器:观察者服务器。

    十一、INFORM消息

    INFORM消息本质上是包含了正在被提交的 提议信息的提交消息。 

    参考资料: 

    Zookeeper学习笔记

    Zookeeper学习系列

    zookeeper工作原理、安装配置、工具命令简介

    使用ZooKeeper ACL特性进行znode控制

    基于ZooKeeper的服务注册中心

    基于Zookeeper的服务注册与发现

    基于Zookeeper服务注册和发现

    基于Docker、Registrator、Zookeeper实现的服务自动注册

    Zookeeper 服务注册和发现

    遇见 ZooKeeper:初识

    一文了解 Zookeeper

    Kafka 架构中 ZooKeeper 以怎样的形式存在?

  • 相关阅读:
    笔试算法题(51):简介
    笔试算法题(50):简介
    笔试算法题(49):简介
    笔试算法题(48):简介
    笔试算法题(47):简介
    笔试算法题(46):简介
    SQL Server 笔记
    SQL Server 2008 安装重启电脑失败
    列举某个目录文件
    Linux LAMP 配置
  • 原文地址:https://www.cnblogs.com/wangwangfei/p/13574110.html
Copyright © 2011-2022 走看看