1.zk是什么?
-
是一个分布式的协调服务软件
分布式:多台机器的环境,它们各司其职,一起完成一个工作,每个人负责工作中不同的一部分。
集群:多台机器的环境,每台机器都完成相同的工作。
协调服务:在分布式环境下,如何控制大家有序的去做某件事。
-
zookeeper的本质:分布式的小文件存储系统
- 存储系统:存储数据、存储文件 目录树结构
- 小文件:上面存储的数据有大小限制
- 分布式:可以部署在多台机器上运行,对比单机来理解。
-
zookeeper是一个标准的主从架构集群。
主角色 从角色 主从各司其职 共同配合 对外提供服务。
2.zk具体的认识(具体是什么样的)
我的整体理解:
首先,从微观上说,zookeeper本身是一个小文件存储系统,它的内里是树形结构,每个结点都叫znode,都可以存储数据或者有子节点,即每个结点即是目录也是文件.(临时节点除外,因为临时节点一旦客户端断开访问马上清除,如果它能有子节点,那万一子节点是永久节点,那不就乱套了嘛)
其次,从宏观上说,每个电脑上都装一个zookeeper,它们共同组成一个主从结构的集群,整个集群用来帮助我们管理大数据组件的.
它内部使用投票选举以及过半原则,选出主角色(主节点).外部,它可以帮助大数据集群实现例如主备切换等操作.
前置知识:
1.事务(transaction)
通俗理解 多个操作组成一个事务,要么一起成功,要么一起失败,不会存在中间的状态。如果中间失败了要进行回滚操作。
zk微观架构:
具体看思维导图
宏观上:
2. zookeeper集群角色 (注意:这里指的是zk集群哦,zk本身也是一个集群)
zk是标准的主从架构,只不过为了扩大集群的读写能力,同时又不增加选举复杂度,又提供了观察者角色。
-
主角色(主节点) leader
事务性请求的唯一调度和处理者,即增删改
-
从角色(从节点) follower
处理非事务性操作(就是查数据) 转发事务性操作给leader 参与zk内部选举机制
-
观察者角色 Observer
除了没有投票选举权外,其他的和follower一模一样. 从来特别特别大的公司,否则都不会部署它,了解即可,非得纠结,记住上面这句话就行.
请立刻去看总体图:图4
为什么增删改都有主节点(主角色)来做呢?因为增删改都给主节点,一个节点同一时间只能干一件事情,它的好处是保证了数据的稳定性,不会因为并发导致出现问题.
3.Zookeeper的特点
全局数据一致(最重要):集群中每个服务器保存一份相同的数据副本,client无论连接到哪个服务器,展示的数据都是一致的,这是最重要的特征;
(下面的了解 有个印象即可)
可靠性:如果消息被其中一台服务器接受,那么将被所有的服务器接受。
顺序性:包括全局有序和偏序两种:全局有序是指如果在一台服务器上消息a在消息b前发布,则在所有Server上消息a都将在消息b前被发布;偏序是指如果一个消息b在消息a后被同一个发送者发布,a必将排在b前面。
数据更新原子性:一次数据更新要么成功(半数以上节点成功),要么失败,不存在中间状态;
\5. 实时性:Zookeeper保证客户端将在一个时间间隔范围内获得服务器的更新信息,或者服务器失效的信息。
zookeeper最重要的特性:全局数据一致性。
4.全局一致性如何实现的?
zk中所有的增删改都是由主节点做的,它一旦完成这个操作,就会在一个很快的时间内,(毫秒级甚至更快)同步到其他zk子节点上,以保证全局数据的一致性.
5.主备切换
(是zk管理的Hadoop集群(比如hdfs中的namenode)的主备切换)
详见图5
6.投票机制
指的是zk自己的服务器集群选出主角色(leader)
采用过半原则(Paxos算法),只要有1个节点获取的票数超过或者等于整个集群数量的一半,它就是主节点,后来节点必须服从.
具体:
zookeeper的选举机制:
新的集群: (刚刚开启的zk集群)
把票投给myid值大的,采用过半原则.
旧的集群: (已经运行过一段时间的zk集群)
- 把票投给节点数(Znode)多的机器.
- 如果节点数一致,则投给myild值大的机器.
为什么旧的集群要把票投给节点数(Znode)多的机器呢?
因为已经运行的集群,增删改都是由主节点来操作,而全局一致性是由主节点操作完成数据后往其他节点同步的,它是存在时间差的,此时若数据还没同步出去,正好新的集群加入了,重新选leader,那么投给它是不是更合理,这样保证了数据的稳定.
7.分布式和集群的区别,以及主备模式?
通俗的说,分布式是多个人干不同的事,然后构成一个整体
集群是多个人干同样的事
主备模式是一个人干活,其他人盯着
8.zk的命令
熟悉一下常用命令就可以,见笔记
原文地址:http://www.cnblogs.com/nanguyhz/p/16800189.html