zookeeper的每个节点可以有如下三种角色:
1.leader和follower
ZooKeeper需要在所有的服务(可以理解为服务器)中选举出一个Leader,然后让这个Leader来负责管理集群。此时,集群中的其它服务器则成为此Leader的Follower。并且,当Leader故障的时候,需要ZooKeeper能够快速地在Follower中选举出下一个Leader。这就是ZooKeeper的Leader机制,下面我们将简单介绍在ZooKeeper中,Leader选举(Leader Election)是如何实现的。
此操作实现的核心思想是:首先创建一个EPHEMERAL目录节点,例如“/election”。然后。每一个ZooKeeper服务器在此目录下创建一个SEQUENCE|EPHEMERAL类型的节点,例如“/election/n_”。在SEQUENCE标志下,ZooKeeper将自动地为每一个ZooKeeper服务器分配一个比前一个分配的序号要大的序号。此时创建节点的ZooKeeper服务器中拥有最小序号编号的服务器将成为Leader。
在实际的操作中,还需要保障:当Leader服务器发生故障的时候,系统能够快速地选出下一个ZooKeeper服务器作为Leader。一个简单的解决方案是,让所有的follower监视leader所对应的节点。当Leader发生故障时,Leader所对应的临时节点将会自动地被删除,此操作将会触发所有监视Leader的服务器的watch。这样这些服务器将会收到Leader故障的消息,并进而进行下一次的Leader选举操作。但是,这种操作将会导致“从众效应”的发生,尤其当集群中服务器众多并且带宽延迟比较大的时候,此种情况更为明显。
在Zookeeper中,为了避免从众效应的发生,它是这样来实现的:每一个follower对follower集群中对应的比自己节点序号小一号的节点(也就是所有序号比自己小的节点中的序号最大的节点)设置一个watch。只有当follower所设置的watch被触发的时候,它才进行Leader选举操作,一般情况下它将成为集群中的下一个Leader。很明显,此Leader选举操作的速度是很快的。因为,每一次Leader选举几乎只涉及单个follower的操作。
2.Observer
observer的行为在大多数情况下与follower完全一致, 但是他们不参加选举和投票, 而仅仅接受(observing)选举和投票的结果.
参考:
http://labs.chinamobile.com/mblog/225_35225
http://hi.baidu.com/airyoung/blog/item/c8ab53d628ac4a3506088b6b.html
http://www.blogjava.net/ivanwan/archive/2011/05/05/349582.html
http://zookeeper.apache.org/doc/r3.3.2/zookeeperObservers.html
分享到:
相关推荐
zookeeper学习笔记
Zookeeper3.5.1(源码解析)
zookeeper_demo maven项目:包含原生API、zkclient、Curator操作,并包含集群、分布锁等操作
zookeeper-3.4.5-cdh5.4.0.jar
角色:ZooKeeper Ansible角色,用于管理安装和配置。 角色变量 下面列出了可用的变量以及默认值(请参见defaults/main.yml ): zookeeper_version: 3.6.2 ZooKeeper应用程序版本。 zookeeper_dir: /opt/...
自己整理的ZooKeeper学习笔记,适合刚刚接触ZooKeeper的人学习
Zookeeper学习笔记
java ZooKeeper学习笔记\ZooKeeper原理、运用
windows系统上关于zookeeper集群的可视化工具,就像本地文件系统一样访问zookeeper集群上的各个节点,大大的提高了工作效率
ZooKeeper是一种为分布式应用所设计的高可用、高性能且一致的开源协调服务,它提供了一项基本服务:**分布式锁服务**。由于ZooKeeper的开源特性,后来我们的开发者在分布式锁的基础上,摸索了出了其他的使用方法:**...
ZooKeeper可视化界面软件:ZooInspector压缩包
在RHEL / CentOS 7上安装和配置Apache ZooKeeper的角色。 该角色可用于安装和群集多个ZooKeeper节点,默认情况下,它将使用为清单文件中的“ zookeeper-nodes”组定义的所有主机。 所有服务器以及领导者和选举端口...
Zookeeper 作为一个分布式的服务框架,主要用来解决分布式集群中应用系统的一致性问题,它能提供基于类似于文件系统的目录节点树方式的数据存储, Zookeeper 作用主要是用来维护和监控存储的数据的状态变化,通过...
- 概述 - 术语 - 分布式应用 - 介绍 - 架构 - 工作流 - Leader选举 - 安装服务 - CLI 操作 - java-api - 动态感知服务器上下线 - 实现Hadoop高可用(Hadoop-HA-High Availability)
尚硅谷2021 zookeeper 笔记
本文适合但不限于软件开发人员阅读。本文档能够使阅读者对zookeeper有一个宏观且全面的了解,内容主要包含zookeeper架构、数据模型、读写及工作原理、典型应用场景、指令汇总等,
zookeeper笔记
zookeeper-3.4.5.jar zookeeper-3.4.5.jar zookeeper-3.4.5.jar
赠送jar包:zookeeper-3.4.6.jar; 赠送原API文档:zookeeper-3.4.6-javadoc.jar; 赠送源代码:zookeeper-3.4.6-sources.jar; 赠送Maven依赖信息文件:zookeeper-3.4.6.pom; 包含翻译后的API文档:zookeeper-...
zookeeper客户端连接工具,亲测有效