分布式系统心跳机制(一)

本文分享自天翼云开发者社区《分布式系统心跳机制(一)》,作者:白杨

分布式系统架构 当前大部分分布式系统架构如下图:

image

有一个中心节点来存储集群元数据和管理work儿节点,中心节点采用主备模式来实现HA。当中心节点主故障后,备节点接管业务成为主节点。我们下面讨论的心跳机制就是基于这种分布式架构而设计的。

心跳设计目标: 1.master控制节点的切换,不可以影响server的心跳。 2.server可以感知到master的每一次切换。 3.master在任意场景下都不会丢失server故障的事件。 4.心跳可以作为其它控制消息是否需要重试的依据。

心跳Clien端设计

image

a.worker2启动后只有master的列表,并不知道哪个是leader,因此先广播bootstrap信息。 b.只有leader节点响应bootstrap信息,leader生成session id并持久化,返回bootstrap ack 给worker2,标记worker2为Up。 c.worker2收到ack信息本地记录leader的epoch,sessionid等信息作为后续发送心跳的凭证,并进入connected状态。 d.bootstrap ack消息还需要携带,心跳超时时间,假心跳超时时间。

假心跳超时:假心跳超时的时间一般小于心跳超时的时间,例如:心跳超时的时间为5s,假心跳超时的时间就为3s。这主要是为了识别leader切换,当到了假心跳超时时间后,worker将开始广播心跳,尝试连接到新的leader,在心跳超时时间内连接上新的leader则对外是无感知的。

image   a.worker2进入connected状态后,后续定期发送HB消息给leader,leader返回ACK。 b.如果这时候leader故障了,follwer变成leader,超过假心跳超时时间后将会触发心跳广播。

image

a.leader故障后,新的leader接管了业务,并且从持久化存储中load起worker2的相关信息,主要是sessionid信息。 b.worker2到达假心跳时间后意识到旧leader可能故障,因此开始广播心跳寻找新的leader。 c.新的leader收到worker2的信息,并且比对sessionid是一致的则接收并返回hb ack。 d.worker2收到新的HB ack后更新新的leader地址与epoch信息,整个流程对外是透明的。

image

a.worker2找到新leader后,不再广播心跳而是单一的给leader发送。

点赞
收藏

评论区

加载中...

相关推荐

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

MySQL部分从库上面因为大量的临时表tmp_table造成慢查询

背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_

springcloud知识点笔记

Eureka的自我保护机制:默认情况下EurekaClient定时向EurekaServer端发送心跳包,如果EurekaServer在一定时间内没有收到EurekaClient发送的心跳包,便会直接从服务注册列表中剔除该服务(默认90S),但是在短时间丢失大量的服务实例心跳,这时候EurekaServer会开启自我保护机制,不会剔除该服务。Ribbon

Twitter的分布式自增ID算法snowflake (Java版)

概述分布式系统中,有一些需要使用全局唯一ID的场景,这种时候为了防止ID冲突可以使用36位的UUID,但是UUID有一些缺点,首先他相对比较长,另外UUID一般是无序的。有些时候我们希望能使用一种简单一些的ID,并且希望ID能够按照时间有序生成。而twitter的snowflake解决了这种需求,最初Twitter把存储系统从MySQL迁移

Netty(一) SpringBoot 整合长连接心跳机制

 https://github.com/crossoverJie/JCSprout原创: crossoverJie 阅读原文(https://www.oschina.net/action/GoToLink?urlhttps%3A%2F%2Fmp.weixin.qq.

MCU的心脏

晶振是石英晶体谐振器(quartzcrystaloscillator)的简称,它被称为电路系统的心脏,它为整个系统提供“心跳”。中央处理器(CPU)一切指令的执行都是建立在这个“心跳”上的,这个心跳就是CPU执行指令所必须的时钟频率信号,一般来说时钟信号频率越高,CPU的运行速度也就越快。只要是包含CPU的电子产品,都至少包含一个时钟源,有些在外面看不到晶