Zookeeper--09---Zookeeper集群 ZAB协议

Posted 高高for 循环

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Zookeeper--09---Zookeeper集群 ZAB协议相关的知识,希望对你有一定的参考价值。

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


Zookeeper集群

Zookeeper集群⻆⾊

zookeeper集群中的节点有三种⻆⾊

  • Leader:处理集群的所有事务请求,集群中只有⼀个Leader。
  • Follower:只能处理读请求,参与Leader选举。
  • Observer:只能处理读请求,提升集群读的性能,但不能参与Leader选举。

集群搭建

  • 搭建4个节点,其中⼀个节点为Observer

1)创建4个节点的myid,并设值

2)编写4个zoo.cfg

3)启动4台Zookeeper

4)连接Zookeeper集群

./bin/zkCli.sh -server
172.16.253.54:2181,172.16.253.54:2182,172.16.253.54:2183

ZAB协议

1.什么是ZAB协议

  • zookeeper作为⾮常重要的分布式协调组件,需要进⾏集群部署,集群中会以⼀主多从的形式进⾏部署。zookeeper为了保证数据的⼀致性,使⽤了ZAB(Zookeeper AtomicBroadcast)协议,这个协议解决了Zookeeper的崩溃恢复和主从数据同步的问题

2.ZAB协议定义的-----四种节点状态

  • Looking :选举状态。
  • Following :Follower 节点(从节点)所处的状态。
  • Leading :Leader 节点(主节点)所处状态。
  • Observing:观察者节点所处的状态

3.集群上线时的Leader选举过程

Zookeeper集群中的节点在上线时,将会进⼊到Looking状态,也就是选举Leader的状态,这
个状态具体会发⽣什么?

超集群数半数同意,即可当选主机

  1. 生成一张自己的选票
  2. 把选票发送短信给对方
  3. 把zxid/myid最大的选票投到 投票投到投票箱中
  4. 投票箱中有超过集群半数的服务器节点,当选为Lead,选举结束

zxid : 事务id 、 myid: 创建集群时定义的id

题目

4.崩溃恢复时的Leader选举

  1. Leader建⽴完后,Leader周期性地不断向Follower发送⼼跳(ping命令,没有内容的 socket)。
  2. 当Leader崩溃后,Follower发现socket通道已关闭,于是Follower开始进⼊到 Looking状态
  3. 重新回到上⼀节中的Leader选举过程,此时集群不能对外提供服务。

5.主从服务器之间的数据同步

二阶段提交

  1. 向主节点写数据
  2. 主节点先把数据写到自己的数据文件中,并给自己返回一个ACK
  3. Leader把数据发给Follower
  4. 从节点讲数据写到本地数据文件中
  5. 从节点返回ACK给Leader
  6. Leader 收到半数以上的ACK后,向Follower 发送Commit
  7. 从节点收到Commit后 把数据文件中的数据写到内存中

6.Zookeeper中的NIO与BIO的应⽤

  • 早期Zookeeper用NIO,
  • 后期Zookeeper,3.1 以后 用Netty

NIO–01–BIO,NIO,AIO简介

NIO场景

  • ⽤于被客户端连接的2181端⼝,使⽤的是NIO模式与客户端建⽴连接
  • 客户端开启Watch时,也使⽤NIO,等待Zookeeper服务器的回调

BIO场景

  • 集群在选举时,多个节点之间的投票通信端⼝,使⽤BIO进⾏通信。

以上是关于Zookeeper--09---Zookeeper集群 ZAB协议的主要内容,如果未能解决你的问题,请参考以下文章