Hadoop-31 ZooKeeper 内部原理 简述Leader选举 ZAB协议 一致性

本文涉及的产品
MSE Nacos/ZooKeeper 企业版试用,1600元额度,限量50份
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
任务调度 XXL-JOB 版免费试用,400 元额度,开发版规格
简介: Hadoop-31 ZooKeeper 内部原理 简述Leader选举 ZAB协议 一致性

章节内容

上一节我们完成了:


新建Java的Maven工程

使用Java调用ZK 进行操作

创建节点、删除节点、监听节点等操作

背景介绍

这里是三台公网云服务器,每台 2C4G,搭建一个Hadoop的学习环境,供我学习。

之前已经在 VM 虚拟机上搭建过一次,但是没留下笔记,这次趁着前几天薅羊毛的3台机器,赶紧尝试在公网上搭建体验一下。


2C4G 编号 h121

2C4G 编号 h122

2C2G 编号 h123

Leader选举

选举机制

半数机制:集群中半数以上机器存活,集群可用。所以 ZooKeeper 适合奇数台。

ZooKeeper 虽然在配置文件中没有指定Master和Slave,但是ZK在工作的时候,会有一个Leader,其他的都是Follower。

首次启动

假设有五台集群的机器:

服务1启动,此时只有它一台启动了,它发出去的报文没有任何响应,所以一直是LOOKING状态。

服务2启动,它与最开始启动的服务1进行通信,互相交换自己的选举结果。由于两者都没有历史数据,所以ID值较大的服务2胜出。但是目前还没有超过半数的服务同意,所以服务1和服务2都是LOOKING状态。

服务3启动,服务3成了1、2、3的老大,集群中>=2台选了3,所以服务3成了Leader。

服务4启动,服务4应该是1、2、3的老大,但是集群已经选了3为老大,所以4只可以做Follower。

服务5启动,同4。

非首次启动

每次选举的时候都会根据自身的事务ID,优先选择事务ID大的为 Leader。


ZAB 一致性

ZAB 介绍

ZAB 是 Apache ZooKeeper 的一种使用场景和实现模式。

ZK就是分布式一致性问题的工业解决方案,Paxos算法是底层算法。

ZAB,即 ZooKeeper Atomic Broadcast,是 ZooKeeper 背后的一致性算法,确保了分布式系统中的数据一致性和可靠性。


数据一致性

为什么会出现数据一致性问题?


将数据复制到分布式部署的多台机器中,可以消除单点故障,防止由于部分服务器宕机导致服务不可用。

通过负载均衡,能够让分布在不同地区的数据副本全都对外提供服务,提高系统性能。

但是分布式后,会导致数据不一致的情况出现

比如常见于 主从复制的时候:

主备模式

ZK中,所有客户端写入数据都是写入Leader,由Leader复制到Follower中。

广播消息

ZAB协议的消息广播过程类似于二阶段提交。

对于客户端的写请求,全部由 Leader 接收,Leader将请求封装成一个事务 Proposal(提议),将其发送给所有Follower。

如果收到超过半数反馈ACK,则执行Commit操作(先提交自己,再发送Commit给其他Follower)。


发送Proposal到Follower

Leader接收Follower的ACK

超过半数ACK则进行Commit

Leader宕机

Leader如果宕机了,ZK集群将无法正常工作,ZAB协议提供了一个高效可靠的Leader选举算法。

  • ZAB协议保证那些已经在Leader提交的事务最终会被所有服务器提交
  • ZAB协议保证丢弃那些只在Leader 提交/复制,但没有提交的事务。
目录
相关文章
|
2月前
|
消息中间件 分布式计算 资源调度
《聊聊分布式》ZooKeeper与ZAB协议:分布式协调的核心引擎
ZooKeeper是一个开源的分布式协调服务,基于ZAB协议实现数据一致性,提供分布式锁、配置管理、领导者选举等核心功能,具有高可用、强一致和简单易用的特点,广泛应用于Kafka、Hadoop等大型分布式系统中。
|
分布式计算 NoSQL Java
Hadoop-32 ZooKeeper 分布式锁问题 分布式锁Java实现 附带案例和实现思路代码
Hadoop-32 ZooKeeper 分布式锁问题 分布式锁Java实现 附带案例和实现思路代码
212 2
|
分布式计算 Java Hadoop
Hadoop-30 ZooKeeper集群 JavaAPI 客户端 POM Java操作ZK 监听节点 监听数据变化 创建节点 删除节点
Hadoop-30 ZooKeeper集群 JavaAPI 客户端 POM Java操作ZK 监听节点 监听数据变化 创建节点 删除节点
246 1
|
分布式计算 监控 Hadoop
Hadoop-29 ZooKeeper集群 Watcher机制 工作原理 与 ZK基本命令 测试集群效果 3台公网云服务器
Hadoop-29 ZooKeeper集群 Watcher机制 工作原理 与 ZK基本命令 测试集群效果 3台公网云服务器
245 1
|
分布式计算 资源调度 Hadoop
【赵渝强老师】基于ZooKeeper实现Hadoop HA
本文介绍了如何在4个节点(bigdata112、bigdata113、bigdata114和bigdata115)上部署HDFS高可用(HA)架构,并同时部署Yarn的HA。详细步骤包括环境变量设置、配置文件修改、ZooKeeper集群启动、JournalNode启动、HDFS格式化、ZooKeeper格式化以及启动Hadoop集群等。最后通过jps命令检查各节点上的后台进程,确保部署成功。
415 0
|
9月前
|
存储 分布式计算 Hadoop
从“笨重大象”到“敏捷火花”:Hadoop与Spark的大数据技术进化之路
从“笨重大象”到“敏捷火花”:Hadoop与Spark的大数据技术进化之路
431 79
|
分布式计算 Kubernetes Hadoop
大数据-82 Spark 集群模式启动、集群架构、集群管理器 Spark的HelloWorld + Hadoop + HDFS
大数据-82 Spark 集群模式启动、集群架构、集群管理器 Spark的HelloWorld + Hadoop + HDFS
503 6
|
分布式计算 资源调度 Hadoop
大数据-80 Spark 简要概述 系统架构 部署模式 与Hadoop MapReduce对比
大数据-80 Spark 简要概述 系统架构 部署模式 与Hadoop MapReduce对比
294 2
|
12月前
|
存储 分布式计算 大数据
Flume+Hadoop:打造你的大数据处理流水线
本文介绍了如何使用Apache Flume采集日志数据并上传至Hadoop分布式文件系统(HDFS)。Flume是一个高可用、可靠的分布式系统,适用于大规模日志数据的采集和传输。文章详细描述了Flume的安装、配置及启动过程,并通过具体示例展示了如何将本地日志数据实时传输到HDFS中。同时,还提供了验证步骤,确保数据成功上传。最后,补充说明了使用文件模式作为channel以避免数据丢失的方法。
591 4
|
存储 分布式计算 Hadoop
数据湖技术:Hadoop与Spark在大数据处理中的协同作用
【10月更文挑战第27天】在大数据时代,数据湖技术凭借其灵活性和成本效益成为企业存储和分析大规模异构数据的首选。Hadoop和Spark作为数据湖技术的核心组件,通过HDFS存储数据和Spark进行高效计算,实现了数据处理的优化。本文探讨了Hadoop与Spark的最佳实践,包括数据存储、处理、安全和可视化等方面,展示了它们在实际应用中的协同效应。
557 2

相关实验场景

更多