1.ZooKeeper服务端启动过程

  1. 加载解析配置文件,明确磁盘快照路径、事务日志路径、心跳时间、serverid、集群中的其他服务器地址和端口、角色
  2. 加载内存DataTree,确定现有数据的最大zxid、epoch等信息
    1. 加载磁盘快照
    2. 加载磁盘事务日志
  3. 根据解析后的配置,拿到了当前serverid,集群规模,其他服务器的地址。每个服务器两两之间开始互相连接。
    1. 建立连接的第一个包,发送的是服务器的当前状态,基本只有sid,没有最大zxid,因为这里只是建立连接。
    2. 根据serverid的大小,保证只能大的连小的,这样保证了每两个服务器之间有且只有一个连接,且有向。
    3. 该连接为长连接,使用BIO的Socket实现,为后面节点的断线感知提供了基础。
    4. 对于一个服务器而言,它维持了与其他所有服务的长连接,每个连接以及数据传输由一个独立的线程负责,避免单线程的话阻塞在某一个服务器,导致整个通讯阻塞。线程的逻辑很简单,使用队列和其他线程通讯,不断地从队列取数据发到对应的服务器。
  4. 集群中的服务器连通后,发现当前服务器状态为LOOKING,就会开始投票选主,确定Leader、Follower的角色。注:Observer角色是在配置中指定,在配置解析过程中已经确定完成。
    1. 一共两种情况会投票选主
      1. 集群启动的时候,此时无主,要选主。
      2. 集群运行时,主故障,此时要选主。
    2. zk是保证CP的,牺牲A可用性,在选主的时候,为了保证一致性,会暂停对外服务,重新创建当前服务器和其他服务器的连接管理器。
    3. 每个服务器都先投自己,带着自己的serverid,选举周期,最大zxid。将这些封装成票据,放入发送队列,发送给其他远程服务器。
    4. 如果当前服务器的投票周期过期,重置周期,重置投票箱(map),重新投。
    5. 远程服务器的投票数据都会添加到队列中,然后从队列中拿出和当前服务器的投票数据进行对比,返回是否应该采用远程的投票(即当前服务器投票的服务器数据较老)
      1. 远程服务器的epoch更大,返回true
      2. epoch一样大,远程的zxid更大,返回true
      3. epoch、zxid一样大,远程的serverid更大,返回true
      4. 总之一定会比较出来到底用哪个投票的服务器,不会有模棱两可的结果。
    6. 如果远程服务器的数据较新,当前服务器会修改自己的投票,也投新的服务器,同时会通知其他所以服务器。
    7. 如果远程服务器的状态是FOLLOWING或者LEADING,就表示已经偷出来谁是leader了,远程的服务器发过来的投票sid就是leader的sid,看看是不是当前服务器,是的话当前就是leader,不是的话,当前就是Follower。
    8. 选主结束。
  5. 选主结束后,所有learner都会主动连接leader,leader会accept每一个socket(长连接),同时为每一个socket创建并启动一个LearnerHandler线程,交给该线程处理数据。
    1. 每个learner连接到leader后,发送的第一个包一定是该learner的服务器信息,包括sid,zxid,epoch等。
    2. leader会比较epoch,根据配置的QuorumVerifier(仲裁算法)来决定用什么epoch作为新的纪元。一般的算法逻辑是,当前leader会比较、计算每一个learner(follower和observer)发来的epoch,然后更新epoch,如果超过一半的具有投票权的Follower数据都处理过了,那么就使用这最后更新的epoch作为新的纪元,后面其他的learner数据都不处理了。
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,372评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,368评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,415评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,157评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,171评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,125评论 1 297
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,028评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,887评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,310评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,533评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,690评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,411评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,004评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,659评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,812评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,693评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,577评论 2 353

推荐阅读更多精彩内容