zookeeper选主测试
Zookeeper 会维护一个具有层次关系的数据结构,它非常类似于一个标准的文件系统

zookeeper基于目录监听机制来选主,多个客户端节点都可以来对zookeeper上某个目录节点进行监听和注册,但只有其中一个能够注册上,谁能注册上谁就是主节点,主节点会保持着和zookeeper目录节点的长连接,只要该连接不断,那么该客户端节点就一直是主节点,其他客户端节点都会监听者zookeeper的该目录节点,一旦主节点宕机,会立即从其他客户端节点中选出一个新的主节点,也就是说:如果当前master宕机,会立即选出一个新的master。
zookeeper的使用:
1、pom引入相关依赖
<!-- zookeeper 客户端 -->
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-framework</artifactId>
<version>2.13.0</version>
</dependency>
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-recipes</artifactId>
<version>2.13.0</version>
</dependency>
其中:Curator 提供了LeaderSelector用来判断是否主节点
2、创建测试类SelectMasterTest
package com.cookie; /**
* @author cxq
* @version 1.0
* @date 2020/7/10 17:35
* @desc
*/ import org.apache.curator.framework.CuratorFramework;
import org.apache.curator.framework.CuratorFrameworkFactory;
import org.apache.curator.framework.recipes.leader.LeaderSelector;
import org.apache.curator.framework.recipes.leader.LeaderSelectorListenerAdapter;
import org.apache.curator.retry.ExponentialBackoffRetry; import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.TimeUnit; public class SelectMasterTest { private String selectMasterZookeeper="192.168.200.129:2181"; //可以放很多节点
Map<String, Boolean> masterMap = new HashMap<String, Boolean>(); /**
* 选主
* @param leaderPath zookeeper目录节点
*/
public void selectMaster (String leaderPath) {
CuratorFramework client = CuratorFrameworkFactory.builder().
connectString(selectMasterZookeeper)
.sessionTimeoutMs(5000) //超时时间
.retryPolicy(new ExponentialBackoffRetry(1000, 3)) //连接不上重试三次
.build();
client.start(); //争抢注册节点
@SuppressWarnings("resource")
LeaderSelector selector = new LeaderSelector(client, leaderPath,
new LeaderSelectorListenerAdapter() { @Override
public void takeLeadership(CuratorFramework client) throws Exception {
//如果争抢到当前注册节点
masterMap.put(leaderPath, true);
while (true) {
//抢占当前节点
TimeUnit.SECONDS.sleep(3);
}
}
});
masterMap.put(leaderPath, false);
selector.autoRequeue();
selector.start();
} public boolean checkMaster (String leaderPath) {
Boolean isMaster = masterMap.get(leaderPath);
return isMaster == null ? false : isMaster;
} public static void main(String[] args) throws InterruptedException {
String leaderPath = "/master";
SelectMasterTest selectMaster = new SelectMasterTest();
selectMaster.selectMaster(leaderPath); TimeUnit.SECONDS.sleep(1); while(true) {
if(selectMaster.checkMaster(leaderPath)){
System.out.println(" 节点1 主节点 ");
}else {
System.out.println(" 节点1 从节点 ");
}
TimeUnit.SECONDS.sleep(6);
}
}
}
3、测试
3.1、启动三次main方法模拟三个客户端节点,查看每个节点的输出情况,预计只有一个能够注册为主节点,其他两个是从节点。
3.2、停掉主节点,查看控制台看剩余两个节点是否有新的主节点产生。
主节点
从节点
断开主节点,其他节点争抢注册主节点
zookeeper选主测试的更多相关文章
- kazoo python zookeeper 选主
本文讲述基于zookeeper选主与故障切换的方法.我们的例子使用的是python. 使用的库是kazoo,安装方式 pip install kazoo 应用场景: 多个实例部署,但不是" ...
- zookeeper curator选主(Leader)
在分布式系统设计中,选主是一个常见的场景.选主是一个这样的过程,通过选主,主节点被选择出来控制其他节点或者是分配任务. 选主算法要满足的几个特征: 1)各个节点均衡的获得成为主节点的权利,一旦主节点被 ...
- 聊聊Zookeeper应用场景、架构设计、选主机制
Zookeeper作为一个分布式协调系统提供了一项基本服务:分布式锁服务,分布式锁是分布式协调技术实现的核心内容.像配置管理.任务分发.组服务.分布式消息队列.分布式通知/协调等,这些应用实际上都是基 ...
- Zookeeper笔记之使用zk实现集群选主
一.需求 在主从结构的集群中,我们假设硬件机器是很脆弱的,随时可能会宕机,当master挂掉之后需要从slave中选出一个节点作为新的master,使用zookeeper可以很简单的实现集群选主功能. ...
- 简述 zookeeper 基于 Zab 协议实现选主及事务提交
Zab 协议:zookeeper 基于 Paxos 协议的改进协议 zookeeper atomic broadcast 原子广播协议. zookeeper 基于 Zab 协议实现选主及事务提交. 一 ...
- kafka分区选主机制
Kafka Partition Leader选主机制 https://blog.csdn.net/qq_27384769/article/details/80115392 kafka leader选举 ...
- Etcd 使用场景:通过分布式锁思路实现自动选主
分布式锁?选主? 分布式锁可以保证当有多台实例同时竞争一把锁时,只有一个人会成功,其他的都是失败.诸如共享资源修改.幂等.频控等场景都可以通过分布式锁来实现. 还有一种场景,也可以通过分布式锁来实现, ...
- 10. 选主算法、多版本兼容性及滚动升级 | 深入浅出MGR
GreatSQL社区原创内容未经授权不得随意使用,转载请联系小编并注明来源. 目录 1. 选主算法 2. 多版本兼容性 3. MGR 5.7滚动升级至8.0 4. 小结 参考资料.文档 免责声明 文章 ...
- ES选主策略
ES版本5.6.3 1.整个流程的开始,实在node启动后触发的,Node.java中start()方法,通过调用ZenDiscovery.java中的doStart()方法,之后会调用startIn ...
- Nginx + Keeplived双主测试
Author: JinDate: 20130613Title: Nginx + Keeplived 双主测试 前言:一年多前做过一次测试,时间久了忘记了,现在又重新做一次 一.环境1.基本信息和规划p ...
随机推荐
- ctfshow 红包题第七弹 .git
.git源码泄露 发现有后们 flag在上级目录里面 直接Letmein=show_source('../flag.txt');就出来了
- 舞台已就位!坐等AI玩家集结!
舞台已就位!坐等AI玩家集结!
- 探索魔乐社区:GLM-4V-9B模型微调之旅
人工智能的浪潮中,魔乐社区以其丰富的资源和开放的环境,逐渐成为了开发者们的新宠.今天,让我们一起走进魔乐社区,通过GLM-4V-9B模型微调的最佳实践,体验这个平台的独特魅力. 多模态的新星:GLM- ...
- 3 x 2 + 1 !安 全 能 力 权 威 认 可 !
近日,由XOps大会组委会主办的"2024第三届XOps产业创新发展论坛"在北京召开.大会主论坛公布了2024上半年XOps最新评估结果,天翼云顺利通过ITU DevOps国际标准 ...
- Kali 安装谷歌拼音
Kali 安装谷歌拼音 1. 安装 Google 输入法 sudo apt install fcitx-googlepinyin 2. 重新启动系统 reboot 3. 打开开始菜单,搜索fcitx配 ...
- Zabbix 安装报错解析
一.Q:Error connecting to database: Access denied for user 'zabbix' @ 'localhost' to database 'zabbix' ...
- Luogu P1983 车站分级 题解 [ 绿 ] [ 拓扑排序 ] [ 图论建模 ] [ 虚点 ]
车站分级:很好的拓扑排序题,细节有点多. 图论建模 首先观察对于一条线路,我们可以从中直接得到什么信息: 假设这条线路的开头为 \(st\),结尾为 \(ed\),那么在 \([st,ed]\) 的车 ...
- 在windows主机本地快速部署使用deepseek-r1大模型
一台配备 Windows 操作系统.12GB 或以上显存的英伟达显卡.8GB 或以上内存,并能连接互联网的电脑可以继续阅读以下内容. 简介 Ollama(用于下载和启动大模型) Ollama 专注于本 ...
- Vue3 基础概念与环境搭建
前言 首先需要提醒大家的是,Vue2 已经在2023年停止维护,为了能更好地适应前端开发的发展趋势以及获得更好的性能和功能,我们将从这篇文章开始进入Vue3的阶段.如果对Vue2有想了解的小伙伴可以自 ...
- donet 常用命令汇总......
dotnet new: 用于创建新的.NET项目. 示例:创建一个名为 "MyConsoleApp" 的控制台应用程序项目. dotnet new console -n MyCon ...