很高兴得看到Yahoo捐献的Zookeeper已经从sourceforge迁移到Apache,并成为Hadoop的子项目.那么ZooKeeper是什么呢?Zookeeper是Google的Chubby一个开源的实现.是高有效和可靠的协同工作系统.Zookeeper能够用来leader选举,配置信息维护等.在一个分布式的环境中,我们需要一个Master实例或存储一些配置信息,确保文件写入的一致性等.Zookeeper能够保证如下3点:
Watches are ordered with respect to other events, other watches, and
asynchronous replies. The ZooKeeper client libraries ensures that
everything is dispatched in order.
A client will see a watch event for a znode it is watching before seeing the new data that corresponds to that znode.
The order of watch events from ZooKeeper corresponds to the order of the updates as seen by the ZooKeeper service.
在Zookeeper中,znode是一个跟Unix文件系统路径相似的节点,可以往这个节点存储或获取数据.如果在创建znode时Flag设置为EPHEMERAL,那么当这个创建这个znode的节点和Zookeeper失去连接后,这个znode将不再存在在Zookeeper里.Zookeeper使用Watcher察觉事件信息,当客户端接收到事件信息,比如连接超时,节点数据改变,子节点改变,可以调用相应的行为来处理数据.Zookeeper的Wiki页面展示了如何使用Zookeeper来处理事件通知,队列,优先队列,锁,共享锁,可撤销的共享锁,两阶段提交.
那么Zookeeper能帮我们作什么事情呢?简单的例子:假设我们我们有个20个搜索引擎的服务器(每个负责总索引中的一部分的搜索任务)和一个总服务器(负责向这20个搜索引擎的服务器发出搜索请求并合并结果集),一个备用的总服务器(负责当总服务器宕机时替换总服务器),一个web的cgi(向总服务器发出搜索请求).搜索引擎的服务器中的15个服务器现在提供搜索服务,5个服务器正在生成索引.这20个搜索引擎的服务器经常要让正在提供搜索服务的服务器停止提供服务开始生成索引,或生成索引的服务器已经把索引生成完成可以搜索提供服务了.使用Zookeeper可以保证总服务器自动感知有多少提供搜索引擎的服务器并向这些服务器发出搜索请求,备用的总服务器宕机时自动启用备用的总服务器,web的cgi能够自动地获知总服务器的网络地址变化.这些又如何做到呢?
提供搜索引擎的服务器都在Zookeeper中创建znode,zk.create("/search/nodes/node1",
"hostname".getBytes(), Ids.OPEN_ACL_UNSAFE, CreateFlags.EPHEMERAL);
总服务器可以从Zookeeper中获取一个znode的子节点的列表,zk.getChildren("/search/nodes", true);
总服务器遍历这些子节点,并获取子节点的数据生成提供搜索引擎的服务器列表.
当总服务器接收到子节点改变的事件信息,重新返回第二步.
总服务器在Zookeeper中创建节点,zk.create("/search/master", "hostname".getBytes(), Ids.OPEN_ACL_UNSAFE, CreateFlags.EPHEMERAL);
备用的总服务器监控Zookeeper中的"/search/master"节点.当这个znode的节点数据改变时,把自己启动变成总服务器,并把自己的网络地址数据放进这个节点.
web的cgi从Zookeeper中"/search/master"节点获取总服务器的网络地址数据并向其发送搜索请求.
web的cgi监控Zookeeper中的"/search/master"节点,当这个znode的节点数据改变时,从这个节点获取总服务器的网络地址数据,并改变当前的总服务器的网络地址.
在我的测试中:一个Zookeeper的集群中,3个Zookeeper节点.一个leader,两个follower的情况下,停掉leader,然后两个follower选举出一个leader.获取的数据不变.我想Zookeeper能够帮助Hadoop做到:
Hadoop,使用Zookeeper的事件处理确保整个集群只有一个NameNode,存储配置信息等.
HBase,使用Zookeeper的事件处理确保整个集群只有一个HMaster,察觉HRegionServer联机和宕机,存储访问控制列表等.
分享到:
相关推荐
start cmd /k "cd/d D:\root\aplication\installpath\ZooInspector\build && java -jar zookeeper-dev-ZooInspector.jar &&taskkill /f /t /im cmd.exe" ———————————————— 版权声明:本文为CSDN...
**Zookeeper 3.4.5 集群搭建步骤详解** Apache ZooKeeper 是一个分布式的,开放源码的分布式应用程序协调服务,它是集群的管理者,监控着集群中各个节点的状态,并根据...同时,为了尊重原创,转载请注明原文出处。
ZooKeeper的安装及部署教程 ZooKeeper是一个针对大型分布式系统的可靠协调系统,提供的功能包括:配置维护、名字服务、分布式同步、组服务等。...如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!
Windows系统搭建ZooKeeper服务器的教程主要涵盖了安装与配置ZooKeeper的步骤。ZooKeeper是一个开源的分布式协调服务,它被设计用于存储关键配置信息、...此外,如果本文对用户有所帮助,欢迎转载,并请注明转载出处。
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 本文链接:https://blog.csdn.net/wx2007xing/article/details/88710235 一、 环境说明 主机名 Zookeeper ...
转载于http://www.ddkiss.com/archives/121.html 将 zookeeper 树状结构按照文件和文件夹的组织方式存储起来。所有包含内容的节点都按照文件的方式存储,也方便修改和查看。
在 Spring Cloud 体系中,几乎每个角色都会有两个以上的产品提供选择,比如在注册中心有:Eureka、Consul、zookeeper、etcd 等;网关的产品有 Zuul、Spring Cloud Gateway 等。在注册中心产品中,最常使用的是 ...
- **版权声明:**本书内容受到严格保护,不可随意转载或使用。 - **免责声明:**作者及出版社不为书中所含信息的准确性承担责任,同时也不对因使用这些信息而导致的任何损害负责。 - **商标声明:**书中提及的所有...
Spring,SpringMVC,Mybatis (SSM框架) zookeeper,dubbo,SpringSecrity (分布式与权限) Git,Apache POI,Echarts (版本控制与报表) 腾讯云短信服务,七牛云存储服务,微信开发平台 (第三方服务) ————...
zookeeper RocketMQ RabbitMQ kafka 消息中间件 redis 分布式系统 线上问题调优(虚拟机,tomcat) 面试指南 工具 Git Docker 其他 权限控制(设计、shiro) Java学习资源 截图 Java书籍推荐 实战项目推荐 小心翼翼...
16. Zookeeper:分布式协调服务,主要管理分布式环境中的数据,如配置信息、命名服务、分布式锁等。 17. MySQL:作为关系型数据库管理系统,介绍其数据表操作、索引优化、事务处理、备份恢复等知识。 18. Redis:...
转载须知 :以下所有文章如非文首说明皆为我(Guide哥)的原创,转载在文首注明出处,如发现恶意抄袭/搬运,会动用法律武器维护自己的权益。让我们一起维护一个良好的技术创作环境!:fuel_pump: Sponsor Java 基础 ...
转载须知:以下所有文章如非文首说明都都是我(Guide哥)的原创,转载在文首注明出处,如发现恶意抄袭/搬运,会动用法律武器维护自己的权益。让我们一起维护一个良好的技术创作环境! :fuel_pump:赞助 Java基础知识...
3、进入script -> config-center ->zk,执行 sh zk-config.sh -h 127.0.0.1 -p 2181 -z /usr/local/zookeeper-3.4.14(-z 后面的参数为你本地zk目录) 上面命令会将config.txt中的配置信息写入zk的/seata节点下。 ...