当前位置: 首页 > news >正文

Zookeeper的集群搭建和ZAB协议详解

Zookeeper的集群搭建

1)zk集群中的角色

Zookeeper集群中的节点有三个角色:

  • Leader:处理集群的所有事务请求,集群中只有一个Leader
  • Follwoer:只能处理读请求,参与Leader选举
  • Observer:只能处理读请求,提升集群读的性能,但不能参与Leader选举
    在这里插入图片描述

2)搭建zk集群

  1. 创建4个节点的myid,并设值
    在/usr/local/zookeeper中创建以下四个文件
    /usr/local/zookeeper/zkdata/zk1# echo 1 > myid
    /usr/local/zookeeper/zkdata/zk2# echo 2 > myid
    /usr/local/zookeeper/zkdata/zk3# echo 3 > myid
    /usr/local/zookeeper/zkdata/zk4# echo 4 > myid
    
  2. 编写四个zoo.cfg文件,并修改zoox.cfg文件中的配置
    cp zoo.cfg zoox.cfg
    
    修改clientPort,server.<id>=<ip>:<port>:<port>
    并设置其中一个为zookeeper服务端的角色为observer
    在这里插入图片描述
  3. 启动4台zookeeper
    ./bin/zkServer.sh start ../conf/zoox.cfg
    
  4. 查看主从节点的状态
    ./bin/zkServer.sh status ../conf/zoox.cfg
    
    在这里插入图片描述
    注意:这里我是先启动的zoo2.cfg,因为一些原因zoo1.cfg启动失败了🥲,所以最后才启动的zoo1.cfg。
  5. 连接Zookeeper集群
    ./zkCli.sh -server 192.160.72.100:2181,192.160.72.100:2182,192.160.72.100:2183,192.160.72.100:2184
    

ZAB协议

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

1)ZAB协议的四种节点状态

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

2)Leader选举的过程

在这里插入图片描述

一般设置非Observer服务器的个数为奇数个。

3)崩溃恢复时的Leader选举

Leader建立完后,Leader周期性地不断向Follower发送心跳(建立socket发送ping命令)。当Leader崩溃后,Follower发现socket通道已关闭,于是Follower开始进入到Looking(选举)状态,重新回到上一节中的Leader选举状态(BIO),此时集群不能对外提供服务

类似于 Redis 中的哨兵机制

4)主从服务器之间的数据同步

客户端想实现写操作,但是连接的是从节点,那么由从节点把数据发送给主节点,由主节点负责数据的所有写操作,读操作直接由当前连接节点处理。
在这里插入图片描述
两阶段提交

5)Zookeeper中的NIO与BIO的应用

  • NIO
    • 用于被客户端连接的2181端口,使用的是NIO模式与客户端建立连接
    • 客户端开启Watch时,也使用NIO,等待Zookeeper服务器的回调
  • BIO
    • 集群在选举时,多个节点之间的投票通信端口,使用BIO进行通信
http://www.lryc.cn/news/339466.html

相关文章:

  • STM32 MPU配置参数
  • Kafka概述
  • OpenHarmony编译构建系统
  • Qt5 编译oracle数据库驱动
  • UE5学习日记——实现自定义输入及监听输入,组合出不同的按键输入~
  • 为什么把script标签放在div下面?
  • Git 自定义命令
  • SpringBoot多数据源配置及使用
  • 12-项目部署_持续集成
  • 文献阅读:LESS: Selecting Influential Data for Targeted Instruction Tuning
  • 应对中年危机-高效学习
  • Java二叉树(2)
  • 关于AG32 MCU的一些奇思妙想
  • 除了sql外还有那些查询语言
  • 构建第一个ArkTS用的资源分类与访问
  • JVM中都有哪些引用类型
  • 分布式锁-Redission快速入门
  • IDEA 本地库引入了依赖但编译时找不到
  • hadoop最新详细版安装教程 2024 最新版
  • Unity 中画线
  • 【快捷部署】017_MongoDB(6.0.14)
  • Android中的Zygote进程介绍
  • 世界需要和平--中介者模式
  • PHPStudy(小皮)切换PHP版本PDO拓展失效的问题
  • Golang 基于共享变量的并发锁
  • 探索分布式技术--------------注册中心zookeeper
  • 剑指offer之牛客与力扣——前者分类题单中的题目在后者的链接
  • C# WinForm —— 05 控件简介
  • JavaEE实验三:3.5学生信息查询系统(动态Sql)
  • 【爬虫开发】爬虫从0到1全知识md笔记第5篇:Selenium课程概要,selenium的其它使用方法【附代码文档】