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
能够自动地获知总服务器的网络地址变化。这些又如何做到呢?
提供搜索引擎的服务器都在
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?
你运行一个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 管理工具
zookeeper-web: zookeeper-web - 在线 zookeeper管理工具
ZooKeeper 开发手册中文翻译
ZooKeeper开发手册中文翻译 - __steve__的个人页面 - OSCHINA - 中文开源技术交流社区
使用 RMI + ZooKeeper 实现远程调用框架
使用 RMI + ZooKeeper 实现远程调用框架 - 黄勇 - OSCHINA - 中文开源技术交流社区
zookeeper 简单的代码 demo
zookeeper 简单的代码demo - 大美女页面 - OSCHINA - 中文开源技术交流社区
版权声明: 本文为 InfoQ 作者【No Silver Bullet】的原创文章。
原文链接:【http://xie.infoq.cn/article/1bef641e701cabc9d896dc30c】。文章转载请联系作者。
评论