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

[经验分享] zookeeper中几个相关实体和它们之间的交互

[复制链接]

尚未签到

发表于 2017-4-19 11:51:56 | 显示全部楼层 |阅读模式
        zookeeper是一个开源的分布式协调服务,其独特的"leader-follower"集群模式,"过半成功"的写策略,很好的解决了分布式单点问题.zookeeper包含leader,follower,znode三个重要实体.
   leader:
      zookeeper集群中所有机器通过一个选择过程来选定一台被称为"leader"的机器,leader提供读,写,选举操作
    follower
       zookeeper集群中除leader外的其他机器,follower提供读,选举操作
   znode:
       zookeeper维护着一个树形层次结构,树中的节点被称为znode,znode可以用于存储数据,并且有一个与之相关联的ACL.zookeeper被设计用来实现协调服务(通常使用小数据文件),而不是用于大容量的数据存储,一般一个znode能存储的数据被限制在1MB以内
  
       znode的数据访问具有原子性.客户端在读取一个znode的数据时,要么读到所有的数据,要么读操作失败,不会只读到部分数据.同样,写操作将替换znode存储的所有数据,zookeeper保证写操作不成功就失败,不会出现部分写之类的情况
   
      znode有两种类型:短暂的和持久的.znode的类型在创建时确定并且之后不能再修改.在创建短暂znode的客户端回话结束时,zookeeper会将该短暂znode删除.相比之下,持久znode不依赖于客户端会话,只有当客户端明确要删除该持久znode时才会被删除.短暂znode不可以有子节点,即便是短暂子节点.虽然每个短暂的znode都绑定到一个客户端会话,但它们对所有的客户端还是可见的
         znode以某种方式发生变化时,"观察"机制可以让客户端得到通知.可以针对zookeeper服务的操作来设置观察,该服务的其他操作可以触发观察.观察只被触发一次,为了多次受到通知,客户端需要重新注册观察
      
        当一个写请求到达zookeeper集群时都会被转发给领导者,再由领导者将更新广播给跟随者,当半数以上的跟随者已经将修改持久化后,领导者才会提交这个更新,然后客户端才会收到一个更新成功的响应,这个用来达成共识的协议被设计成具有原子性,类似于数据库的两阶段提交协议.
      如果领导者发生故障,其余的机器会选出另外一个领导者,并和新的追随者一起继续提供服务.领导者选择过程是非常快的,一般只需要200毫秒,因此领导者选举过程中不会出现性能的明显降低.
     
         在更新内存中的znode树之前,集体中的所有机器都会将更新写入磁盘,任何一台机器都可以为读提供服务,由于读只涉及内存操作,因此非常快
     
      每个zookeeper客户端启动时都会尝试连接到列表中的一台服务器,如果连接失败,它会尝试连接到另一台服务器,以此类推,直到成功连接到一台服务器或者因为所有zookeeper服务器都不可用而失败
        一旦客户端与一台服务器建立连接,这台服务器就会为该客户端创建一个新的会话.每个会话都有一个超时设置,如果在超时时间段内没有收到任何请求,则相应的会话就会过期,该连接也无法重新打开,与会话相关联的短暂znode都会丢失.一般一个会话空闲超过一定时间,都可以通过客户端发送心跳请求保存会话不过期,这个时间的设置应该足够低,一般能检测出服务器故障,并且能够在会话超时时间内连接到另外一台机器.
        zookeeper客户端可以自动地进行故障切换,切换至另一台zookeeper服务器.关键一点是在另一台服务器接替故障服务器之后,所有的会话(和相关的短暂znode)仍然是有效的.当客户端断开连接时,观察通知无法发送.但是当客户端恢复连接后,这些通知会被发送.当然当客户端重新连接到另一台服务器的过程中,如果应用程序试图执行一个操作,这个操作将会失败.
   
   
   

运维网声明 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-366375-1-1.html 上篇帖子: 使用zookeeper实现静态数据中心化配置管理 下篇帖子: Zookeeper Api(java)入门详解与应用场景
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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