基于zookeeper的主备服务_乔客0311的博客-CSDN博客


本站和网页 https://blog.csdn.net/u014395955/article/details/103959127 的作者无关,不对其内容负责。快照谨为网络故障时之索引,不代表被搜索网站的即时页面。

基于zookeeper的主备服务_乔客0311的博客-CSDN博客
基于zookeeper的主备服务
乔客0311
于 2020-01-13 16:35:55 发布
4483
收藏
分类专栏:
Java
文章标签:
java
主备启动
zookeeper
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/u014395955/article/details/103959127
版权
Java
专栏收录该内容
10 篇文章
0 订阅
订阅专栏
摘要
为了高可用通产我们一个服务会部署多节点。但是有时我们希望对某些操作要求单线程处理,此时可以通过主备服务形式实现。正常情况下主节点服务处理,当主节点宕机后备用节点相关服务继续处理。
需求
资源中心会将资源文件相关操作分发至各个项目节点,资源的操作包括添加、分享、删除、和谐、恢复。资源中心向mq发布消息,各个项目节点通过订阅mq消息处理对应资源。各项目节点HA部署双节点。此时有可能出现其中一个节点正在处理资源的上传操作,由于涉及到文件IO,此操作比较慢,同时另一个节点接收到了删除的mq消息,执行对应的资源删除操作。为了避免这种情况,要求对消息的操作必须是顺序的。
解决方案
项目的两个节点在启动完成后抢注zookeeper同时订阅zk的节点disconnect事件,抢注成功的节点成为主节点通知执行启动操作,抢注失败的节点为从节点不做操作。当主节点宕机后,从节点会接收到disconnect消息,从而执行启动操作。
实现
服务启动后抢注zk@Override
public void run(ApplicationArguments args) throws Exception {
if(enable){
zookeeperWatcher.connect();
if(!zookeeperWatcher.exists()){
zookeeperWatcher.create();
}else{
log.info("节点已被抢注,不再发布节点抢注成功事件!!!");
}else{
log.info("不启用,默认发布抢注成功事件");
SpringContextUtil.getApplicationContext().publishEvent(new MainStandbyRunnerEvent(true));
通过publishEvent+listener将主备启动与主备解耦 抢注zk节点成功发布启动事件SpringContextUtil.getApplicationContext().publishEvent(new MainStandbyRunnerEvent(true));
各个业务方通过添加listener实现启动逻辑@Override
public void onApplicationEvent(MainStandbyRunnerEvent event) {
log.info("执行节点服务启动时间!");
//TODO 启动逻辑
log.info("节点服务启动完成!");
监听zk节点断开事件并注册节点发布注册成功事件@Override
public void process(WatchedEvent event){
if(path.equals(event.getPath()) && event.getType() == Event.EventType.NodeDeleted){
log.info("节点断开连接");
//抢注节点
create();
/**
* 创建节点并发布事件
*/
public void create(){
try {
byte[] bytes = value.getBytes(CHARSET);
this.zookeeper.create(path, bytes, ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.EPHEMERAL);
log.info("发布节点抢注成功事件");
SpringContextUtil.getApplicationContext().publishEvent(new MainStandbyRunnerEvent(true));
} catch (Exception e) {
log.error(e.getMessage());
效果
主节点启动
2020-01-13 16:24:02.196 [main] INFO c.i.s.common.mainstandby.config.MainStandbyProperties - 主备启动参数:[enable=true,host=127.0.0.1,path=/MainStandbyStart,value=MainNodeStart]
2020-01-13 16:26:36.127 [main] INFO c.i.sclass.common.mainstandby.watcher.ZookeeperWatcher - 发布节点抢注成功事件
2020-01-13 16:26:36.127 [main] INFO c.i.sclass.baseauth.listener.MainStandbyRunnerListener - 执行节点服务启动事件!
2020-01-13 16:26:36.127 [main] INFO c.i.sclass.baseauth.listener.MainStandbyRunnerListener - 节点服务启动完成!
从节点启动
2020-01-13 16:27:46.292 [main] INFO c.i.s.common.mainstandby.config.MainStandbyProperties - 主备启动参数:[enable=true,host=127.0.0.1,path=/MainStandbyStart,value=StandbyNodeStart]
2020-01-13 16:27:46.762 [main] INFO c.i.s.common.mainstandby.component.MainStandbyRunner - 节点已被抢注,不再发布节点抢注成功事件!!!
主节点宕机
2020-01-13 16:28:39.509 [main-EventThread] INFO c.i.sclass.common.mainstandby.watcher.ZookeeperWatcher - 节点断开连接
2020-01-13 16:28:39.516 [main-EventThread] INFO c.i.sclass.common.mainstandby.watcher.ZookeeperWatcher - 发布节点抢注成功事件
2020-01-13 16:28:39.516 [main-EventThread] INFO c.i.s.baseauthtest.listener.MainStandbyRunnerListener - 执行节点服务启动事件!
2020-01-13 16:28:39.517 [main-EventThread] INFO c.i.s.baseauthtest.listener.MainStandbyRunnerListener - 节点服务启动完成!
乔客0311
关注
关注
点赞
收藏
打赏
评论
基于zookeeper的主备服务
为了高可用通产我们一个服务会部署多节点。但是有时我们希望对某些操作要求单线程处理,此时可以通过主备服务形式实现。正常情况下主节点服务处理,当主节点宕机后备用节点相关服务继续处理。
复制链接
扫一扫
专栏目录
zookeeper主备集群demo
growdu的网络博客
06-20
170
使用zookeeper搭建主备集群,要求实现如下功能:搭建好zookeeper后,需要使用zookeeper 客户端来连接zookeeper,并在zookeeper中写入相关信息。
zookeeper集群原理分析
我叫小白
07-21
357
1、zookeeper集群角色
2、ZAB协议
3、zookeeper集群选举机制
4、ZAB和Paxos算法的联系与区别
5、zookeeper负载均衡与nginx负载均衡的区别
参与评论
您还未登录,请先
登录
后发表或查看评论
Zookeeper HA集群搭建,主备切换测试验证
weixin_40524659的博客
03-13
409
Zookeeper集群中只要有过半的节点是正常的情况下,那么整个集群对外就是可用的。
正是基于这个特性,要将ZK集群的节点数量要为奇数(2n+1:如3、5、7个节点)较为合适。
zookeeper服务集群工作图:
zookeeper HA集群搭建:
设备信息:
设备:192.168.136.136
设备:192.168.136.137
设备:192.168.136.138
1,首先在三台设备上分别安装单机zookeeper,方法已经在上篇blog介绍过,
2, 接下...
ZK做主备决策服务器倒换实现
weixin_33751566的博客
12-18
229
2019独角兽企业重金招聘Python工程师标准>>>
...
java服务器主备_ZK做主备决策服务器倒换实现
weixin_32109109的博客
02-27
249
主备服务器如何倒换?采用 ZooKeeper 来做主备决策,主备服务器都连接到 ZooKeeper 建立自己的节点,主服务器的路径规则为“/MQ/server/ 分区编号 /master”,备机为“/MQ/server/ 分区编号 /slave”,节点类型为 EPHEMERAL。备机监听主机的节点消息,当发现主服务器节点断连后,备服务器修改自己的状态,对外提供消息读取服务。简单实现代码如下:主服务...
基于zookeeper的主备切换方法
weixin_34082854的博客
03-30
767
继承CZookeeperHelper即可快速实现主备切换:https://github.com/eyjian/mooon/blob/master/mooon/include/mooon/net/zookeeper_helper.h
zookeeper的ZOO_EPHEMERAL节点(如果ZOO_EPHEMERAL满足不了需求,可以考虑和ZOO...
简单使用 ZooKeeper 实现集群主备切换
Dongguabai 的博客
05-05
3023
昨天晚上看了一篇博客,作者实现了一个分布式的调度框架,其中支持两种集群模式,其中一种就是主备模式,是基于 ZooKeeper 实现的,这也是 ZooKeeper 很常见的应用场景,还没来得及看具体细节就去处理了一个线上问题,今天一直找不到那个博客链接。今天就尝试自己实现一下,本文会介绍两种实现方式(总体思想一致,部分细节有所差别)。
这种主备模式首先需要从集群中选出 Master 节点,然后剩余节...
zookeeper 高可用-主备集群安装部署
技术札记
06-03
1852
修改主机host
上传并解压安装包,重命名文件夹
在节点目录下创建 数据和日志文件夹
修改zoo.cfg配置文件
zoo.cfg配置参数说明
在数据文件夹下创建myid文件
防火墙设置
配置开机启动
以三个节点为例
服务器1:192.168.13.81 端口:2181、2881、3881
服务器2:192.168.13.82 端口:2182、2882、3882
服务器3:192.16...
基于ZooKeeper实现HA高可用性以及自动主备切换
JSON_ZJS的博客
06-13
7068
默认情况下,standalone cluster manager对于worker节点的失败是具有容错性的(迄今为止,Spark自身而言对于丢失部分计算工作是有容错性的,它会将丢失的计算工作迁移到其他worker节点上执行)。然而,调度器是依托于master进程来做出调度决策的,这就会造成单点故障:如果master挂掉了,就没法提交新的应用程序了。为了解决这个问题,spark提供了两种高可用性方案,...
Zookeeper 05 示例代码-主备节点切换
Nathan Yan
06-18
4752
主备节点的切换,是分布式应用的基本要求。现在用 Zookeeper 实现主备节点自动切换功能。
基本思路:
1 多个服务启动后,都尝试在 Zookeeper中创建一个 EPHEMERAL
类型的节点,Zookeeper本身会保证,只有一个服务会创建成功,其他服务抛出异常。
2 成功创建节点的服务,作为主节点,继续运行
3 其他服务设置一个Watcher监控节点状态,
4 如果主节点消
java zookeeper 主从热备_zookeeper 核心原理
weixin_39988930的博客
02-16
147
zookeeper 核心原理1、了解zookeeper的设计2、zookeeper集群角色3、深入分析ZAB协议4、从源码层面分析leader选举的实现过程5、关于zookeeper的数据存储6、关于zookeeper数据存储zookeeper 的由来zookeeper的设计防止单点故障集群方案(leader、follower)、还能分担请求每个节点的数据是一致的leader、master、red...
zookeeper实现分布式协调服务--主备切换的核心原理
znHD的博客
10-21
636
zookeeper可以用于解决hdfs中NamNode、Yarn中ResourceManager中的单点问题。
以ResourceManager为例,集群中可以存在多个ResourceManager,只有一个处于active状态,其余都是standby状态。
1.刚启动时,所有ResourceManager节点都会去写一个lock临时节点,但是只有一个能写成功。成功写入的节点进入active状...
分布式系统中利用zookeeper集群实现微服务主备切换代码片段(C语言版)
pfang722的博客
11-04
1814
分布式系统中,zookeeper可以应用到多种场景,集群管理,配置管理,服务发现,分布式锁,命名服务等。这里主要提供集群管理中主备切换的代码片段。
zookeeper c api主备切换例子
最新发布
fulianzhou的专栏
09-24
189
步骤:
1.准备3台主机并同步好时间。
2.在主机1启动zookeeper服务,创建节点/services
3.在主机2运行应用程序,连接主机1的zookeeper
4.主机2往zookeeper的/services节点注册临时节点,节点名=IP:端口 节点数据=注册时间us
5.主机2监听/services节点
6.分别在主机1,主机3启动运行应用程序;分别向zookeeper注册临时节点。并监听/services节点。
7.以先启动的应用程序为主机,及节点数据小的为主机。
8.三台主机运行起来后,只有一
zookeeper的选主过程
Alyson_han的博客
04-22
8272
Leader选举  Leader选举是保证分布式数据一致性的关键所在。当Zookeeper集群中的一台服务器出现以下两种情况之一时,需要进入Leader选举。  (1) 服务器初始化启动。  (2) 服务器运行期间无法和Leader保持连接。  下面就两种情况进行分析讲解。  1. 服务器启动时期的Leader选举  在集群初始化阶段,当有一台服务器Server1启动时,该Server1处于Loo...
zookeeper中的ZAB协议理解
热门推荐
鸡蛋达芬奇
08-25
1万+
ZAB协议
ZAB协议是专门为zookeeper实现分布式协调功能而设计。zookeeper主要是根据ZAB协议是实现分布式系统数据一致性。
zookeeper根据ZAB协议建立了主备模型完成zookeeper集群中数据的同步。这里所说的主备系统架构模型是指,在zookeeper集群中,只有一台leader负责处理外部客户端的事物请求(或写操作),然后leader服务器将客户端的写操作数据同步到所有
zookeeper在mysql主库选举切换中的应用
云计算、分布式架构、K8S、大数据、机器学习、搜索、推荐、广告
04-18
1万+
为了保证可用性,传统的关系型数据库(mysql)通常采用一主多备的方式,当主宕机后,切换到备机。
有多种方式可以做到主备自动失效检测切换,比如传统的HA软件heartbeat,keepalived等等,采取虚拟IP的方式对客户端透明;
这里主备自动切换方案没有采取VIP的方式,而是用zookeeper对数据库集群进行管理,可以做到主备失效检测切换,主库的选举,
比如考虑到mysql对多核利用
“相关推荐”对你有帮助么?
非常没帮助
没帮助
一般
有帮助
非常有帮助
提交
©️2022 CSDN
皮肤主题:1024
设计师:我叫白小胖
返回首页
乔客0311
CSDN认证博客专家
CSDN认证企业博客
码龄9年
暂无认证
40
原创
27万+
周排名
6万+
总排名
10万+
访问
等级
1317
积分
粉丝
74
获赞
17
评论
239
收藏
私信
关注
热门文章
IDEA插件-热部署:JRebel
24805
基于zookeeper的主备服务
4483
日志链路追踪
4347
pagehelper-分页插件
4310
优雅的处理if-else 工厂模式+策略模式
3675
分类专栏
算法刷题
贪心算法
双指正
二分查找
排序算法
mybatis
Java
10篇
分布式
2篇
分表分库
5篇
软件安装
springboot
1篇
jdk
6篇
多线程
4篇
spring
2篇
hibernate
1篇
性能优化
4篇
中间件
2篇
其他
3篇
最新评论
归并排序详解(JAVA)
会写代码的小孩儿:
终于,类似断点运行,搞明白了
IDEA插件-热部署:JRebel
六羽bat:
重启下就有了
IDEA插件-热部署:JRebel
一个孤独漫步者的遐想:
感谢大佬
IDEA插件-热部署:JRebel
EdmundDshi:
感谢大佬
您愿意向朋友推荐“博客详情页”吗?
强烈不推荐
不推荐
一般般
推荐
强烈推荐
提交
最新文章
冒泡算法详解(AVA)
归并排序详解(JAVA)
快速排序详解(JAVA)
2022年3篇
2021年2篇
2020年20篇
2019年15篇
目录
目录
分类专栏
算法刷题
贪心算法
双指正
二分查找
排序算法
mybatis
Java
10篇
分布式
2篇
分表分库
5篇
软件安装
springboot
1篇
jdk
6篇
多线程
4篇
spring
2篇
hibernate
1篇
性能优化
4篇
中间件
2篇
其他
3篇
目录
评论
被折叠的 条评论
为什么被折叠?
到【灌水乐园】发言
查看更多评论
打赏作者
乔客0311
你的鼓励将是我创作的最大动力
¥2
¥4
¥6
¥10
¥20
输入1-500的整数
余额支付
(余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付
您的余额不足,请更换扫码支付或充值
打赏作者
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额
抵扣说明:
1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。 2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。
余额充值