文档章节

zk中leader和follower启动时信息交互

writeademo
 writeademo
发布于 10/17 19:01
字数 302
阅读 17
收藏 0

QuorumPeer中读取节点状态信息,不同状态下设置不同角色

1 Leader启动Follower接收器LearnerCnxAcceptor

 

LearnerCnxAcceptor负责接收非leader连接请求,线程中创建LearnerHandler处理器

2 Learner发起和leader的连接

Follower.followLeader()

Observer.observeLeader()

 

3 leader启动时会创建LearnerHandler

每个learnerHandler实例都对应一个leader和learner之间的连接,负责消息通信和

数据同步

4 向leader注册

learner和leader连接后。会向leader注册,即learner服务器基础信息

LearnerInfo zxid,sid发送给leader服务器

 

5 leader 接收到learner信息 服务器算出最新epoch

@Override
public long getEpochToPropose(long sid, long lastAcceptedEpoch) throws InterruptedException, IOException {
    synchronized (connectingFollowers) {
        if (!waitingForNewEpoch) {
            return epoch;
        }
        if (lastAcceptedEpoch >= epoch) {
            epoch = lastAcceptedEpoch + 1;
        }
        if (isParticipant(sid)) {
            connectingFollowers.add(sid);
        }
        QuorumVerifier verifier = self.getQuorumVerifier();
        if (connectingFollowers.contains(self.getId()) && verifier.containsQuorum(connectingFollowers)) {
            waitingForNewEpoch = false;
            self.setAcceptedEpoch(epoch);
            connectingFollowers.notifyAll();
        } else {
            long start = Time.currentElapsedTime();
            if (sid == self.getId()) {
                timeStartWaitForEpoch = start;
            }
            long cur = start;
            long end = start + self.getInitLimit() * self.getTickTime();
            while (waitingForNewEpoch && cur < end && !quitWaitForEpoch) {
                connectingFollowers.wait(end - cur);
                cur = Time.currentElapsedTime();
            }
            if (waitingForNewEpoch) {
                throw new InterruptedException("Timeout while waiting for epoch from quorum");
            }
        }
        return epoch;
    }
}

© 著作权归作者所有

writeademo
粉丝 25
博文 693
码字总数 264495
作品 0
东城
私信 提问
zookeeper源码分析之集群模式服务端(下)

接上篇文章,本文主要分析一下一个ZK集群从刚启动到对外提供服务这段时间发生了什么 一、执行流程概述 首先在ZK集群中,不管是什么类型的节点,刚刚启动时都是LOOKING状态然后发起选举寻找L...

凌风郎少
2018/11/04
0
0
Learning Apache Kafka 2nd Edition读书笔记

Chap 1 Kafka简介 1.Apache Kafka是一款开源的,分布式的,基于分区、日志提交和订阅推送的消息系统。设计用于: 持久化消息到硬盘,TB级别 高吞吐量,每秒数百M读写 分布式,支持弹性伸缩 ...

GunnerAha
2018/04/10
0
0
Kafka介绍, kafka主题的副本机制

1、Kafka概览 Apache下的项目Kafka(卡夫卡)是一个分布式流处理平台,它的流行是因为卡夫卡系统的设计和操作简单,能充分利用磁盘的顺序读写特性。kafka每秒钟能有百万条消息的吞吐量,因此很...

qq_31598113
2017/04/28
0
0
分析Zookeeper的一致性原理

zookeeper(简称zk),顾名思义,为动物园管理员的意思,动物对应服务节点,zk是这些节点的管理者。在分布式场景中,zk的应用非常广泛,如:数据发布/订阅、命名服务、配置中心、分布式锁、集...

憬薇
2018/04/13
0
0
Mesos+Zookeeper+Marathon+Docker分布式集群管理最佳实践

本文来自于老男孩架构班-赵班长布置年后作业,觉得非常实用,特此分享。 参考赵班长的unixhot以及马亮blog 笔者QQ:572891887 Linux架构交流群:471443208 1.1Mesos简介 Mesos是Apache下的开...

Bgxuliangwei
2016/03/14
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Mysql备份还有这么多套路,还不了解下?

逻辑备份和物理备份 逻辑备份 逻辑备份用于备份数据库的结构(CREAET DATABASE、CREATE TABLE)和数据(INSERT),这种备份类型适合数据量小、跨SQL服务器、需要修改数据等场景。如mysqldump...

架构文摘
6分钟前
2
0
吊打面试官——秒杀系统设计

首先设计一个系统之前,我们需要先确认我们的业务场景是怎么样子的,我就带着大家一起假设一个场景好吧。 场景 我们现在要卖100件下面这个婴儿纸尿裤,然后我们根据以往这样秒杀活动的数据经...

java后端开发
11分钟前
2
0
高频电子电路电磁兼容的设计要点

电磁兼容的问题常发生于高频状态下,个别问题(电压跌落与瞬时中断等)除外。高频思维,总而言之,就是器件的特性、电路的特性,在高频情况下和常规中低频 状态下是不一样的,如果仍然按照普...

demyar
13分钟前
2
0
JDK 12 JVM 垃圾回收器 Shenandoah GC 的实践案例

https://www.infoq.cn/article/L4LU1J0VxXtA6ASeGYbV

perofu
22分钟前
2
0
Linux下的计划任务--cron

linux任务计划cron介绍 大部分系统管理工作都是通过定期自动执行某个脚本来完成的,Linux的cron就是用来定期执行脚本的。 Linux任务计划功能的操作都是通过crontab命令来完成的,常用的选项有...

爱米修啊
24分钟前
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部