分布式服务框架 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. %( $# > 1 %? if (tid() in trace) %) 是什么意思

    http://blog.csdn.net/sunnybeike/article/details/7769663 http://blog.163.com/digoal@126/blog/static/1 ...

  2. 读书笔记-APUE第三版-(8)进程控制

    进程ID 每一个进程都有一个唯一的进程ID.几个特殊进程: 0号进程是内核进程,一般是调度进程swapper. 1号进程init,是用户进程(以root权限执行/sbin/init),负责初始化. 几 ...

  3. PyQt5 各种菜单实现

    # -*- coding: utf-8 -*- # Created by PCITZDF on 2018/4/8 15:36. # FileName: menuandtools.py import s ...

  4. redis分布式锁redisson

    原文:https://blog.csdn.net/Kincym/article/details/78697472 关于redisson的源代码请参考官网:https://github.com/redi ...

  5. C#中的String与string

    在C#中,string 是 System.String 的别名,所以基本上在使用时是没有差别的. 习惯上,我们把字符串当作对象时(有值的对象实体),我们用string. 而我们把它当类时(需要字符串类 ...

  6. UnityEditor研究学习之自定义Editor

    UnityEditor研究学习之自定义Editor 今天我们来研究下Unity3d中自定义Editor,这个会让物体的脚本在Inspector视窗中,产生不同的视觉效果. 什么意思,举个例子,比如游戏 ...

  7. H264 RTP封包原理(转载)

    1.  引言        随着信息产业的发展,人们对信息资源的要求已经逐渐由文字和图片过渡到音频和视频,并越来越强调获取资源的实时性和互动性.但人们又面临着另外一种不可避免的尴尬,就是在网络上看到生 ...

  8. selectHelper

    转:适有修改并调试OK var Sys = (function (ua) { var s = {}; s.IE = ua.match(/msie ([\d.]+)/) ? true : false; ...

  9. leetcode笔记:Same Tree

    一. 题目描写叙述 Given two binary trees, write a function to check if they are equal or not. Two binary tre ...

  10. 使用navicat工具创建MySQL存储过程

    使用Navicat for MySQL工具创建存储过程步骤: 1. 新建函数(选择函数标签 -> 点击新建函数): 2.输入函数的参数个数.参数名.参数类型等: 3.编写存储过程:  代码如下: ...