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.mzph.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 用户功能模块 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八…