zookeeper选举机制及相关概念
一、zookeeper的一些概念
server和client:
server 指集群的每一台机器
client 指每一个向server请求服务的机器
zookeeper角色:
leader:为客户端提供写服务,负责进行投票的发起和决议,更新系统状态,事务请求的唯一调度和处理者
follower:为客户端提供读服务,参与投票,包括事务请求proposal投票和leader选举投票,接收客户端请求,为客户端返回结果
observe:为客户端提供读服务,不参与任何投票,包括事务请求proposal投票和leader选举投票,同步leader的状态,加快读写速度
znode(数据节点):
zookeeper将所有数据存在内存中,数据模型是一棵树,用斜杠/进行分割的路径就是一个znode,zkCli.sh使用命令行就是对znode的操作
zap协议
为保证zookeeper服务的原子性,保证每个server间的状态同步,包括两种模式:
崩溃恢复模式:当服务启动或leader服务器崩溃退出与重启,zap进入崩溃恢复模式,选举leader服务器或新的leader服务器,当leader被选举出来后,且集群中有过半的机器完成与leader服务器的状态同步,zap就退出恢复模式
消息广播模式:当集群中有过半的follower完成 与leader的状态同步,就进入消息广播模式。当有新的server加入到zookeeper服务中,会以恢复模式启动,找到leader服务器,完成状态同步,然后一起参与到消息广播模式
zookeeper特性:
顺序一致性:同一个客户端的请求严格按照其发起的顺序执行
原子性:事务的一次执行在每个server上应该是一致的,要么都执行,要么都不执行
单一视图:每个server的数据视图都是一样的
实时性:在一定时间内,zookeeper应该保证client读取的数据是最新的
二、zookeeper选举
zookeeper选举
zookeeper节点状态:
LOOKING
LEADING
FOLLOWERING
OBSERVE
当最初的时候,每个server的最初状态都是LOOKING,当leader服务器选举出来后,leader服务器状态变为LEADING,不是observe服务器的server的状态自动变为FOLLOWERING,当leader服务器挂掉之后,所有非observe的server将状态都改为LOOKING,进行新的选举,选举出新的leader服务器,然后leader服务器状态变为LEADING,不是observe的server的状态自动变为FOLLOWERING。
zxid(zookeeper事务id):
zookeeper状态每次改变都会收到一个不同全局唯一的zxid,删除节点,创建节点都会使zookeeper状态改变,zxid不断递增
leader服务器选取规则:
优先检查zxid,zxid大的作为leader服务器
zxid相同就比较myid大小,myid大的作为leader服务器
只有获取过半server的支持才能成为leader
zookeeper选举算法:
basic paxos和fast paxos
basic paxos:选举线程向所有server发起一次询问,按照服务器选取规则去比较,选出下一次要询问的server,当被选取的server有一般server支持,则成为leader服务器,不然就一直选举,直到选出了leader
fast paxos:一个server声明自己要做leader,其它server将配合工作,解决zxid和epoch冲突,并向该server发送接收提议的消息
三、zookeeper命令行
zookeeper命令行使用:
将zookeeper加入环境变量后,在命令行运行zkCli.sh进入zookeeper命令行,连接不同的主机用
./zkCli.sh -server_ip:port
创建节点(znode):
create [-s][-e] path data acl
-s为顺序节点,-e为临时节点,退出zookeeper命令行后就删除,不指定默认为永
久节点
例:create /zk-permanent 123 创建永久节点/zk-permanent
读取节点(znode):
ls path 或者 ls2 path 或者 get path
例:
ls / 查看根目录下的znode
get或ls2 /zk-permanent查看节点 /zk-permanent的详情
更新节点(znode):
set path data
例:set /zk-permanent 456 将/zk-permanent的内容更新为456
删除节点(znode):
delete path
例:delete /zk-permanent,注意,若删除节点存在子节点,则无法完成删除,必须先删除子节点才能删除父节点
转载于:https://blog.51cto.com/13917261/2163268
zookeeper选举机制及相关概念相关推荐
- 2021年大数据ZooKeeper(六):ZooKeeper选举机制
目录 ZooKeeper选举机制 概念 全新集群选举 非全新集群选举 ZooKeeper选举机制 zookeeper默认的算法是FastLeaderElection,采用投票数大于半数则胜 ...
- 学习笔记:Zookeeper选举机制
1.Zookeeper选举机制 Zookeeper虽然在配置文件中并没有指定master和slave 但是,zookeeper工作时,是有一个节点为leader,其他则为follower Leader ...
- 理解zookeeper选举机制
转载:https://www.cnblogs.com/shuaiandjun/p/9383655.html 一.zookeeper集群 配置多个实例共同构成一个集群对外提供服务以达到水平扩展的目的,每 ...
- ZooKeeper学习总结(4)——Zookeeper选举机制总结
Zookeeper 是一个分布式服务框架,主要是用来解决分布式应用中遇到的一些数据管理问题如:统一命名服务.状态同步服务.集群管理.分布式应用配置项的管理等.我们可以简单把 Zookeeper 理解为 ...
- Zookeeper——选举机制原理与Leader和Follower作用
摘要 本博文主要介绍Zookeeper的选举机制的原理与Zookeeper事务请求处理的原理. 一.zookeeper选举算法原理 Leader 服务器的作用是管理 ZooKeeper 集群中的其他服 ...
- Zookeeper选举机制测试
集群分布式 三台物理机为112.113.114 112,为leader 113,为follower 114,为follower 宕机测试 比如,112宕机,关闭112服务器 检测到主节点宕机,113. ...
- Zookeeper(三)——选举机制
Zookeeper 选举机制 第一次启动(五个节点): 服务1启动,发起一次选举,服务器1投自己一票,不够半数以上(3票),选举无法完成,服务器1状态为LOOKING 服务2启动,发起一次选举,服务器 ...
- 带你轻松理解Zookeeper的选举机制
一,Zookeeper选举过程中服务器的状态. LOOKING:寻找leader状态,该状态下,服务器认为当前集群没有leader,会发起leader选举.在选举过程中,所有服务器的状态都是LOOKI ...
- Kaka与Zookeeper的爱恨情仇(——zookeeper过半选举机制)
关于我们在学习kafka中的一些问题及架构,我想在这里浅谈一下我个人的理解: 之所以说这个kafka呢,主要还是最近做实时的项目中大量用到了kafka这个消息中间件,可以说kafka是我们大数据实时项 ...
最新文章
- 权限表管理之删除权限表数据
- socket未读消息 如何设计_如何设计IM系统的消息架构?
- linux下搭建hadoop环境步骤分享
- 新手对于iPhone开发环境等入门问题解答汇总
- UnicodeDecodeError: 'utf-8' codec can't decode byte 0xce in position 0: invalid continuation by 解决方案
- Egret入门学习日记 --- 第十五篇(书中 6.1~6.9节 内容)
- C++11 列表初始化
- Android权限动态权限修改和其他的Android配置修改
- 金蝶检测服务器响应异常,连接金蝶云服务器异常 请检查
- Windows 7远程桌面 重启 关机 任务管理器 命令
- 响应式图片的3种解决方案
- PS抠图之单色背景图片
- linux红帽子安装驱动,安装红帽子使用有megaSR swraid驱动程序和OS推进指点的嵌入式SATA控制器常见设备使用情况的...
- 影响TWS耳机发展的五大关键技术
- 读书笔记 - 《天局》
- php bearer token,php-使用CURL设置Bearer令牌的正确方法
- PIM-SM(ASM模型)
- 爬虫爬取学校通知信息(python))
- .Net Core+Topshelf+Quartz创建Windows定时任务
- 【无为则无心Python基础】— 8、PyCharm下载与安装
热门文章
- python字典_Python字典
- 索引多维数组_PHP数组–索引,关联和多维
- C ++中的初始化程序列表– std :: initializer_list
- eventemitter_节点JS事件模块和EventEmitter
- C++基础教程,基本的输入输出
- 开课吧Java教程之什么是Arrays
- Vant Weapp小程序蹲坑之事件名称问题及解决方案
- nginx+tomcat+msm实现seesion共享
- python成功之路,Day1-发展历史
- 换教室(NOIP2016提高组Day1T3)