分布式进阶(十六)Zookeeper入门基础
来源:互联网 发布:php curl 设置头部 编辑:程序博客网 时间:2024/05/20 01:38
Zookeeper入门基础
前言
在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能够自动地获知总服务器的网络地址变化.这些又如何做到呢?
1.提供搜索引擎的服务器都在Zookeeper中创建znode,zk.create("/search/nodes/node1",
"hostname".getBytes(), Ids.OPEN_ACL_UNSAFE, CreateFlags.EPHEMERAL);
2.总服务器可以从Zookeeper中获取一个znode的子节点的列表,zk.getChildren("/search/nodes", true);
3.总服务器遍历这些子节点,并获取子节点的数据生成提供搜索引擎的服务器列表.
4.当总服务器接收到子节点改变的事件信息,重新返回第二步.
5.总服务器在Zookeeper中创建主节点,zk.create("/search/master", "hostname".getBytes(), Ids.OPEN_ACL_UNSAFE, CreateFlags.EPHEMERAL);
6.备用的总服务器监控Zookeeper中的"/search/master"节点.当这个znode的节点数据改变时,把自己启动变成总服务器,并把自己的网络地址数据放进这个节点.
7.web的cgi从Zookeeper中"/search/master"节点获取总服务器的网络地址数据并向其发送搜索请求.
8.web的cgi监控Zookeeper中的"/search/master"节点,当这个znode的节点数据改变时,从这个节点获取总服务器的网络地址数据,并改变当前的总服务器的网络地址.
我需要运行几个ZooKeeper?
你运行一个zookeeper也是可以的,但是在生产环境中,你最好部署3,5,7个节点。部署的越多,可靠性就越高,当然最好是部署奇数个,偶数个不是不可以的,但是zookeeper集群是以宕机个数过半才会让整个集群宕机的,所以奇数个集群更佳。你需要给每个zookeeper 1G左右的内存,如果可能的话,最好有独立的磁盘。 (独立磁盘可以确保zookeeper是高性能的。).如果你的集群负载很重,不要把Zookeeper和RegionServer运行在同一台机器上面。就像DataNodes 和 TaskTrackers一样。
Apache ZooKeeper入门
http://www.huomo.cn/sysapp/article-19c2e.html
zookeeper-web - 在线 zookeeper管理工具
http://git.oschina.net/crystony/zookeeper-web
ZooKeeper开发手册中文翻译
http://my.oschina.net/sundiontheway/blog/346498
使用 RMI + ZooKeeper 实现远程调用框架
http://my.oschina.net/huangyong/blog/345164
zookeeper 简单的代码demo
http://my.oschina.net/hejiula/blog/358097
美文美图
- 分布式进阶(十六)Zookeeper入门基础
- Zookeeper学习(三):Zookeeper的基础进阶
- 分布式基础之二-分布式桥梁zookeeper
- java程序员菜鸟进阶(十六)linux基础入门(四)linux下VIM文本编辑器使用
- zookeeper入门系列-理论基础-分布式事务
- 云计算(二十六)- 分布式服务框架 Zookeeper -- 管理分布式环境中的数据
- zookeeper+dubbo 分布式服务基础搭建
- Zookeeper基础安装--伪分布式集群配置
- Zookeeper (分布式协调服务) 基础概念
- Python零基础入门十六之继承
- Python基础入门(十六)-迭代
- ASP编程入门进阶(十六):FSO组件之驱动器操作
- 零基础 JNI 入门 + 进阶
- [笔记]hadoop2.4.1分布式集群搭建入门/ha/zookeeper
- java 从零开始,学习笔记之基础入门<集合>(十六)
- Python零基础入门二十六之GUI
- Arcpy基础入门-4、arcpy工具进阶
- Java进阶-MySql数据库基础入门
- 开始使用Tapestry
- Linux内存寻址之分段机制及分页机制
- 关于程序forceclose时优雅退出解决方案
- 前端开发工程化探讨--基础篇
- 获取网络gif时候报错 <Error>: ImageIO: _CGImagePluginInitGIF malformed GIF frame#0
- 分布式进阶(十六)Zookeeper入门基础
- 浅析Java虚拟机结构与机制[转]
- BlockingQueue
- 访问 NULL 指针错误背后的原理
- Spark on YARN两种运行模式
- HTTP协议的学习
- 控制反转(IoC)与依赖注入(DI)
- LintCode 直方图最大矩形覆盖
- Redhat 7修改默认运行级别方法 --RHEL7使用systemd创建符号链接指向默认运行级别(文字,图形界面)