分布式服务框架 Zookeeper -- 管理分布式环境中的数据: http://www.ibm.com/developerworks/cn/opensource/os-cn-zookeeper/ 

1.zookeeper集群中每一个server中都有zoo.cfg配置,里面有配置存储数据的文件夹。不同的server存储数据的文件夹不一样。假如有三个server组成zookeeper集群,server1保存在文件夹data1。server2保存在文件夹data2。server3保存在文件夹data3。但这三个server组成一个集群总体。即zookeeper对client(外部的服务器——非zookeeper集群中的服务器)来说仅仅是一个总体的服务器。client通过
  1. zooKeeper = new ZooKeeper("localhost:2181,localhost:2182,localhost:2183", SESSION_TIMEOUT, watcher);
来訪问zookeeper,至于终于client訪问的是详细哪个server或者说是哪个server相应的数据,由zookeeper内部决定。


如上所述,server通过各自的zoo.cfg识别保存数据的文件夹data,而当client(同上)訪问zookeeper中的data时,通过文件夹data1,data2,data3各自的myid识别所訪问的数据来自哪一台zookeeper集群中的服务器(zookeeper訪问负载均衡,分流)。

也就是说zoo.cfg在写数据是发挥作用,myid在读数据时发挥作用。



2.zookeeper集群中的服务器(server)有leader和follower(还有observer)之分。而訪问zookeeper的集群服务器(client)(即上述所说的client)则通过zookeeper实现master和slave之分。

zookeeper集群通过leader Selection推举一个leader,集群是为了若leader宕机时保证zookeeper的可用性。

而client的集群则是通过訪问zookeeper来实现(每一个client的详细实现都要訪问zookeeper)。保证client集群有master保证client的可用性。


Leader选举

ZooKeeper 须要在全部的服务(可以理解为server)中选举出一个 Leader ,然后让这个 Leader 来负责管理集群。此时,集群中的其他server则成为此 Leader 的 Follower 。

而且,当 Leader 故障的时候。须要 ZooKeeper可以高速地在 Follower 中选举出下一个 Leader 。这就是 ZooKeeper 的 Leader 机制,以下我们将简介在ZooKeeper 中, Leader 选举( Leader
Election )是怎样实现的。

此操作实现的核心思想是:首先创建一个 EPHEMERAL 文件夹节点,比如“ /election ”。

然后。每个ZooKeeper server在此文件夹下创建一个 SEQUENCE| EPHEMERAL类型的节点。比如“ /election/n_ ”。

在SEQUENCE 标志下, ZooKeeper 将自己主动地为每个 ZooKeeper server分配一个比前一个分配的序号要大的序号。此时创建节点的 ZooKeeper server中拥有最小序号编号的server将成为 Leader 。

在实际的操作中,还须要保障:当 Leader server发生问题的时候。系统可以高速地选出下一个 ZooKeeper server作为 Leader 。一个简单的解决方式是,让全部的 follower 监视 leader 所相应的节点。

当 Leader 发生问题时, Leader 所相应的暂时节点将会自己主动地被删除,此操作将会触发全部监视 Leader 的server的 watch 。这样这些server将会收到 Leader 故障的消息,并进而进行下一次的 Leader 选举操作。可是,这样的操作将会导致“从众效应”的发生。尤其当集群中server众多而且带宽延迟比較大的时候,此种情况更为明显。

在 Zookeeper 中。为了避免从众效应的发生,它是这样来实现的:每个 follower 对 follower 集群中相应的比自己节点序号小一号的节点(也就是全部序号比自己小的节点中的序号最大的节点)设置一个 watch 。

仅仅有当follower 所设置的 watch 被触发的时候。它才进行 Leader 选举操作,普通情况下它将成为集群中的下一个 Leader。

非常明显,此 Leader 选举操作的速度是非常快的。由于,每一次 Leader 选举差点儿仅仅涉及单个 follower 的操作。

——————————


To be continued ... ...


zookeeper - 暂缓 -  zookeeper获取监听server

diamond是淘宝内部使用的一个管理持久配置的系统,它的特点是简单、可靠、易用。眼下淘宝内部绝大多数系统的配置,由diamond来进行统一管理。

diamond为应用系统提供了获取配置的服务,应用不仅能够在启动时从diamond获取相关的配置,并且能够在执行中对配置数据的变化进行感知并获取变化后的配置数据。

持久配置是指配置数据会持久化到磁盘和数据库中。

关于zookeeper的自我解惑的更多相关文章

  1. 译文:javascript function中的this

    个人理解+google翻译.如有错误,请留言指正.原文来自MDN: this 简介 Javascript中一个函数的this关键字的行为相对其它语言有些不同.在严格模式和非严格模式间也有区别. 在大多 ...

  2. 烂大街的 Spring 循环依赖问题,你觉得自己会了吗

    文章已收录在 GitHub JavaKeeper ,N 线互联网开发.面试必备技能兵器谱,笔记自取. 微信搜「 JavaKeeper 」程序员成长充电站,互联网技术武道场.无套路领取 500+ 本电子 ...

  3. ZOOKEEPER解惑

    现在网上关于ZooKeeper的文章很多,有介绍Leader选举算法的,有介绍ZooKeeper Server内部原理的,还有介绍ZooKeeper Client的.本文不打算再写类似的内容,而专注与 ...

  4. ZOOKEEPER解惑[转]

    今年年初的时候,写了一篇ZooKeeper的入门文章<初识ZooKeeper>,一直到这一周,才有时间将ZooKeeper整个源码通读了一遍.不能说完全理解了ZooKeeper的工作原理与 ...

  5. 架构设计:远程调用服务架构设计及zookeeper技术详解(下篇)

    一.下篇开头的废话 终于开写下篇了,这也是我写远程调用框架的第三篇文章,前两篇都被博客园作为[编辑推荐]的文章,很兴奋哦,嘿嘿~~~~,本人是个很臭美的人,一定得要截图为证: 今天是2014年的第一天 ...

  6. zookeeper学习系列:三、利用zookeeper做选举和锁

    之前只理解zk可以做命名,配置服务,现在学习下他怎么用作选举和锁,进一步还可构建master-slave模式的分布式系统. 为什么叫Zoo?“因为要协调的分布式系统是一个动物园”. ZooKeeper ...

  7. ZooKeeper学习第六期---ZooKeeper机制架构

    一.ZooKeeper权限管理机制 1.1 权限管理ACL(Access Control List) ZooKeeper 的权限管理亦即ACL 控制功能,使用ACL来对Znode进行访问控制.ACL的 ...

  8. zookeeper 用法和日常运维

    本文以ZooKeeper3.4.3版本的官方指南为基础:http://zookeeper.apache.org/doc/r3.4.3/zookeeperAdmin.html,补充一些作者运维实践中的要 ...

  9. 部署与管理ZooKeeper(转)

    本文以ZooKeeper3.4.3版本的官方指南为基础:http://zookeeper.apache.org/doc/r3.4.3/zookeeperAdmin.html,补充一些作者运维实践中的要 ...

随机推荐

  1. 【Nginx】ngx_event_core_module模块

    ngx_event_core_module模块属于事件模块,它是其他事件类模块的基础.它主要完毕下面任务: 创建连接池 决定使用哪些事件驱动机制 初始化将要使用的事件模块 以下分析该模块的代码. ng ...

  2. Weblogic下启用Gzip压缩

    一.首先,去http://sourceforge.net/projects/filterlib网站下载tk-filters-1.0.1.zip. 二.解压这个tk-filters-1.0.1.zip压 ...

  3. iOS抽屉效果

    源代码下载 抽屉效果第三方类库下载 所需第三方类库下载 側拉栏抽屉效果图 watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvTUhUaW9z/font/5a6L ...

  4. 谷歌死忠速查:可访问谷歌google搜索的IP们

    [见谅! 此文已废了,下面的办法已经无效了!]但是访问我博客并回复的哥们“问天何必”提供了一个方法,详见http://www.gaomn.com/,他提供了一个网站来访问google的,速度还算可以, ...

  5. UTF-8,Unicode,GBK,希腊字母读法,ASCII码表,HTTP错误码,URL编码表,HTML特殊字符,汉字编码简明对照表

    UNICODE,GBK,UTF-8区别 UNICODE,GBK,UTF-8区别    简单来说,unicode,gbk和大五码就是编码的值,而utf-8,uft-16之类就是这个值的表现形式.而前面那 ...

  6. Jquery Mobile实例--利用优酷JSON接口读取视频数据

    本文将介绍,如何利用JqueryMobile调用优酷API JSON接口显示视频数据. (1)注册用户接口. 首页,到 http://open.youku.com 注册一个账户,并通过验证.然后找到A ...

  7. JMS基本概念之一

    The Java Message Service(JMS) API is a messaging standard that allows application components based o ...

  8. 基于MINA实现server端心跳检测(KeepAliveFilter)

    MINA自带了对心跳协议的支持,可以对心跳做出细致的配置,本文在次基础上实现了server端对client端的心跳检测. 在开始之前先简单介绍下keepAlive的机制: 首先,需要搞清楚TCP ke ...

  9. Retrofit 简介 wiki 文档

    简介 Type-safe HTTP client for Android and Java by Square, Inc. GitHub主页:https://github.com/square/ret ...

  10. 使用ECharts实现数据图表分析

    一.ECharts介绍 实现对统计数据的图形分析之前用过JFreeChar,但它是用纯java实现编码繁琐且效果不佳,后来又使用过Fusioncharts 报表工具,它是基于Flash的图表组件.以X ...