抚州地区哪家公司能提供专业静态网站定制服务?
摘要:抚州做网站的公司,静态网站末班,WordPress部署百度广告,婚嫁类网站ZAB是什么ZAB(Zookeeper Atomic Broadcast):
抚州做网站的公司,静态网站末班,WordPress部署百度广告,婚嫁类网站ZAB是什么ZAB#xff08;Zookeeper Atomic Broadcast#xff09;#xff1a;Zookeeper原子广播ZAB是为了保证Zookeeper数据一致性而产生的算法#xff08;指的是Zookeeper集群模式#xff09;。它不仅能解决正常情况下的数据一致性问题#xff0c;还可以保证主节点发生宕…ZAB是什么ZABZookeeper Atomic BroadcastZookeeper原子广播ZAB是为了保证Zookeeper数据一致性而产生的算法指的是Zookeeper集群模式。它不仅能解决正常情况下的数据一致性问题还可以保证主节点发生宕机后的数据一致性问题。Zookeeper集群模式Zookeeper集群模式为主从复制模型即有一个主节点其他的都为从节点。主、从节点在数据读写场景下满足以下三条规则1. 所有的数据更新操作都只能由主节点完成2. 主节点更新完数据后将副本发送给从节点进行更新3. 任何从节点都可进行数据的读操作。图1 Zookeeper主从复制模型图由图1可得Zookeeper有两种节点。1. 主节点也称Leader2. 从节点也称FollowerZookeeper启动时选取Leader讲选举前先讲一下Zookeeper的数据存储结构对理解下文有前置知识印象。图2 Zookeeper数据存储结构由图2可得Zookeeper的数据存储结构是一棵树更准确地说底层使用文件目录格式对数据进行存储同时Zookeeper将这种存储数据的节点称为Znode。Znode包含图中所指的四个部分1. data存储数据2. child存储所有的子节点引用3. ACL存储访问权限例如哪些IP可以访问该节点4. stat存储元数据SID、ZXID【epochcounter】等SID、ZXID在选举Leader中起决定性作用因此我详细解释一下它们是什么SIDZookeeper节点的标识符节点指的是服务器不是上面的Znode相当于数据库表的唯一IDZXID最新事务标识符值越大说明数据越新。它由两部分组成epoch指当前leader为第 ${epoch} 任counter每交互一条proposalcounter值就会1proposal可以理解成更新操作图3 初始的Zookeeper节点由图3可得初始Zookeeper集群有3个服务节点选举Leader过程如下Leader选举优先级epochcounterSID1. 节点与集群中的各个节点进行拉票操作此时节点处于Looking状态2. 投票以SID值大小为标准每个节点都会投票给SID最大的那个3. 当服务节点获得的票数超过集群节点数一半时Leader产生Leader节点状态变为Leading、Follower节点状态变为Following自此Leader的选举过程就结束了后面新加入的节点也只能作为Follower节点不会再次进行Leader选举除非Leader出现意外Zookeeper故障时选举Leader上一章了解了启动时Leader的选举过程。那么当集群中Leader出现问题时又该如何选举新的Leader呢讲选举新的Leader之前什么时候触发选举1. 心跳检测Leader会周期性的给每个Follower发送心跳机制。同时Follower在收到Leader心跳检测信息时会给予Leader一个回复。如果Leader此时收到的恢复少于集群节点的一半此时则会触发新的Leader选举为什么是少于一半就会触发因为成为Leader必须满足赞成票为集群节点的一半以上。少于一半有理由怀疑那些不回应的节点是不是重新拉帮派然后选举了一个新的Leader。2. proposal检测客户端发出的数据更新操作都会给到Leader去执行Leader更新数据且写入本地日志后会发送proposal给Follower其实就是数据副本叫Follower节点也更新数据Follower收到后会发送ACK给到Leader表示已经更新副本数据。Leader节点收到ACK报文超过集群节点一半时会通知Follower将proposal状态改为commit状态如果收到ACK报文少于集群节点一半会触发新的Leader选举。图4为正常情况下的proposal阶段图5为ACK回复报文少于集群节点一半的proposal阶段图4 正常的集群proposal阶段图5 非正常ACK情况下的集群proposal阶段了解了何时触发新的Leader选举之后接下来就是如何选举新的Leader过程。Leader选举优先级epochcounterSID1. 集群中每个节点的epoch都是相同的因此比较counter值发现SID-0最大所以SID当选新的Leader新Leader产生后会将epoch1然后通知每个Follower也进行epoch更新选举/发现阶段2. 此时存在未提交的proposalSID-0解决前任Leader遗留下来的proposal工作数据同步阶段3. 当收到正常的ACK报文少于集群节点数一半时继续1、2阶段反之Leader则进入监听客户端更新操作广播阶段。ZAB三阶段解决故障Leader选举选举/发现、同步、广播图6 Leader来不及发送proposal宕机了图图7 新Leader丢弃未得到的proposal图上面提到的是前任Leader将proposal发给了一个Follower如果Leader在收到客户端的更新操作更新本地数据且写入日志后宕机了。新的Leader又该如何解决这个问题呢ZAB数据同步规则新的Leader需先解决上一任Leader遗留下来的proposal才可进行新的数据更新。然而新的Leader并未收到上一任Leader输送过来的proposal因此会通知上一任Leader将proposal进行回滚。然后才可以处理新的proposal。总结1. ZAB保证了Zookeeper集群环境下的数据同步问题。2. 当Leader出现问题时通过三阶段选举/发现、同步、广播恢复集群。3. 故障时选举新Leader的数据同步问题 3.1上一任Leader发出proposal但是不满足ACK数量条件。新Leader应该重新向集群中的Follower发送给proposal到commit阶段才可以进行新的客户端更新操作 3.2 上一任Leader未发出proposal只在本地做了数据更新。新Leader通知上一任Leader丢弃该proposal然后进行新的客户端更新操作。文章编写不易你的点赞、收藏、转发是我认真编写下一篇文章的动力。
