大數據學習(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.pswp.cn/diannao/75961.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/75961.shtml
英文地址,請注明出處:http://en.pswp.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;由飛利浦公司…