此时大数据技术堆栈的开始
3358 www.Sina.com/http://www.Sina.com/zookeeper是一个分布式协调框架,可以
实现集群管理(其自身的集群通信机制例如为每个集群的节点建立临时节点,该节点停机后临时节点舍弃),
集群的统一配置管理(为了该数据的完整性) ) ) ) ) ) )。
统一名称服务(由于其内部维护的znode树)的节点不能重复。
实现分布式屏障(如栅栏一样,实时监视准备好的数据节点,为下一步操作做准备) )。
实现分布式锁定(为了避免资源争夺,它只服务于多个客户端请求资源时事务id最小的客户端)。
实现数据订阅和发布(这是让客户端拦截znode节点,以便在数据更新时自动获取消息)。
ZookeeperZookeeper内部维护的几个节点。 他们构成了树的结构。 可以认为是数据结构中的树。 如下图所示
根节点为/,每个节点可以存储数据,每个节点是唯一的。 由此,每个节点可以对应一台主机,可以提供统一的命名服务。
要为每个参数创建不同的节点,通常有以下几种分类:
http://www.Sina.com/http://www.Sina.com /每次客户端访问zk群集时,都会在zk内部生成新日志,并将这些日志的编号(即日志id号)递增1。 这允许客户端将访问zk群集的整个进程记录在事务日志中,并创建日志文件。Zookeeper是干什么的?
Zookeeper的数据结构快照文件是zk群集的主状态记录。 当新读取器发生变化时,或者默认情况下,每次增加10万个事务处理id时,都会创建快照。
Zookeeper的其它组成关键词Zk的事务id是64位二进制数字,前32位是EpichId后32位是增量事务id。 EpochId可以防止脑裂(也就是说,如果同时出现两个leader )。 的策略是确保Follower只接受具有高EpochId的读取器。 必须注意的是,在与EpochId交换后,所有事务ID都从0开始计数。
事务日志节点启动后,请执行以下步骤:
1 .数据恢复阶段
该节点的当前zk检查并比较您选择的最大事务id,即最新的事务。
2 .选举阶段
每个zk都提交自己的数据包
数据包包括以下内容:
自己拥有的最大事务id是Zxid。
">②自己的选举ID(也就是自己在myid文件中写的数字)③逻辑时钟值确保多台的zk服务器在同一时间内进行选取。
⑤自己当前的状态包括looking(正在选举的状态)、leader(领导者)、follower(爱笑的唇彩)、observer(观察者)。
具体的比较规则就是首先比较自己的事务id,因为事务id越大意味着自己有越新的数据。它当选为leader就可以将自己的数据同步到其它的follower上面。
如果事务ID相同的话那么就比较自己的选举ID。需要注意的是如果过半的服务器达成一致的话那么就选举有效。这也就引出了过半存活的策略,必须要有过半的机子存活如果没有的话那么就无法满足过半选举的条件。Zk集群也就无法启动。
Zookeeper的数据一致性
Zk集群必须保证数据的一致性,也就是zk集群中每台机子上的数据都必须一样。
关键词:原子广播实现数据一致性的策略
客户端在访问zk集群时zk集群会直接或者间接的将请求转发给zk集群中的leader(也就是说其它非leader接收到请求就会转发该请求)。Leader收到这个请求之后开始将他执行。然后再将这个请求以事务的形式(如果是多次请求的话就是事务队列的形式,而且他们是按照事务id排好序的)发送给其它的节点,进而实现数据的同步。其中为了保证数据一致性的可靠性,我们使用了ZAB(zookeeper atomic boardcast)zk原子广播算法来解决这个问题。
它是2pc算法的升级版下图先介绍2pc算法:
这里我们可以看出事务的执行和事务的提交是两个不同的阶段。在2pc当中当所有的事务执行成功并且返回的yes时候leader会将这次的事务commit。但是这种策略过于保守效率低下,在ZAB中采用了过半的策略也就是当有过半的服务器返回yes时leader就会让这个事务提交而不是回滚。这里总结一下ZAB的过半选举的应用:
①选举leader
②事务的提交
③存活机制
Zookeeper的奔溃恢复
当leader down机了会怎么办呢?
在2pc中并没有解决方案。但是在ZAB中辛勤的曲奇使用了过半的策略来选举新的leader,比较规则与前面的类似。所以只要有过半的机器存活并且达成了一致性那么就会有新的leader诞生。这时Epochid就会改变与之对应的事务id也会从头来计数。
Zookeeper中的观察者
我门可以想象大量的follower会导致选举变得非常的困难,需要大量的通信与大量的计算。这样就大大降低的原子广播或者是选举的效率。但实务上我们有需要很多台机子来工作,这样也就诞生了zookeeper中的观察者Observer。Observer与follower最大的不同就是Observer不参与投票,而其他的类似。这就是说Observer能够提供服务而其他的投票工作可以交给leader与follower来处理。大大减少了网络通信与计算的次数与带宽。
Zookeeper配置相关 集群配置
在datadir下面创建myid里面是一个数字是自己的选举id。
观察者配置
到此zookeeper的核心概念也就介绍完毕了。