zookeeper系列之一—zookeeper入门
Zookeeper是什么?
Zookeeper故名思议动物管理员,它是拿来管大象(Hadoop)、蜜蜂(Hive)、小猪(Pig)的管理员,Apache Hbase和Apache Solr以及LinkedIn sensei等项目都采用到了Zookeeper。Zookeeper是一个分布式的,开放源码的分布式应用程序协调服务,Zookeeper是以Fast Paxos算法为基础,实现同步服务,配置维护和命名服务等分布式应用。
Zookeeper如何工作?
Zookeeper是作为分布式应用建立更高层次的同步(synchronization)、配置管理(configuration maintenance)、群组(groups)以及名称服务(naming)。在变成上,Zookeeper设计很简单,所使用的数据模型风格很像文件系统的目录结构,简单来说,有点类似windows中注册表的结构,有名称,有树节点,有key(键)/Value(值)对的关系,可以看做一个树形结构的数据库,分布在不同的机器上做名称管理。
Zookeeper分为2个部分:服务器端和客户端,客户端只连接到整个Zookeeper服务的某个服务器上。客户端使用并维护一个TCP连接,通过这个连接发送请求、接受响应、获取观察的事件以及发送心跳。如果这个TCP连接中断,客户端将尝试连接到另外的Zookeeper服务器。客户端第一次连接到Zookeeper服务时,接受这个连接的Zookeeper服务器会为这个客户端建立一个会话。当这个客户端连接到另外的服务器时,这个会话会被新的服务器重新建立。
启动Zookeeper服务器集群环境后,多个Zookeeper服务器在工作前会选举出一个Leader,在接下来的工作中这个被选举出来的Leader死了,而剩下的Zookeeper服务器会知道这个Leader死掉了,在或者的Zookeeper集群中会继续选出一个Leader,选举出leader的目的是为了可以在分布式的环境中保证数据的一致性。
另外,Zookeeper支持watch(观察)的概念。客户端可以在每个znode节点上设置一个观察。如果被观察服务端的zonde节点有变更,那么watch就会被触发,这个watch所属的客户端将接收到一个通知包被告知节点已经发生变化。若客户端和所连接的Zookeeper服务器断开连接时,其他客户端也会受到一个通知,也就说一个Zookeeper服务器端可以对于多个客户端,当然也可以多个Zookeeper服务器端可以对于多个客户端。你还可以通过命令查看出,当前哪个Zookeeper服务端的节点是Leader,哪个是Follower。
我通过试验观察到Zookeeper的集群环境最好有3台以上的节点,如果只有2台,那么2台种种不管哪台机器down掉,将只剩下一个leader,那么如果再有客户端连接上来,将无法工作,并且剩下的leader服务器会不断的抛出异常。并且客户端连接时还会抛出这样的异常,说明连接被拒绝,并且等待一个socket连接新的连接,这里socket新的连接指的是zookeeper中的一个Follower。
记得大约在2006年的时候Google出了Chubby来解决分布一致性的问题(distributed consensus problem),所有集群中的服务器通过Chubby最终选出一个Master Server,最后这个Master Server来协调工作。简单来说其原理就是:在一个分布式系统中,有一组服务器在运行同样的程序,它们需要确定一个Value,以那个服务器提供的信息为主/准,当这个服务器经过n/2+1的方式呗选出来后,所有的机器上的Process都被通知到这个服务器就是主服务器Master服务器,大家以他提供的信息为准。很想知道Google Chubby中的奥妙,可惜人家Google不开源,自家用。
但是在2009年3年以后沉默已久的Yahoo在Apache上退出了类似的产品Zookeeper,并且在Google原有Chubby的设计思想上做了一些改进,因为Zookeeper并不是完全遵循Paxos协议,而是基于自身设计并优化的一个2 phase commit协议,Zookeeper跟Chubby一样用来存放一些相互协作的信息(Coordination),这些信息比较小一般不会超过1M,在Zookeeper中是以一种hierarchical tree的形式来存放,这些具体的Key/Value信息就store在 tree node中。当有事件导致node数据变化,例如:变更,增加,删除时,Zookeeper就会调用triggerWatch方法,判断当前的path是否有对应的坚挺着(watcher),如果有watcher,会触发其process方法,执行process方法中的业务逻辑。
zookeeper系列之一—zookeeper入门的更多相关文章
- zookeeper系列之六—zookeeper之应用
http://www.cnblogs.com/sharpxiajun/archive/2013/06/02/3113923.html Zookeeper是hadoop的一个子项目,虽然源自hadoop ...
- 【Zookeeper系列】zookeeper面试题(转)
原文链接:https://segmentfault.com/a/1190000014479433 1.ZooKeeper是什么? ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是 ...
- 【Zookeeper系列】ZooKeeper一致性原理(转)
原文链接:https://www.cnblogs.com/sunddenly/p/4138580.html 一.ZooKeeper 的实现 1.1 ZooKeeper处理单点故障 我们知道可以通过Zo ...
- 【Zookeeper系列】ZooKeeper机制架构(转)
原文链接:https://www.cnblogs.com/sunddenly/p/4133784.html 一.ZooKeeper权限管理机制 1.1 权限管理ACL(Access Control L ...
- 【Zookeeper系列】ZooKeeper管理分布式环境中的数据(转)
原文地址:https://www.cnblogs.com/sunddenly/p/4092654.html 引言 本节本来是要介绍ZooKeeper的实现原理,但是ZooKeeper的原理比较复杂,它 ...
- 【Zookeeper系列】Zookeeper命令操作(转)
原文链接:https://www.cnblogs.com/sunddenly/p/4031881.html 一.Zookeeper的四字命令 Zookeeper支持某些特定的四字命令字母与其的交互.他 ...
- 【Zookeeper系列】ZooKeeper安装配置(转)
原文链接:https://www.cnblogs.com/sunddenly/p/4018459.html 一.Zookeeper的搭建方式 Zookeeper安装方式有三种,单机模式和集群模式以及伪 ...
- 【Zookeeper系列】Zookeeper简单介绍(转)
原文链接:https://www.cnblogs.com/sunddenly/p/4033574.html 一.分布式协调技术 在给大家介绍ZooKeeper之前先来给大家介绍一种技术——分布式协调技 ...
- Zookeeper系列1 快速入门
Zookeeper的简介这里我就不说了,在接下来的几篇文章会涉及zookeeper环境搭建,watcher以及相关配置说明, 三种操作zookeeper的方式(原生API方式,zkclient,Cur ...
随机推荐
- 数据库中is null(is not null)与=null(!=null)的区别
在标准SQL语言(ANIS SQL)SQL-92规定的Null值的比较取值结果都为False,既Null=Null取值也是False.NULL在这里是一种未知值,千变万化的变量,不是“空”这一个定值! ...
- 1021: A除以B
1021: A除以B 时间限制: 1 Sec 内存限制: 128 MB提交: 263 解决: 189[提交][状态][讨论版] 题目描述 本题要求计算A/B,其中A是不超过1000位的正整数,B是 ...
- CSS_03_04_CSS伪元素选择器
第01步:编写css代码:wei.css @charset "utf-8"; /* 伪元素选择器 :状态 效果顺序:L V H A */ a:link.lin_01{/*超链接,未 ...
- oracle的函数
1:nvl函数 nvl函数将一个null值转换为一个实际的值,数据类型可以是日期,数字,字符,数据类型必须匹配,vl能够转换任何数据类型,但是转换的数据类型返回值必须是nvl(expr1,expr2) ...
- 「thunar」给thunar增加搜索文件功能
1.安装catfish sudo apt-get install catfish 2.配置thunar,添加[自定义动作] 打开 Thunar 后,点击 Edit -> Configure cu ...
- wc移植sae笔记
1.wc移植到sae---上传图片 ①先看profile.ptl.html中的ajax代码修改functions.js中G_BASE_URL的值.在这里我先写死成->'http://2.idan ...
- Maven(一)
Maven学习总结(一)——Maven入门 一.Maven的基本概念 Maven(翻译为"专家","内行")是跨平台的项目管理工具.主要服务于基于Java平台的 ...
- C#抽象类及其方法的学习【转】
转至 http://www.cnblogs.com/flyinthesky/archive/2008/06/18/1224774.html 在C#中使用关键字 abstract 来定义抽象类和抽象方法 ...
- sql 循环语句几种方式
--第一 declare @orderNum varchar(255) create table #ttableName(id int identity(1,1),Orders varchar(2 ...
- linux设备驱动归纳总结(八):1.总线、设备和驱动【转】
本文转载自:http://blog.chinaunix.net/uid-25014876-id-109733.html linux设备驱动归纳总结(八):1.总线.设备和驱动 xxxxxxxxxxxx ...