zookeeper - 主从通信(3)

概述

    在讲清楚了《zookeeper选举》的过程之后,突然有个疑问那就是既然完成了选举了,那么zookeeper集群中各个角色将会如何进入工作,以及如何应对leader退出重新发起选举呢?然后就继续阅读才有了这篇博文。

    这篇博文主要想讲清楚的几个问题是:1、选举结束后leader的任务;2、选举结束后follower和observer的任务;3、leader和follower之间的交互;4、如何发起重新选举。其实我们知道在zookeeper集群当中选举和通信的两个通信是通过不同的端口去实现的,所以这里介绍的通信是另外一个端口的事情。

    加插一句,其实看源码有时候你跳出代码的细枝末节而直接问自己关键问题,无非就那几个核心的知识点,只要把这几个知识点在源代码中得到印证并串联起来,那么整个系统就打通了。当然,看源代码切记不要着急,因为肯定有一些地方是你忽略,宏观上正常运转的逻辑在代码层面肯定是可以找到的,所以只要耐心读下去和分析就可以了,当然毕竟很多源码已经出来了很久了,已经很多前人已经阅读了,可以在他们的肩膀上继续你的理解。


基础知识

    在讲解正式内容之前需要把zookeeper集群中的各个角色分清楚,这样能够更加方便的理解。我们之前将的选举无非就是为了区分出leader、follower、observer三种角色,各个角色的作用如下:

Leader

        Leader服务器是整个zookeeper集群工作机制中的核心,其主要工作有以下两个:

        事物请求的唯一调度和处理者,保证集群事务处理的顺序性。

        集群内部各个服务器的调度者。

Follower

        从角色名字可以看出,Follower服务器是zookeeper集群状态的跟随者,其主要工作有以下三个:

        处理客户端非事物请求,转发事物请求给Leader服务器。

        参与事务请求Proposal的投票。

        参与Leader选举投票。

Observer

        和Follower唯一的区别在于,Observer不参与任何形式的投票,包括事物请求Proposal的投票和Leader选举投票。简单地讲,Observer服务器只提供非事物服务,通常用于在不影响集群事务处理能力的前提下提升集群的非事物处理能力。


核心逻辑

    在QuorumPeer的主循环当中,可以看到不同角色的处理逻辑,所以如果从阅读源码的角度出发,这里就是最好的入口了,我们要讲的leader、follower、observer等角色任务也是直接从这里可以跟进去发现的。


leader的任务

    leader的主要任务主要是两个,负责响应client的连接以及请求,响应follower的连接以及请求。因为前者涉及到数据的读写任务所以暂时没来得及分析,主要着重讲解后者。先把步骤写清楚,最后以源码截图来表述整个过程

    leader的过程

        1、启动follower的acceptor线程负责接收follower的连接(肯定会有follower来连接,因为前面的选举过程中zk集群的所有节点其实已经启动了)。

        2、针对accept后的follower的socket后建立一个单独的线程负责与follower进行通信。

        3、启动zookeeper的server端,主要用于监听client的连接。

        4、进入while循环后不停的发送ping包


    leader过程源码        

leader过程-1

    1、负责启动acceptor线程接收follower的连接


leader-2

    1、判断是否超过半数的follower进行连接了,这个有个知识点比较绕,就是如果没有超过半数我们就会通过connectingFollowers.wait进行等待,那么是谁帮忙唤醒的呢?其实是针对每个follower连接我们会新建一个线程进行处理,在这个处理过程中我们会去判断是否达到半数从而唤醒这个主线程的wait。


leader-3

1、针对每个连接创建的一个创建一个线程,然后在线程里面负责和client进行通信。


leader-4

1、每个与client通信的线程中都会尝试去唤醒leader的线程,其实可以看出来getEpochToPropose调用的是同一个方法,也就是说会执行notifyAll。这样就可以唤醒leader的等待线程。


leader-5

1、负责和follower进行交互的逻辑。


leader-6

1、主线程不停和follower进行通信。


follower&observer任务

    follower(observer)的角色就是跟leader不停的通信,然后如果通信失败那么就退出进行重新选举过程。当然follower还负责接收leader的命令执行相应的操作。整个follower的启动过程如下:

    1、follower向leader发起连接

    2、连接建议后进行for循环负责处理leader的命令。


源码分析

follower-1

1、负责连接leader并处理leader发送的报文


follower-2

1、主动连接leader并取得输入输出流进行交互。


follower-3

1、处理leader发送过来的命令的逻辑


follower&leader交互

    这部分主要是讲解清楚leader和follower在建立连接过程中的交互,直接用时序图来说明,同时将交互之间的报文格式一并贴出来。


交互过程

1、follower向leader发起连接

2、follower发送FOLLOWERINFO报文

3、leader回复LEADERINFO报文

4、follower发送ACKEPOCH报文

5、follower和leader各自继续执行各自逻辑

6、报文格式请参考《zookeeper-服务器角色介绍


源码分析

follower-1

核心点在于发起连接和进行连接注册



follower-2

1、发起连接动作



follower-3

1、发送FollowerInfo报文

2、处理LeaderInfo报文

3、发送AckEpoch报文



server-1


server-2


参考文献

    Zookeeper源码分析之六 Leader/Follower初始化

    zookeeper-服务器角色介绍

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,684评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,143评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,214评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,788评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,796评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,665评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,027评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,679评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 41,346评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,664评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,766评论 1 331
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,412评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,015评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,974评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,203评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,073评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,501评论 2 343

推荐阅读更多精彩内容