大数据学习(88)-zookeeper实现的高可用(HA)

🍋🍋大数据学习🍋🍋

🔥系列专栏: 👑哲学语录: 用力所能及,改变世界。
💖如果觉得博主的文章还不错的话,请点赞👍+收藏⭐️+留言📝支持一下博主哦🤞


ZooKeeper 实现高可用的能力详解

ZooKeeper 不仅是实现分布式系统高可用(HA)的关键工具,其自身也通过特定架构设计实现了高可用特性。

一、ZooKeeper 自身的高可用实现

1. 集群架构设计

典型部署:由3/5/7个节点组成的 ZooKeeper Ensemble

[Client] → [Leader]↑
[Follower] ←→ [Follower]
 

高可用保障

  • 自动Leader选举:基于ZAB协议(ZooKeeper Atomic Broadcast)

  • 数据一致性:所有写操作通过Leader协调,保证顺序一致性

  • 读操作扩展:Follower可直接处理读请求

2. 容错能力

集群规模可容忍故障节点数最少存活节点要求
3节点12
5节点23
7节点34

选举过程示例

  1. 节点启动后进入LOOKING状态

  2. 交换投票信息(包含zxid和serverid)

  3. 获得多数派投票的节点成为Leader

  4. 其余节点成为Follower并同步数据

3. 数据持久化

  • 事务日志:所有写操作先写磁盘日志(顺序IO)

  • 内存快照:定期生成snapshot加速恢复

  • WAL机制:Write-Ahead Logging保证数据不丢失

二、ZooKeeper 如何为其他系统提供高可用

1. 核心功能支持

功能高可用实现案例
分布式锁防止多节点同时操作关键资源
服务注册与发现实时感知服务节点存活状态
配置管理集群所有节点配置即时同步
Leader选举确定唯一活跃节点(如HDFS NameNode)

2. 典型集成方案

(1) HDFS NameNode HA
graph LRActiveNN[Active NameNode] -->|写入| JN[JournalNodes]StandbyNN[Standby NameNode] -->|读取| JNZKFC[ZKFC] -->|监控| ZK[ZooKeeper]ZKFC --> ActiveNNZKFC --> StandbyNN

故障转移流程

  1. ZKFC检测到Active NN心跳超时

  2. 在ZK创建临时节点尝试接管

  3. 获得锁的Standby NN切换为Active

  4. 通过JournalNodes同步最新状态

(2) Kafka Controller选举
  • 每个Broker在ZK注册临时节点

  • 第一个成功创建/controller节点的Broker成为Controller

  • Controller故障时自动重新选举

三、ZooKeeper高可用配置实践

1. 关键配置参数

zoo.cfg

# 集群节点配置
server.1=zk1:2888:3888  # 2888用于Leader通信,3888用于选举
server.2=zk2:2888:3888
server.3=zk3:2888:3888# 会话超时控制
tickTime=2000  # 基础时间单元(ms)
initLimit=10   # 初始化连接最长等待tick数
syncLimit=5    # 心跳请求最长等待tick数# 数据目录
dataDir=/var/lib/zookeeper
dataLogDir=/var/log/zookeeper  # 事务日志单独目录

2. 监控指标

关键监控项

  • zk_avg_latency:平均请求处理时间(应<50ms)

  • zk_outstanding_requests:排队请求数(应<10)

  • zk_followers:正常Follower数量

  • zk_znode_count:znode总数监控

四字命令检查

echo stat | nc localhost 2181  # 查看状态
echo mntr | nc localhost 2181  # 监控指标

四、ZooKeeper高可用的局限性

  1. 写性能瓶颈

    • 所有写操作必须通过Leader

    • 集群规模扩大时写吞吐量不会增加

  2. 脑裂风险

    • 网络分区可能导致双Leader

    • 需要通过quorum配置预防(N/2+1)

  3. 会话风暴

    • 大量客户端重连可能导致集群过载

    • 解决方案:客户端采用指数退避重试

        ZooKeeper通过其分布式共识算法和集群架构,既能保障自身服务的高可用,又能作为基础设施为其他分布式系统提供可靠的协调服务。正确配置和使用时,ZooKeeper集群可以实现99.99%以上的可用性。

这里值得说明的是:初始 LOOKING 状态的定义

        在 ZooKeeper 集群中,LOOKING 是服务器节点启动或发现无 Leader 时进入的特殊状态,表示该节点正在主动寻找或参与 Leader 选举。这是 ZooKeeper 实现高可用的核心机制之一。

当当前的Leader崩溃

  1. Follower检测到Leader心跳超时(默认2*tickTime)

  2. 所有Follower转入LOOKING状态

  3. 启动新一轮选举,选择zxid最大的节点

  4. 新Leader产生后同步数据

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

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

相关文章

基于MFC按钮逻辑

void CSUCCES1Dlg::SetDlgItemState()//IDC_BTN_INIT初始化按钮 { GigeState state = GigeState::ARV_NONE;//GigeState是一个枚举类型,stat状态为ARV_NONE int idx = ((CListBox*)GetDlgItem(IDC_LIST_GIGE))->GetCurSel();//GetDlgItem 是 MFC 框架提供的一个成员…

EF Core 乐观并发控制(并发令牌)

文章目录 前言一、乐观并发的核心思想二、实现方法1&#xff09;使用并发令牌&#xff08;Concurrency Token&#xff09;2&#xff09;处理并发冲突 三、工作原理四、适用场景五、与悲观并发的对比六、最佳实践总结 前言 Entity Framework (EF) Core 默认支持 乐观并发控制&a…

解决 FFmpeg 使用 C/C++ 接口时,解码没有 shell 快的问题(使用多线程)

一、问题 硬件设备为香橙派 5Plus&#xff0c;最近需要使用硬件视频解码来加速 YOLO 的检测&#xff0c;shell 窗口的FFmpeg已经调通&#xff0c;详见文章&#xff1a; 编译支持 RKmpp 和 RGA 的 ffmpeg 源码_rk3588 ffmpeg mpp-CSDN博客https://blog.csdn.net/plmm__/article…

工业控制网络中常用的通信协议

1. 现场总线协议 Modbus 概述&#xff1a;Modbus 是最广泛使用的工业协议之一&#xff0c;主要用于串行通信&#xff0c;支持主/从架构&#xff0c;通过 RS-232 或 RS-485 传输&#xff0c;也有基于以太网的 Modbus TCP 版本。特点&#xff1a;简单易用&#xff0c;易于实现&am…

【Mac】npm error Error: EACCES: permission denied, mkdir‘/Users/...

问题描述&#xff1a;Mac电脑中的 vscode 下载依赖的时候提示没有权限&#xff1a; 故障分析 首先账号是有权限的&#xff0c;电脑就建了一个账号是管理员&#xff1b;在桌面用shell直接执行命令npm init 命令可以执行成功&#xff0c;那么问题就出在vscodes上面了&#xff0…

Ruby 简介

Ruby 简介 引言 Ruby 是一种广泛使用的动态、开源的编程语言,自 1995 年由日本程序员 Yukihiro Matsumoto(通称 Matz)设计以来,它以其优雅的语法、强大的库支持和跨平台特性赢得了全球开发者的青睐。本文将详细介绍 Ruby 的起源、特点、应用领域以及它在现代软件开发中的…

[Qt5] QMetaObject::invokeMethod使用

&#x1f4e2;博客主页&#xff1a;https://loewen.blog.csdn.net&#x1f4e2;欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; 如有错误敬请指正&#xff01;&#x1f4e2;本文由 丶布布原创&#xff0c;首发于 CSDN&#xff0c;转载注明出处&#x1f649;&#x1f4e2;现…

Windows10清理机器大全集

Windows10清理机器大全集 写在前面先这么个标题&#xff0c;逐渐补充禁止Update移除Microsoft Compatibility Telemetrywindows-defender-remover其它 写在前面 看到标题&#xff0c;读者已经就吐了。 我是说&#xff0c;我非常认可: IT从业者&#xff0c;如果你银子比较充足&…

【AI】NLP

不定期更新&#xff0c;建议关注收藏点赞。 目录 transformer大语言模型Google Gemma疫情网民情绪识别 整体框架 baseline构建 模型调参、模型优化、其他模型 数据trick、指标优化、magic feature 数据增强、伪标签、迁移学习 模型融合sklearn中TFIDF参数详解 频率阈值可以去掉…

如何为 Debian 和 Kali 系统更换软件源并更新系统

在 Linux 系统中&#xff0c;软件源&#xff08;Software Repository&#xff09;是获取软件包和更新的核心途径。然而&#xff0c;默认的软件源可能会因为地理位置、网络状况等原因导致下载速度缓慢&#xff0c;甚至无法访问。为了提升系统的软件获取效率&#xff0c;许多用户…

android 一步完成 aab 安装到手机

家人们谁懂&#xff01;在 Android 系统安装 aab 应用超麻烦。满心期待快速体验&#xff0c;却发现 aab 无法直装&#xff0c;得先转为 apks 格式&#xff0c;这过程复杂易错。好不容易转好&#xff0c;还得安装 apks&#xff0c;一番折腾&#xff0c;时间与耐心全耗尽。别愁&a…

mac部署CAT监控服务

在 Mac 上部署美团点评开源的 CAT 监控服务端&#xff0c;可以按照以下步骤操作&#xff1a; 1. 环境准备 1.1 安装依赖 确保已安装以下工具&#xff1a; JDK 8&#xff08;建议 OpenJDK 11&#xff09; MySQL 5.7&#xff08;存储监控数据&#xff09;&#xff08;8.0不支持…

C语言基础:第10天笔记

内容提要 函数 函数的概述 函数的分类 函数的定义 形参和实参 函数的返回值 函数 函数的概述 函数&#xff1a;实现一定功能的&#xff0c;独立的代码模块&#xff0c;函数是c程序的核心构成模块&#xff0c;可以说c程序就是由众多的函数组成&#xff0c;对于函数的使用…

集成开发环境革新:IntelliJ IDEA与Cursor AI的智能演进

集成开发环境革新&#xff1a;IntelliJ IDEA 与 Cursor AI 的智能演进 集成开发环境&#xff08;IDE&#xff09; 是软件开发者必不可少的工具。一个优秀的 IDE 不仅能够帮助编写和调试代码&#xff0c;还能集成版本控制和代码优化等多种功能。如今&#xff0c;随着人工智能&a…

【Django】教程-1-安装+创建项目+目录结构介绍

欢迎关注我&#xff01;后续会更新django教程。一周2-3更&#xff0c;欢迎跟进&#xff0c;本周会更新第一个Demo的单独一个模块的增删改查【Django】教程-4-一个增删改查的Demo【Django】教程-2-前端-目录结构介绍【Django】教程-3-数据库相关介绍 1.项目创建 1.1 安装 Djan…

智能仪表板DevExpress Dashboard v24.2新版亮点:支持.NET 9

使用DevExpress BI Dashboard&#xff0c;再选择合适的UI元素&#xff08;图表、数据透视表、数据卡、计量器、地图和网格&#xff09;&#xff0c;删除相应参数、值和序列的数据字段&#xff0c;就可以轻松地为执行主管和商业用户创建有洞察力、信息丰富的、跨平台和设备的决策…

北斗导航 | 改进最小二乘残差法的接收机自主完好性监测算法原理,公式,应用,研究综述,matlab代码

改进最小二乘残差法的接收机自主完好性监测算法研究 摘要 本文针对传统最小二乘残差RAIM算法在复杂环境下检测性能不足的问题,提出了一种基于加权抗差估计的改进算法。通过引入IGGⅢ权函数构建抗差最小二乘模型,结合滑动窗口方差估计和自适应阈值调整机制,显著提升了算法对…

24、web前端开发之CSS3(一)

CSS3详细讲义 目录 CSS3简介CSS3核心特性选择器盒模型背景与边框文本样式颜色与透明度过渡与动画变换弹性盒布局网格布局媒体查询多列布局字体与排版装饰与效果性能优化新特性与兼容性CSS3实践示例总结 一、CSS3简介 CSS3&#xff08;Cascading Style Sheets, Level 3&#…

【Git “reset“ 命令详解】

以下是关于 git reset 命令的完整博客文章内容&#xff1a; 本章目录: 1. 命令简介主要用途&#xff1a; 2. 命令的基本语法和用法语法格式&#xff1a;使用场景&#xff1a; 3. 命令的常用选项及参数选项示例&#xff1a;1. 使用 --soft 进行软重置2. 使用 --mixed 进行混合重…

STM32 IIC通信

目录 IIC简介硬件电路连接I2C时序基本单元IIC完整数据帧MPU6050封装硬件IIC内部电路 IIC简介 IIC&#xff08;Inter-Integrated Circuit&#xff09;是 IIC Bus 简称&#xff0c;中文叫集成电路总线。它是一种串行通信总线&#xff0c;使用多主从架构&#xff0c;由飞利浦公司…