0. 说明

  记录 ZooKeeper 的读写操作和选举机制


1. ZooKeeper 的读写操作

  1. 读操作:所有 ZooKeeper 节点都可以提供读请求(包括 follower 和 leader )
  2. 写操作:需要先通过 leader 节点,leader 同意之后,可以向指定节点写入

2. ZooKeeper 的选举机制

  2.1 说明

  ZooKeeper 虽然在配置文件中并没有指定 master 和 slave,但是 ZooKeeper 工作时,只有一个节点为 leader,其他则为 follower

  Leader是通过内部的选举机制临时产生的

  1. Zxid: ZooKeeper 的事务 id,每次处理请求(读或写),此 id 会 +1
  2. myid: 在配置时指定的 Zookeeper id

  2.2 初始化选举
  3个节点组成的 ZooKeeper 集群,myid 分别为102、103、104

  1. 启动 s102 ,选举状态为 looking 状态,
  2. 启动 s103 ,和 s102 进行通信,交换选举结果,根据 myid 的大小确认 s103 为 leader
  3. 启动 s104 ,和 s102 、s103 进行通信,交换选举结果,虽然 s104的 myid 的大于 s103 ,但是 s103 获得了一半以上的选票,s103 还是 leader

  2.3 非全新集群选举机制

  适用于 ZooKeeper 节点故障之后的重新选举

  1. 先比较 Zxid ,Zxid 大的胜出
  2. Zxid 相同的情况下, myid 大的胜出

ZooKeeper 的读写操作 & 选举机制的更多相关文章

  1. zookeeper篇-zk的选举机制

    点赞再看,养成习惯,微信搜索「小大白日志」关注这个搬砖人. 文章不定期同步公众号,还有各种一线大厂面试原题.我的学习系列笔记. 说说zk的选举机制 基础概念 zxid=事务id=一个时间戳,代表当前事 ...

  2. zookeeper选举机制

    在上一篇文章中我们大致浏览了zookeeper的启动过程,并且提到在Zookeeper的启动过程中leader选举是非常重要而且最复杂的一个环节.那么什么是leader选举呢?zookeeper为什么 ...

  3. java架构之路-(分布式zookeeper)zookeeper集群配置和选举机制详解

    上次博客我们说了一下zookeeper的配置文件,以及命令的使用https://www.cnblogs.com/cxiaocai/p/11597465.html.我们这次来说一下我们的zookeepe ...

  4. Zookeeper中的watcher监听和leader选举机制

    watcher监听 什么是watcher接口 同一个事件类型在不同的通知状态中代表的含义有所不同,下图列举了常见的通知状态和事件类型. Watcher通知状态与事件类型一览 上图列举了ZooKeepe ...

  5. 分布式协调组件Zookeeper之 选举机制与ZAB协议

    Zookeeper简介: Zookeeper是什么: Zookeeper 是⼀个分布式协调服务的开源框架. 主要⽤来解决分布式集群中应⽤系统的⼀致性问题, 例如怎样避免同时操作同⼀数据造成脏读的问题. ...

  6. 理解zookeeper选举机制

    *:first-child { margin-top: 0 !important; } body>*:last-child { margin-bottom: 0 !important; } /* ...

  7. 学习笔记:Zookeeper选举机制

    1.Zookeeper选举机制 Zookeeper虽然在配置文件中并没有指定master和slave 但是,zookeeper工作时,是有一个节点为leader,其他则为follower Leader ...

  8. Zookeeper的概述、安装部署及选举机制

    一.Zookeeper概述 1.Zookeeper是Hadoop生态的管理者,它致力于开发和维护开源服务器,实现高度可靠的分布式协调. 2.Zookeeper的两大功能: (1)存储数据 (2)监听 ...

  9. zookeeper leader选举机制

    最近看了下zookeeper的源码,先整理下leader选举机制 先看几个关键数据结构和函数 服务可能处于的状态,从名字应该很好理解 public enum ServerState { LOOKING ...

随机推荐

  1. postgresql 常用命令

    普通用法: sudo su - postgres 切换到postgres用户下: psql -U user -d dbname 连接数据库, 默认的用户和数据库是postgres \c dbname ...

  2. [Python学习笔记-001] 内置函数getattr()

    如果某个实例foo有多个方法, 当对foo的每一个方法我们都需要使用try ... except ...进行包装的时候,内置函数getattr()可以用来精简代码. 1. getattr()的用法 # ...

  3. 面试:用快排实现数组中的第K大的数

    #include <iostream> #include <cassert> using namespace std; int selectKth(int a[],int st ...

  4. (转)mybatis-plus入门

    目前正在维护的公司的一个项目是一个ssm架构的java项目,dao层的接口有大量数据库查询的方法,一个条件变化就要对应一个方法,再加上一些通用的curd方法,对应一张表的dao层方法有时候多达近20个 ...

  5. 【JS】for in循环对象,hasOwnProperty()的作用

    var obj = { name:"echolun", age:", sex:"male" }, objName=[], //用来装对象属性名 obj ...

  6. python 常用算法学习(1)

    算法就是为了解决某一个问题而采取的具体有效的操作步骤 算法的复杂度,表示代码的运行效率,用一个大写的O加括号来表示,比如O(1),O(n) 认为算法的复杂度是渐进的,即对于一个大小为n的输入,如果他的 ...

  7. 阿里巴巴java手册示例

    package com.led.daorumysql; /** * @Description:alibaba java development manual * @author 86157 * */ ...

  8. 安装mysql时报Missing required library libcc.dll 126

    Missing required library libcc.dll 126 安装一个Cygwin就好了

  9. C# int? 关键字

    1.int?  关键字说明 (1).int? 表示一个int类型,且该int类型可空,如果不加?的话,那么int类型的默认值为0,不能赋null值,代码如下: int aa = null; (2).当 ...

  10. SQL Server T—SQL 语句【建 增 删 改】(建外键)

    一 创建数据库         如果多条语句要一起执行,那么在每条语句之后需要加 go 关键字 建库  :  create  database  数据库名  create  database  Dat ...