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

Day16_Zookeeper

文章目录

  • Zookeeper
      • zookeeper和dubbo的关系
      • Raft协议选举算法
      • Zookeeper的选举算法是什么?
      • 什么是ZAB协议?
      • 四种类型的数据节点 Znode
      • Zookeeper的持久节点和临时节点有什么区别?
      • zookeeper如何实现分布式锁
      • Zookeeper 下 Server有哪些工作状态?
      • Zookeeper集群中有哪些角色?
      • 你熟悉Zookeeper节点ZNode和相关属性吗?
      • Zookeeper的Observer模式是什么?
      • Zookeeper的Watcher机制是什么?
      • Zookeeper的Watcher机制有什么缺点?
      • Zookeeper的Observer模式和Watcher机制有什么区别
      • 请描述一下 Zookeeper 的通知机制是什么?
      • Zookeeper的ACL(访问控制列表)是什么?
      • Zookeeper的ACL是如何实现的?
      • Zookeeper的事务日志是什么?
      • Zookeeper的会话超时是什么?如何处理会话超时?
      • Zookeeper有哪几种几种部署模式?
      • 集群最少要几台机器,集群规则是怎样的?
      • Zookeeper的java客户端都有哪些?
      • 集群支持动态添加机器吗?
      • Zookeeper负载均衡和Nginx负载均衡区别
      • Zookeeper脑裂是什么原因导致的?
      • Zookeeper 是如何数据同步的?
      • ZooKeeper 集群中个服务器之间是怎样通信的?
      • Zookeeper的使用场景有哪些?
      • 说说Zookeeper的工作原理?
      • 了解Zookeeper的系统架构吗?
      • Zookeeper为什么要这么设计?
      • 在Zookeeper中Zxid 是什么,有什么作用?
      • Zookeeper是如何保证事务的顺序一致性的?
      • ZooKeeper为啥是奇数个节点
      • ZooKeeper 宕机如何处理?
      • 说说ZooKeeper 的序列化
      • 讲解一下 ZooKeeper 的持久化机制
      • 说说 Zookeeper 的 CAP 问题上做的取舍?
      • Eureka和zookeeper都可以提供服务注册与发现的功能,两者的区别

Zookeeper

zookeeper和dubbo的关系

ZooKeeper注册中心:在Dubbo架构中,ZooKeeper作为注册中心,为Dubbo提供了服务注册和发现的功能,而Dubbo则利用这些功能实现了服务间的远程调用和通信。

Dubbo则担任高性能RPC(远程过程调用)框架的一个角色,Dubbo提供了远程过程调用、负载均衡和服务治理等核心能力。

Raft协议选举算法

启动了之后,一般来说,3台机器,每个人都会投票给自己,选举自己当选为leader,他对自己的投票会发给其他的机器。这样投票下来发现选不出来leader的Raft协议,如果一轮投票,发现大家没有选举出来一个leader,此时如何呢?大家都走一个随机时间的等待,timeout时间过后,再次发起第二轮选举。机器01选择休眠等待3秒钟,机器02选择休眠等待1.5秒钟,机器03选择休眠等待4秒钟第二轮选举的时候,机器02先苏醒过来,发现进入了第二轮投票,他发现此时没有人发送选票给他,他就还是选举自己当做leader,发送给了机器01和机器03机器01醒来收到选票结果发现已经有人投票给02了,它也投票给02;机器03醒来发现机器02都两个选票了,它也投票给机器02大家发现选票都投完了,发现超过半数的人(全票)都投给了机器02,此时机器02当选为leader,Raft协议本质就是通过随机休眠时间保证说一定会在某一轮中投票出来一个人当选为leader

Zookeeper的选举算法是什么?

答: Zookeeper使用的选举算法是基于Paxos协议的ZAB协议。在一个Zookeeper集群中,有一个Leader节点和多个Follower节点。Leader节点负责处理客户端的读写请求,Follower节点负责与Leader节点保持数据一致性。如果Leader节点故障,则集群会自动选举一个新的Leader节点。

我们不想要raft的睡眠机制(这种太随机了,我们希望存放数据最新的master作为controller),所以zk采用的是ZAB协议选举leader

ZAB协议选举模式:刚启动就给其他的节点去发送投票,每个人刚开始都是投票给他自己的,也会收到别人的投票,第一轮选票选不出controller;第二轮投票时,比较节点的id大小,master集群总共部署了20台机器,其中就3台机器作为controller候选节点,3台机器启动就会发起选举的投票,优先会把id更大的节点选举为contorller(id越大,说明这个节点是后来才启动的,它启动时同步过来的数据是很新的,优先选举这个节点作为controller)。新的Leader节点会与其他Follower节点进行数据同步,在数据同步完成后,集群就可以开始对外提供服务了。

什么是ZAB协议?

ZAB协议,全称Zookeeper Atomic Broadcast(Zookeeper原子广播协议),是Zookeeper设计的一种支持崩溃恢复和原子广播的协议。集群间通过Zab协议(Zookeeper Atomic Broadcast)来保持数据的一致性;

Zab协议包含两个阶段:Zab协议包含两个阶段:leader election阶段和Atomic Brodcast阶段(选举模式和广播模式)。
a) 集群中将选举出一个leader,其他的机器则称为follower,所有的写操作都被传送给leader,并通过brodcast将所有的更新告诉给follower。
b) 当leader崩溃或者leader失去大多数的follower时,需要重新选举出一个新的leader,让所有的服务器都恢复到一个正确的状态。
c) 当leader被选举出来,且大多数服务器完成了 和leader的状态同步后,leadder election 的过程就结束了,就将会进入到Atomic brodcast的过程。
d) Atomic Brodcast同步leader和follower之间的信息,保证leader和follower具有形同的系统状态。

ZAB协议选举模式:刚启动就给其他的节点去发送投票,每个人刚开始都是投票给他自己的,也会收到别人的投票,第一轮选票选不出controller;第二轮投票时,比较节点的id大小,master集群总共部署了20台机器,其中就3台机器作为controller候选节点,3台机器启动就会发起选举的投票,优先会把id更大的节点选举为contorller(id越大,说明这个节点是后来才启动的,它启动时同步过来的数据是很新的,优先选举这个节点作为controller)。新的Leader节点会与其他Follower节点进行数据同步,在数据同步完成后,集群就可以开始对外提供服务了。

四种类型的数据节点 Znode

  • PERSISTENT-持久节点
    解释:除非手动删除,否则节点一直存在于Zookeeper上。
    案例:假设你在ZooKeeper中存储了应用的配置文件作为持久节点。即使应用重启或与之关联的客户端会话断开,配置文件仍然保留在ZooKeeper中,供其他客户端或应用实例访问
  • EPHEMERAL-临时节点
    解释:临时节点的生命周期与客户端会话绑定,一旦客户端会话失效(客户端与zookeeper连接断开不一定会话失效),那么这个客户端创建的所有临时节点都会被移除。
    案例:在服务注册与发现场景中,服务提供者可以将自己的服务信息注册为临时节点。如果服务提供者宕机或断开连接,其对应的临时节点会自动从注册中心删除,从而实现了服务的自动下线。
  • PERSISTENT_SEQUENTIAL-持久顺序节点
    解释:基本特性同持久节点,只是增加了顺序属性,节点名后边会追加一个由父节点维护的自增整型数字。
    案例:在分布式锁或分布式队列的场景中,可以使用持久顺序节点来确保任务或锁请求的顺序处理。每个请求都会创建一个新的持久顺序节点,并通过节点名的后缀来确定其顺序。
  • EPHEMERAL_SEQUENTIAL-临时顺序节点
    解释:基本特性同临时节点,增加了顺序属性,节点名后边会追加一个由父节点维护的自增整型数字。
    案例:在需要自动排序和自动清理的任务队列中,可以使用临时顺序节点。客户端可以将任务作为临时顺序节点添加到队列中,一旦任务完成或客户端会话结束,相应的节点就会自动删除,从而保持队列的整洁和有序。
import org.apache.zookeeper.CreateMode;  
import org.apache.zookeeper.KeeperException;  
import org.apache.zookeeper.ZooDefs;  
import org.apache.zookeeper.ZooKeeper;  
import org.apache.zookeeper.data.Stat;  public class ZNodeExample {  private static final String CONNECT_STRING = "localhost:2181"; // ZooKeeper 服务器地址  private static final int SESSION_TIMEOUT = 30000; // 会话超时时间,单位毫秒  public static void main

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • (152)时序收敛--->(02)时序收敛二
  • sql主从表的区分
  • 盘古信息IMS MCM制造协同管理系统:为中小企业数字化转型量身打造的数字化方案
  • Axure设计之下拉单选框教程(中继器)
  • 数据库不停机迁移方案
  • 【计算机组成原理】2.2.3_2 无符号数的加减运算
  • 制造业企业如何选择适合自己的MES系统
  • 【Midjourney】Midjourney全面开放网站版,所有用户每天可免费生成25次
  • 【虚拟机安装与部署系列(二)】:文件传输工具WinSCP安装并连通VMware虚拟机
  • 关于计算机“如何从键盘输入,实现各种功能”的猜想,或者说是01代码的自己的理解,胡诌
  • EmguCV学习笔记 VB.Net 6.4 霍夫变换
  • 2024 实训室建设:1+X 老年生活照护实训室
  • 实用工具:[TrafficMonitor]任务栏电脑性能监控安装指南
  • x-cmd mod | x scoop - Windows 开源包管理工具
  • 【自动驾驶】控制算法(三)轮胎侧偏与车辆动力学模型
  • 9月CHINA-PUB-OPENDAY技术沙龙——IPHONE
  • (十五)java多线程之并发集合ArrayBlockingQueue
  • 【Redis学习笔记】2018-06-28 redis命令源码学习1
  • 【从零开始安装kubernetes-1.7.3】2.flannel、docker以及Harbor的配置以及作用
  • 【跃迁之路】【444天】程序员高效学习方法论探索系列(实验阶段201-2018.04.25)...
  • axios 和 cookie 的那些事
  • Java 11 发布计划来了,已确定 3个 新特性!!
  • js递归,无限分级树形折叠菜单
  • js对象的深浅拷贝
  • magento2项目上线注意事项
  • Rancher-k8s加速安装文档
  • Spark RDD学习: aggregate函数
  • Spring核心 Bean的高级装配
  • supervisor 永不挂掉的进程 安装以及使用
  • 初识MongoDB分片
  • 跳前端坑前,先看看这个!!
  • 想使用 MongoDB ,你应该了解这8个方面!
  • 小程序开发之路(一)
  • [Shell 脚本] 备份网站文件至OSS服务(纯shell脚本无sdk) ...
  • (1)虚拟机的安装与使用,linux系统安装
  • (23)Linux的软硬连接
  • (笔记)M1使用hombrew安装qemu
  • (二)原生js案例之数码时钟计时
  • (五)Python 垃圾回收机制
  • (转)微软牛津计划介绍——屌爆了的自然数据处理解决方案(人脸/语音识别,计算机视觉与语言理解)...
  • (转载)虚幻引擎3--【UnrealScript教程】章节一:20.location和rotation
  • *Django中的Ajax 纯js的书写样式1
  • .NET Core 网络数据采集 -- 使用AngleSharp做html解析
  • .NET Core实战项目之CMS 第十二章 开发篇-Dapper封装CURD及仓储代码生成器实现
  • .NET 命令行参数包含应用程序路径吗?
  • .NET处理HTTP请求
  • .NET精简框架的“无法找到资源程序集”异常释疑
  • .pop ----remove 删除
  • .vollhavhelp-V-XXXXXXXX勒索病毒的最新威胁:如何恢复您的数据?
  • @converter 只能用mysql吗_python-MySQLConverter对象没有mysql-connector属性’...
  • [<事务专题>]
  • [2018][note]用于超快偏振开关和动态光束分裂的all-optical有源THz超表——
  • [ACL2022] Text Smoothing: 一种在文本分类任务上的数据增强方法
  • [Android] Binder 里的 Service 和 Interface 分别是什么
  • [BZOJ 1032][JSOI2007]祖码Zuma(区间Dp)