zookeeper選主之LeaderLatch

概述

利用zookeeper來進行選主,可以使用apache curator framework,它給我們封裝了兩種選主工具,它們分別是LeaderSelector和LeaderLatch。它們各自的應用場景不一樣,LeaderSelector應用于那些需要頻繁變主的情況,而LeaderLatch則用于不頻繁變主的情況。今天我們主要介紹LeaderLatch。

原理

LeaderLatch的實現原理其實是利用了zookeeper的臨時有序節點來實現,比如我們在/leader目錄下創建臨時有序的節點,那么應用第一個實例創建類似/leader/node-0,第二個實例創建類似/leader/node-1(實際目錄名不是叫這個,這里只是打個比方),那么LeaderLatch會選擇序號最小的zookeeper節點作為主節點,每個從節點實例都會監聽前一個比自己小的znode的事件,一旦比自己小的zookeeper節點發生變化,則立馬檢測自身是否可成為主節點。

實現

引入maven依賴

            <dependency><groupId>org.apache.curator</groupId><artifactId>curator-framework</artifactId><version>4.3.0</version></dependency><dependency><groupId>org.apache.curator</groupId><artifactId>curator-recipes</artifactId><version>4.3.0</version></dependency><dependency><groupId>org.apache.zookeeper</groupId><artifactId>zookeeper</artifactId><!--需要和你zookeeper的版本一致--><version>3.4.14</version></dependency>

初始化CuratorFramework Client

public void initClient() {CuratorFrameworkFactory.Builder builder = CuratorFrameworkFactory.builder().connectString("127.0.0.1:2181").retryPolicy(new RetryNTimes(1, 1000)).connectionTimeoutMs(30 * 1000).sessionTimeoutMs(60 * 1000);client = builder.build();client.start();
}

創建LeaderLatch實例

public void initLeaderLatch() throws Exception {//participantId 為選舉者ID,LeaderLatch.CloseMode.NOTIFY_LEADER 模式在失主的時候會回調下notLeader方法        LeaderLatch leaderLatch = new LeaderLatch(client, "/leader", "participantId", LeaderLatch.CloseMode.NOTIFY_LEADER);leaderLatch.addListener(new LeaderLatchListener() {@Overridepublic void isLeader() {System.out.print("I am leader.");}@Overridepublic void notLeader() {System.out.print("I am not leader.");}});leaderLatch.start();
}

關閉資源釋放連接

public void close() throws IOException {leaderLatch.close();client.close();
}

檢查自己是否還在選民列表中

可以定時的檢查一下應用實例是否還在選民列表中,如果已不在選民列表中,可先關閉連接,然后再重新初始化client和LeaderLatch,維持應用集群狀態與zookeeper上的臨時有序節點的最終一致性。

    /*** 檢查當前進程是否還在選民列表中,不在的話,可以進行重連,使得自己重新回到選民列表中    */public boolean checkMeInParticipants() throws Exception {boolean result = false;Collection<Participant> participants = participants = this.leaderLatch.getParticipants();for (Participant participant : participants) {if ("participantId".equals(participant.getId())) {result = true;break;}}return result;}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/15080.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/15080.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/15080.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Redis機制-Redis互斥鎖、分布式鎖

目錄 一 互斥鎖 二 分布式鎖 Redis實現分布式鎖 redisson實現分布式鎖 可重入性&#xff1a; 主從一致性&#xff08;性能差&#xff09;&#xff1a; 一 互斥鎖 假設我們現在有一個業務要實現秒殺優惠券的功能&#xff0c;如果是一個正常的流程&#xff0c;線程之間應該…

數據結構中鏈表的題目

題目&#xff1a; 設計一個算法&#xff0c;要求將鏈表中所有節點的鏈接方向“原地”逆轉&#xff0c;即要求僅利用原表的存儲空間。 對于這個問題&#xff0c;首先要分析的是&#xff1a;鏈表中的頭和尾節點如何插入&#xff1f;其次就是&#xff1a;如何鏈接&#xff1f; 搞懂…

閱讀筆記——《未知協議狀態機推斷技術研究綜述》

【參考文獻】盛嘉杰, 牛勝杰, 陳陽, 等. 未知協議狀態機推斷技術研究綜述[J]. 計算機與現代化, 2023 (05): 58.【注】本文僅為作者個人學習筆記&#xff0c;如有冒犯&#xff0c;請聯系作者刪除。 摘要 協議逆向工程&#xff08;PRE&#xff09;描述了協議的行為邏輯&#xff…

spring cloud config server源碼學習(一)

文章目錄 1. 注解EnableConfigServer2. ConfigServerAutoConfiguration2.1 ConditionalOnBean和ConditionalOnProperty2.2 Import注解2.2.1. EnvironmentRepositoryConfiguration.class2.2.2. CompositeConfiguration.class2.2.3. ResourceRepositoryConfiguration.class2.2.4.…

python3 + selenium webdriver自動化測試啟動不同瀏覽器

selenium webdriver自動化測試啟動不同瀏覽器 selenium webdriver 介紹Selenium WebDriver 進行自動化測試的一般流程瀏覽器驅動下載瀏覽器驅動的安裝chrome、edge、Firefox、Opera、Safari、phantomjs 應用Headless Chrome 、Headless Firefox 應用 selenium webdriver 介紹 …

shell命令運行原理及Linux權限問題

目錄 shell命令以及運行原理用戶管理添加用戶刪除用戶sudo Linux權限的概念Linux權限管理文件訪問者的分類&#xff08;人&#xff09;文件類型和訪問權限&#xff08;事物屬性&#xff09;文件權限值的表示方法文件訪問權限的相關設置方法 目錄的權限粘滯位 shell命令以及運行…

備考AMC8和AMC10競賽,吃透2000-2024年1850道真題和解析(持續)

多做真題&#xff0c;吃透真題和背后的知識點是備考AMC8、AMC10有效的方法之一&#xff0c;通過做真題&#xff0c;可以幫助孩子找到真實競賽的感覺&#xff0c;而且更加貼近比賽的內容&#xff0c;可以通過真題查漏補缺&#xff0c;更有針對性的補齊知識的短板。 今天我們繼續…

PostgreSQL基本使用Schema

參考文章&#xff1a;PostgreSQL基本使用&#xff08;3&#xff09;Schema_pg數據庫查詢schema-CSDN博客 PostgreSQL 模式&#xff08;Schema&#xff09;可以理解為是一個表的集合&#xff08;或者所屬者&#xff09;。 例如&#xff1a;在 MySQL 中&#xff0c;Scheam 是庫&…

gcc源碼分析(AST抽象語法樹)

文章目錄 三、AST相關1、AST(抽象語法樹)1.1 樹結點的聲明1.2 樹結點的結構1.2.1 tree_node聯合體1.2.2 tree_base結構體1.2.3 tree_common結構體1.2.4 常量結構體1.2.5 **標識符節點**2、符號綁定,作用域與block樹節點2.1 lang_identifier結構體2.2 c_binding結構體2.3 scop…

HLS視頻加密,讓您的視頻內容更安全!

背景介紹 HLS視頻加密是一種基于HTTP Live Streaming&#xff08;HLS&#xff09;協議的加密技術。它的核心思想是將視頻切片進行加密處理&#xff0c;在客戶端播放時需要先獲取解密密鑰才能正常偶發。通過這種方式&#xff0c;HLS加密可以有效防止未經授權的第三方竊取視頻內…

測試短信推薦參考

短信測試參考 國外&#xff1a; smstome 支持多個國家號碼 官網地址&#xff1a; https://smstome.com/ quackr.io 支持多個國家號碼 官網地址&#xff1a; https://quackr.io/ receive-smss 支持多個國家號碼 地址&#xff1a; https://receive-smss.com/ receive-sms-fr…

C#字典的常用方法

C#的字典&#xff08;Dictionary&#xff09;類是一個通用的集合類&#xff0c;它實現了鍵值對的存儲和訪問。以下是一些常用的字典方法&#xff1a; Add(key, value)&#xff1a;向字典中添加一個指定的鍵值對。Remove(key)&#xff1a;從字典中移除具有指定鍵的元素。Contai…

LLM大模型的7種推理框架分析

LLM的7種推理框架 Hugging Face的transformers 這是一個Python庫&#xff0c;可以簡化本地運行LLM的過程。 Transformers的優點&#xff1a; 自動模型下載提供代碼片段非常適合實驗和學習 Transformers的缺點&#xff1a; 需要對ML和NLP有深入了解需要編碼和配置技能 2.L…

深度學習之基于Tensorflow低光增強的深層Retinex分解

歡迎大家點贊、收藏、關注、評論啦 &#xff0c;由于篇幅有限&#xff0c;只展示了部分核心代碼。 文章目錄 一項目簡介 二、功能三、系統四. 總結 一項目簡介 一、項目背景與意義 在圖像處理領域&#xff0c;低光照環境下的圖像增強是一個具有挑戰性的問題。為了提高圖像的可…

紐曼新品X1000:輕巧便攜僅重9.9公斤的1度電應急電源

在戶外救援行動和應急設備中&#xff0c;電力供應的穩定性和安全性直接影響到救援工作的效率和成功率。在現代救援工作中&#xff0c;常見的光學聲波探測儀、通信聯絡設備、氣象檢測儀、生命探測儀、照明設備等裝備均需有持續的電力供應&#xff0c;才能保障救援工作的有序開展…

西門子WINCC8.0VBS腳本學習講解

WinCC VBS腳本置位/復位/取反 二進制變量 "TAG1_BOOL1" 進行置位復位取反操作 步驟&#xff1a;按鈕-->對象屬性-->事件-->單擊鼠標VBS動作填入代碼如下: 對二進制變量進行復位 對二進制變量進行置位 對二進制變量進行取反 VBS腳本數學運算/讀寫批處理 …

第十六講:數據在內存中的存儲

第十六講&#xff1a;數據在內存中的存儲 1.整數在內存中的存儲1.1存儲方式1.2大小端字節序1.3大小端字節序排序規則1.4為什么要有大小端1.5練習1.5.1練習11.5.2練習21.5.3練習31.5.4練習41.5.5練習51.5.6練習61.5.7練習7 2.浮點數在內存中的存儲2.1練習2.2浮點數的存儲2.3浮點…

如何將數據從一部手機傳輸到另一部手機[安全快速]

概括 手機之間無需使用藍牙即可傳輸文件&#xff0c;配合專業的文件傳輸工具更高效。本文將向您介紹幾種使用不同的數據傳輸工具快速安全地將數據從一部手機傳輸到另一部手機的方法&#xff0c;特別是當有大文件或大量文件時。現在&#xff0c;我們來看看。 需要在朋友或家人之…

Rust 賦能前端 -- 寫一個 File 轉 Img 的功能

所有耀眼的成績,都需要苦熬,熬得過,出眾;熬不過,出局 大家好,我是柒八九。一個專注于前端開發技術/Rust及AI應用知識分享的Coder 此篇文章所涉及到的技術有 Rustwasm-bindgen/js-sys/web-sysWeb WorkerWebAssemblyWebpack/Vite配置WebAssemblyOffscreenCanvas腳手架生成項…

校園二手書交易|基于SprinBoot+vue的校園二手書交易管理系統(源碼+數據庫+文檔)

校園二手書交易管理系統 目錄 基于SprinBootvue的校園二手書交易管理系統 一、前言 二、系統設計 三、系統功能設計 1系統功能模塊 2管理員功能模塊 3 賣家用戶功能模塊 4 用戶功能模塊 四、數據庫設計 五、核心代碼 六、論文參考 七、最新計算機畢設選題推薦 八…