设为首页 收藏本站
查看: 1045|回复: 0

[经验分享] Zookeeper理解

[复制链接]

尚未签到

发表于 2019-1-8 06:11:15 | 显示全部楼层 |阅读模式
1 Zookeeper介绍
          Zookeeper是一个开源分布式应用协调服务。
  简单来说,zookeeper = 通知机制 + 文件系统
zookeeper 为什么是奇数   
          zookeeper有这样一个特性:集群中只要有过半的机器是正常工作的,那么整个集群对外就是可用的。也就是说如果有2个zookeeper,那么只要有1个死了zookeeper就不能用了,因为1没有过半,所以2个zookeeper的死亡容忍度为0;同理,要是有3个zookeeper,一个死了,还剩下2个正常的,过半了,所以3个zookeeper的容忍度为1。
     
  
  
  1.1 主要角色
  来自服务器端的
  
  >> 领导者(leader),负责进行投票的发起和决议,更新系统状态(数据同步),发送心跳。
  >> 学习者(learner),包括跟随者(follower)和观察者(observer)。
     >> 跟随者(follower,用于接受客户端请求、向客户端返回结果,在选主过程中参与投票。
       >> 观察者(Observer,可以接受客户端请求,将写请求转发给leader,但observer不参加投票过程,只同步leader的状态,observer的目的是为了扩展系统,提高读取速度。
  
  1)leader失效后会在follower中重新选举新的leader
  2)每个follower都和leader有连接,接受leader的数据更新操作
  3)客户端可以连接到每个server,每个server的数据完全相同
  4)每个节点的服务Server,记录事务日志和快照到持久存储
  
  
1.2 工作原理
          Zookeeper的核心是原子广播,这个机制保证了各个Server之间的同步。实现这个机制的协议叫做Zab协议。
          Zab协议有两种模式,它们分别是恢复模式(选主)和广播模式(同步)。当服务启动或者在领导者崩溃后,Zab就进入了恢复模式,恢复模式不接受客户端请求,当领导者被选举出来,且大多数Server完成了和leader的状态同步以后,恢复模式就结束了。状态同步保证了leader和Server具有相同的系统状态。
1.2.1 Zookeeper节点数据操作流程
  1)写操作
  
  
  发起提案 proposal
  quorum 法定人数
  1)在Client向Follwer 或 Observer 发出一个写的请求;
  2)Follwer 或 Observer 把请求发送给Leader;
  3)Leader接收到以后向所有follower发起提案;
  4)Follwer收到提案后执行写操作,然后把操作结果发送给Leader;
  5)当多数follower返回提案结果后,leader会commit该提议,通知其他Follower 和 Observer 同步信息;
  6)Follwer 或Observer把请求结果返回给Client。
  2)读操作
  1)在Client向Follwer 或 Observer 发出一个读的请求;
  2)Follwer 或 Observer 把请求结果返回给Client;
1.3 数据模型
  1)ZooKeeper本质上是一个分布式的小文件存储系统;
  2)Zookeeper表现为一个分层的文件系统目录树结构(不同于文件系统的是,节点可以有自己的数据,而文件系统中的目录节点只有子节点),每个节点可以存少量的数据。
  3)每个节点称做一个ZNode。每个ZNode都可以通过其路径唯一标识。
  4)圆形节点可以含有子节点,多边形节点不能含有子节点。一个节点对应一个应用,节点存储的数据就是应用需要的信息,比如HA状态active、standby。
  
  
1.4 主要特点
  最终一致性:client不论连接到哪个Server,展示给它都是同一个视图,这是zookeeper最重要的特性;
  可靠性:具有简单、健壮、良好的性能,如果消息被某一台服务器接受,那么它将被所有的服务器接受;
  实时性:Zookeeper保证客户端将在一个时间间隔范围内获得服务器的更新信息,或者服务器失效的信息。 但由于网络延时等原因,Zookeeper不能保证两个客户端能同时得到刚更新的数据,如果需要最新数据,应该在读数据之前调用sync()接口;
  等待无关(wait-free):慢的或者失效的client,不得干预快速的client的请求,使得每个client都能有效的等待;
  原子性:更新只能成功或者失败,没有中间状态;
  顺序性:按照客户端发送请求的顺序更新数据;
1.5 应用场景
  数据发布与订阅
      应用配置集中到节点上,应用启动时主动获取,并在节点上注册一个watcher,每次配置更新都会通知到应用。
  
  发布订阅模式
  
  
  命名空间服务
      分布式命名服务,创建一个节点后,节点的路径就是全局唯一的,可以作为全局名称使用。
  分布式通知/协调
      不同的系统都监听同一个节点,一旦有了更新,另一个系统能够收到通知。
  分布式锁
      Zookeeper能保证数据的强一致性,用户任何时候都可以相信集群中每个节点的数据都是相同的。一个用户创建一个节点作为锁,另一个用户检测该节点,如果存在,代表别的用户已经锁住,如果不存在,则可以创建一个节点,代表拥有一个锁。
[][][]

  集群管理
      每个加入集群的机器都创建一个节点,写入自己的状态。监控父节点的用户会收到通知,进行相应的处理。离开时删除节点,监控父节点的用户同样会收到通知。
  






运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-660470-1-1.html 上篇帖子: ZooKeeper 入门指南 下篇帖子: Troubleshooting ZooKeeper Operating Environment (zookeeper操作环境排查)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表