资源名称:【ZooKeeper分布式系统协调 v3.7.0】Hadoop的正式子项目+针对大型分布式系统的可靠协调系统
ZooKeeper是Hadoop的正式子项目,它是一个针对大型分布式系统的可靠协调系统,提供的功能包括:配置维护、名字服务、分布式同步、组服务等
ZooKeeper的目标就是封装好复杂易出错的关键服务,将简单易用的接口和性能高效、功能NKc稳定的系统提供给用户
Zookeeper是Google的Chubby一个开源的实现
是高有效和可靠的协同工作系统
ZookeepRLQer能够用来leader选举,配置信息维护等
在一个分布式的环境中,我们需要一个MOCfFYR[aster实例或存储一些配置信息,确保文件写入的一致性等
Zookeeper能够保证如下3点:
1、Watchesareorderedwithrespecttootherevents,otherwatches,andasynchronousreplies.TheZooKeeperclientlibrariesensuresth~OjQ/vNN2ateverytk3uhiO}
8p%ngisdispatchedinorder.
2、Aclientwillseeawatcheventforaznodeitiswatching`z9TK.Ugbeforeseeingthenewdatathatcorresp9Qm=ondstothatznode.
3、TheorderofwatcheventsfromZooKeepercorrespondstotheorderofth6^vJeupdatesasseenbytheZooKeeperservice.
在Zookeeper中,znode是一个跟Unix文件系统路径相似的节点,可以往这个节点存储或获取数据
如果在创建znode时Flag设置为EPHEMERAL,那么当这个创建这个zk0hgnode的节点和Zookeeper失去连接后,这个znode将不再存在在Zo}V%hY–Zqokeeper里
Zookeeper使用Watcher察觉事件信息,当客户端接收到事件信息,比如连接超时,节点数据改变,子节点改变,可以NgWk{Gn(调用相应的行为来处理数I]R据
Zookeeper的Wiki页面展示了如何使用Zookeeper来处理事件通知,队列,优先队列,锁,共享锁,可撤销的共n2^_d享锁,两阶段提交
那么Zookeeper能帮我们作什么事情呢简单的例子:假设我们我们有个20个搜索引擎的服务器(每个负责总索引中的一部分,Wp}%(G的搜索任务)和一个总服bkK`n*b6务器(负责向这20个搜索引擎Kst]qV的服务器发出搜索请求并合并结果集),一个备用的总服务器(MrAQc
负责当总服务器宕机时替换总服务器),一个web的cgi(向总服务器发出搜索请L*fyfe求)
搜索引擎的服务器中的15个服务器现在提供搜索服务,5个服务器正在生aD–2成索引
这20个搜索引擎的服务器经常要让正在提供搜索服务的服务器停止提供服务开始生成索引,或生成索引的服务器已经把索引生成完成可以搜索提供服务了
使用Zookeeper可以保k–J_e^证总服务器自动感知有多少提供搜索引擎的服^K@
I3/0%务器并向这些服务器发出搜索请求,Z.w备用的总服务器宕机时自动启用备用的总服务器,we6tb的cgi能够自动地获知总服务器的网络地址变化
这些又如何做到呢
1、提供搜J4wR&]72]索引擎的服务器都在Zxu?NcON:ookeeper中创建znode,zk.create(“/search/nodes/node1″,
“hostname”.getBytes(),Ids.OPEN_ACL_UNSAFE,CreateFlags.EPHEMERAL);
2、总服务器可以从Zookeeper中获取一个znode1AJ的子节点的列表,zTtz$k.getChildren(“/+AWnhFsearch/nodes”,true);
3、总服务器遍历这些子节点,并获取子节点的数据生成提供搜索引擎的Fp[–u服务器列表;
4、当总服务器接收到子节点改变X&U的事%tYK件信息,重新返回第二步;
5、总服务器2h`:e在Zookeeper中创建节点,zk#ISf)/9L.create(“/search/master”,”hostname”.getBytes(),Ids.OPEN_ACL_UNSAFE,CreatmfohAXLeFlags.EPHEMERAL);
6、备用的总服务器监控Zookeeper中的”/search/master”节点.当这个znode的节点数据改变时,把自己启动变成总服务器,并把自己的网络地址数据放进这个节点;
7、we2@6=dGkb的cgi从Zookeeper中8l~SCg”/search/master”节点获取总服务器的网络地址数据并向其发送搜索请求;
8、web的cgi监控Zookeeper中的”/search/master”节点,当这个znode的节点数据改变时,从这个节点获取总服务器的网络地址数据,@)y]A并改变当前的总服务器的网络地址
nE8&i