java面试-zookeeper

1、什么是zap协议

ZAB 协议总共包含以下两部分内容:

  1. ZAB 协议通过两阶段提交的方式来确保分布式系统的一致性。这两阶段分别是:准备阶段和提交阶段。在准备阶段,一个节点(称为 Leader)向其他节点(称为 Follower)发送提案,Follower 接受并确认提案。在提交阶段,Leader 将提案发送给所有节点,并等待多数节点的确认。一旦多数节点发送确认消息,Leader 就可以将提案确定为最终结果,然后通知所有节点进行更新。

  2. ZAB 协议还包括了崩溃恢复机制,当 Leader 节点崩溃时,系统会选择一个新的 Leader 来取代原先的 Leader 节点。新的 Leader 通过比对已完成的事务日志和未完成的临时提案来进行恢复。

所以,ZAB 协议通过原子广播的方式,在分布式系统中实现了一致性和可靠性,保证了数据的一致性和正确性。

2、Zookeeper的选举过程是怎么样的

Zookeeper的选举过程大致如下:

  1. 无论何种原因导致进行Leader选举,集群的所有机器都处于试图选举出一个Leader的状态,即LOOKING状态,LOOKING机器会向所有其他机器发送消息,该消息称为投票(每台机器首次都是投票给自己)。
  2. 每台机器发出投票后,也会收到其他机器的投票,每台机器会根据一定规则来处理收到的其他机器的投票,并以此来决定是否需要变更自己的投票,这个规则也是整个Leader选举算法的核心所在。
  3. 在检查投票有效性时,会确保投票是否来自LOOKING状态的服务器的投票等。
  4. 本轮选举中,如果有服务器的得票数超过半数,那么该服务器就成为了本轮选举的Leader。例如在示例中,zk2得到了超过半数的票数,因此成为Leader。
  5. 如果集群中已经有了Leader,那么选举结束,其他机器不再参与选举。

3、zookeeper选举过程中为什么要停止服务

Zookeeper在选举过程中会停止服务,是因为选举Leader的过程中需要保证一致性。在这个阶段,Zookeeper集群中的所有节点都会参与选举,并且需要确保最终选出的Leader是正确的。为了达到这个目标,Zookeeper会暂停服务的执行,直到选举过程结束并选出Leader。这样可以避免在选举期间出现不一致的状态,从而保证Zookeeper服务的可用性和一致性。

4、ZooKeeper 如何进行崩溃修复?

在 ZooKeeper 中有三种节点类型,它们分别是:

  1. Leader(主节点):能够处理读写请求,也同时负责同步写事务请求给其他节点且需要保证事务的顺序性,是整个集群的老大。
  2. Follower(跟随者):只负责处理读请求,无权写,因此收到写请求需要转发给 Leader 处理,待 Leader 写完后再同步给 Follower。如果 Leader 挂了,那么 Follower 是有资格参与竞选的。
  3. Observer(观察者):和 Follower 一样,唯一不同的是,不参与 Leader 的选举,可以利用不参与 Leader 选举的特性用来线性扩展读的 QPS。

也就是说,所有写操作会先到 Leader 节点,然后 Leader 节点在通过 2PC(两阶段提交:预提交、ACK、确认提交等流程)来进行数据同步,当写入成功过半就认为信息写入成功。而跟随者和观察者是为了增加读性能的,只不过跟随者还可以通过竞选主节点来保证集群的稳定性。

了解了这些之后,我们再来看 ZooKeeper 崩溃修复的流程(也就是当主节点崩溃后的流程),咱们先假设 ZooKeeper 集群有两个节点,ServerA 和 ServerB,它的崩溃修复的选举流程如下:

  1. 各自投票
    1. ServerA 先投票给自己,投票信息包含节点 sid 和 zxid,sid 就是 myid(集群 ID,启动集群时必须设置的 ID,是在配置文件当中配置死的,整个集群内唯一),zxid 是事务 id,自增(每次写入操作时生成)。假设 ServerA 将票投给自己,那么投票信息就为 (1,1)。
    2. ServerB 也投票给自己,假设 ServerB 的 sid 为 2 ,那么此时 ServerB 投票信息为 (2,1)。
  2. 投票广播
    1. 接下来 ServerA 和 ServerB 分别将自己的投票信息广播给集群中其他节点。也就是 ServerA 将(1,1) 广播给 ServerB, ServerB 将(2,1)广播给 ServerA。
    2. ServerA 收到 ServerB 的投票信息后,检查下 ServerB 的状态是否是本轮投票,以及是否是 LOOKING 寻主的状态。 反之,ServerB 收到 ServerA 的投票信息后也是一样的。
  3. 投票对比:优先对比 zxid,其次对比 sid。ServerA 会将自己的投票和 ServerB 的投票进行对比,先对比 zxid 发现 zxid 一样,然后对比 sid,发现 ServerB 的 sid 大于 ServerA 的 sid,所以此时 ServerA 就会更改投票信息为 (2,1),然后将投票信息再次发送出去。而 ServerB 不需要更新投票信息,但是下一轮还需要再次将投票发出去。
  4. 统计投票:每一轮投票都会统计每台节点的投票信息,判断是否有过半的节点收到了相同的投票信息,如果过半,则将投票过半的节点升级为 Leader。ServerA 和 ServerB 收到的投票信息都为 (2,1),且数量来说,大于一半节点的数量,所以将 ServerB 选出来作为 Leader。
  5. 更新节点状态:ServerA 作为 Follower,更新状态为 FOLLOWING,ServerB 作为 Leader。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/154882.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

K8S精进之路-控制器Deployment-(1)

在K8S中,最小运行单位为POD,它是一个逻辑概念,其实是一组共享了某些资源的容器组。POD是能运行多个容器的,Pod 里的所有容器,共享的是同一个 Network Namespace,并且可以声明共享同一个 Volume。在POD中能够hold住网络…

Python数据分析实战-爬取以某个关键词搜索的最新的500条新闻的标题和链接(附源码和实现效果)

实现功能 通过百度引擎,爬取以“开源之夏”为搜索关键词最新的500条新闻的标题和链接 实现代码 1.安装所需的库:你需要安装requests和beautifulsoup4库。可以使用以下命令通过pip安装: pip install requests beautifulsoup42.发起搜索请求…

linux启动redis时报错

2.WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128 意思大概是 tcp 连接数设置为 128 太小了 解决方案: ①修改配置文件 vim /etc/sysctl.conf (1)…

【AT模式连接ONENET】ONENET可视化平台的使用

02 ONENET可视化平台的使用 ATCWMODE1 设置模式 ATCWDHCP1,1 启动DHCP功能 ①ATCWJAP"ssid","password" ATCWJAP“123456789”,“wang020118” ②ATMQTTUSERCFG0,1,"设备名字","设备ID","你的鉴权信息""…

Hotspot启动原理(二)

关于Hotspot虚拟机的启动原理和过程。Hotspot虚拟机是Java虚拟机的一种实现,它在JVM领域中具有广泛的应用。在Hotspot虚拟机的启动过程中,会经历一系列的步骤,包括初始化、类加载、字节码解释执行、JIT编译、垃圾回收等环节。具体来说&#x…

hadoop、hive、DBeaver的环境搭建及使用

本文主要介绍hadoop、hive的结构及使用,具体的操作步骤见最后的附件; hadoop提供大数据的存储、资源调度、计算,分为三个模块:HDFS、YRAN、MapReduce HDFS提供数据的分布式存储,分为三个节点NameNode,DataNode,Second…

每日一题(LeetCode)----数组--螺旋矩阵(一)

每日一题(LeetCode)----数组–螺旋矩阵(一) 1.题目(54. 螺旋矩阵) 给你一个 m 行 n 列的矩阵 matrix ,请按照 顺时针螺旋顺序 ,返回矩阵中的所有元素。 示例 1: 输入:matrix [[1…

No appropriate protocol -- Mysql

DataGrip连接mysql报以下异常信息: javax.net.ssl.SSLHandshakeException: No appropriate protocol (protocol is disabled or cipher suites are inappropriate) The following required algorithms might be disabled: SSLv3, TLSv1, TLSv1.1, RC4, DES, MD5wi…

VsCode连接远程Linux编译环境的便捷处理

1.免输登录密码 免输命令的正确方法是使用公钥和私鈅在研发设备,和linux服务器上校验身份。公钥和私钥可在windows系统上生成。公钥要发送到linux服务器。私钥需要通知给本地的ssh客户端程序,相关的操作如下: 生成 SSH Key: 打开…

oracle 手动收集统计信息(简单)

oracle 手动收集统计信息 1、手动收集Oracle schema下表列信息 begindbms_stats.gather_schema_stats(ownname > 用户名,method_opt > for all columns size repeat,degree > 8,options > GATHER AUTO,estimate_percent > …

安卓中轻量级数据存储方案分析探讨

轻量级数据存储功能通常用于保存应用的一些常用配置信息,并不适合需要存储大量数据和频繁改变数据的场景。应用的数据保存在文件中,这些文件可以持久化地存储在设备上。需要注意的是,应用访问的实例包含文件所有数据,这些数据会一…

2023年国赛试题------(四)Linux云服务配置 3.ansible 服务

3.ansible 服务 任务描述:请采用 ansible,实现自动化运维。 在

⑩⑦【MySQL】锁:全局锁、表级锁、行级锁

个人简介:Java领域新星创作者;阿里云技术博主、星级博主、专家博主;正在Java学习的路上摸爬滚打,记录学习的过程~ 个人主页:.29.的博客 学习社区:进去逛一逛~ MySQL锁 ⑩⑦【MySQL】锁:全局锁、…

Ajax进阶

前后端传输数据的编码格式(contentType) # 提示: 主要研究post请求数据的编码格式.get请求数据就是直接放在url?号后面的每个参数之间用&符连接, 如下:url?usernamejason&password123 # 可以朝后端发送post请求的方式1 .form表单2. ajax请求# 基于post请求. 前后端传…

【MetaLearning】有关Pytorch的元学习库higher的基本用法

【MetaLearning】有关Pytorch的元学习库higher的基本用法 文章目录 【MetaLearning】有关Pytorch的元学习库higher的基本用法1. 基本介绍2. Toy ExampleReference 1. 基本介绍 higher.innerloop_ctx是higher库的上下文管理器,用于创建内部循环(inner lo…

2023亚太杯数学建模思路 - 案例:感知机原理剖析及实现

文章目录 1 感知机的直观理解2 感知机的数学角度3 代码实现 4 建模资料 # 0 赛题思路 (赛题出来以后第一时间在CSDN分享) https://blog.csdn.net/dc_sinor?typeblog 1 感知机的直观理解 感知机应该属于机器学习算法中最简单的一种算法,其…

Prometheus+Grafana环境搭建(window)

PrometheusGrafana环境搭建 1:配置Prometheus 1.1: 下载Prometheus安装包 官方下载地址 找到对应的win版本进行下载并解压 1.2 下载Window数据采集 官方下载地址 下载以管理员运行,安装成功后在服务里会出现一个"windows_exporter"采集…

光伏、储能双层优化配置接入配电网研究(附带Matlab代码)

由于能源的日益匮乏,电力需求的不断增长等,配电网中分布式能源渗透率不断提高,且逐渐向主动配电网方向发展。此外,需求响应(demand response,DR)的加入对配电网的规划运行也带来了新的因素。因此,如何综合考…

【LittleXi】CCPC2023 深圳站 总结

【LittleXi】CCPC2023 深圳站 总结 赛前 1、赛前vp了香港,rank13,还行 2、玩了一把div2,上了75分,感觉不如南京之前CF献祭的100分 3、比赛前一晚打了一把abc,只能说消耗了脑力,下次比赛前不玩了 热身赛…

小趴菜教你如何用Python开发手机App..

Python语言虽然很万能,但用它来开发app还是显得有点不对路,因此用Python开发的app应当是作为编码练习、或者自娱自乐所用,加上目前这方面的模块还不是特别成熟,bug比较多,总而言之,劝君莫轻入。 准备工作 …