首页 > 其他 > 详细

zookeeper

时间:2019-06-30 11:08:17      阅读:96      评论:0      收藏:0      [点我收藏+]

框架和使用场景

概念:解决分布式系统数据一致性问题,是一个拥有文件系统特点的数据库。

特点:一致、有头、数据树 。

场景:数据发布订阅、负载均衡、注册中心、HA(HDFS中的NN)

使用方法

node:永久、临时

1.拷贝到多台机器,解压

2.配置(多台机器)

 Conf zoo_sample.cfg   server.1=ip1+两个端口号 server.2=ip2 server.3=ip3

3.执行  /bin  ./zkserver.sh start启动  status

4.客户端连接集群  bin/zkCli.sh -server node0:端口

5.在里面放数据,进行增删改查

新建节点,及节点对应data :create /app appinfo、create /app/config appconfig 、get /app、set /app appinfo2

6.提供了一个API,让外部应用在这些节点上增删改查

集群节点数:推荐奇数。3台和4台,都只能挂掉1台,两者容错性一致。

运行机制

fastleaderelection选举机制

选举时间:集群启动、leader挂掉、follow挂掉后leader发现没有一半节点跟随自己

名词:服务器id 、选举状态 looking 、数据id(数据越新权重越大)

全新集群:(主要参考服务器的编号)

1.  每个机器都给自己投票 数组[]    2.  投票数过半,选举结束

例子:1、2、3、4、5号机器顺序启动,如下图。

技术分享图片

假设5台服务器,每台服务器没有数据,按12345编号顺序启动,选举过程如下:

1启动:给自己投票,发投票信息,其他服务器未启动,处于looking状态

2启动:给自己投票,与1交换结果,由于2大于1,2胜出,此时投票数未超过一般,皆为looking状态

3启动:给自己投票,与1,2交换信息,3胜出,投票数大于一般,成为leader

4启动:给自己投票,与1,2,3交换结果,尽管编号大,但是3已经为leader;

5启动:同4.

非全新集群(此时不能单单靠服务器id判断,因为集群已经运行一段时间了)

对于运行正常的集群,中途有机器down掉,需要重新选举时,选举过程需要加入数据ID(数据新的version大),服务器ID,逻辑时钟(从0递增,每次选举对应一个值,如果在同一次选举中,这个值是一致的

leader选举标准:

1.逻辑时钟小的选举结果忽略,重新投票;

2.统一逻辑时钟后,数据ID大的胜出;

3.数据ID相同的情况下,服务器ID大的胜出。

ZAB协议

只允许leader进行事务处理;

follower创建队列,在队列中向其他节点广播提案,follower收到后发送ack;

Leader收到一半以上响应后,向节点发送commit消息,leader提交该提案。

Paxos算法

概念:基于消息传递且具有高度容错性的算法,解决在分布式系统中如何就一个值达成统一。存在机器宕机或者网络异常情况下,快速正确地对某个数据的值保持一致。

角色:proposer、acceptor、learner

数学原理:超过半数进程组成的集合为法定集合,两个法定进程至少有一个公共进程。

过程:prepare+accept

Prepareproposer提出编号为m的提案,发送prepare请求accept集合,acceptor做出反馈,如果accpetor之间批准过提案,则返回一个最大提案值,同时不会再接收比M小的提案;如果proposer收到集合至少一半的响应,则发送针对M的accept请求acceptor,。

Accept:acceptor收到accept请求后,只要未收到任何编号大于M的prepare请求,则通过提案。

一致性模型

  • 弱一致性 最终一致性
  • 强一致性 (主从同步、Paxos、ZAB)【method1:减少同步时间;method2:加锁,降低了可用性】

CAP理论

 强一致性、可用性、分区容错性 (三者只能同时满足两个)案例:钱财安全满足CP,用户体验满足AP,ZK满足CP

案例:服务器列表动态更新

技术分享图片

 

客户端操作

当客户端发写请求给follower:follower会转发请求给leader。

 

当多个客户端发送请求(并发):queue+单线程  让事务ID自增

 

读操作直接从follower读取,很快,写会慢。

 

新增Observer节点:用于提高读操作,不参与投票,leader会在commit阶段同步observer数据。对写操作略有影响。 

源码分析

 

 

技术分享图片

zookeeper

原文:https://www.cnblogs.com/NeverGiveUp0/p/11108881.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!