zookeeper面试题汇总(选举机制,读写流程,监控原理,常用命令)
gudong366 2025-05-28 17:52 13 浏览
ZooKeeper 服务器有哪几种工作状态?
1. LOOKING:寻找 Leader 状态。当服务器处于该状态时,它会认为当前服务器没有 Leader,因此需要进入 Leader 选举状态。
2. FOLLOWING:跟随者状态。表明当前服务器角色是 Follower。
3. LEADING:领导者状态。表明当前服务器角色是 Leader。
4. OBSERVING:观察者状态。表明当前服务器角色是 Observer。
zookeeper有几种角色?
Leader (领导者) : 客户端提供读服务和写服务。
Follower(跟随者) : 为客户端提供读服务,参与Leader选举过程
Observer(观察者) : 为客户端提供读服务,不参与Leader选举过程
其中:Follower 和 Observer 归类为 Learner(学习者)
ZooKeeper的常用命令?
help:显示所有操作命令
ls path [watch] :使用 ls 命令来查看当前znode中所包含的内容
ls2 path [watch]:查看当前节点数据并能看到更新次数等数据
create普通创建-s 含有序列-e 临时(重启或者超时消失)
get path [watch]: 获得节点的值
set:设置节点的具体值
stat:查看节点状态
delete:删除节点
rmr :递归删除节点
ZooKeeper的监听原理是什么?
(1)首先要有一个main()线程
(2)在main线程中创建Zookeeper客户端,这时就会创建两个线程,一个负责网络连接通信(connet),一个负责监听(listener) 。
(3)通过connect线程将注册的监听事件发送给Zookeeper。
(4)在Zookeeper的注册监听器列表中将注册的监听事件添加到列表中。
(5)Zookeeper监听到有数据或路径变化,就会将这个消息发送给listener线程。
(6) listener线程内部调用了process()方法。
常见的监听
(1)监听节点数据的变化
get path [ watch]
(2)监听子节点增减的变化
ls path [watch]
ZooKeeper的选举机制?
1)半数机制:集群中半数以上机器存活,集群可用。所以Zookeeper适合安装奇数台服务器。
2)Zookeeper虽然在配置文件中并没有指定Master和Slave。但是,Zookeeper工作时,是有一个节点为Leader,其他则为Follower,Leader是通过内部的选举机制临时产生的。
3)以一个简单的例子来说明整个选举的过程。
假设有五台服务器组成的Zookeeper集群,它们的id从1-5,同时它们都是最新启动的,也就是没有历史数据,在存放数据量这一点上,都是一样的。假设这些服务器依序启动,来看看会发生什么,如下图:
(1)服务器1启动,此时只有它一台服务器启动了,它发出去的报文没有任何响应,所以它的选举状态一直是LOOKING状态。
(2)服务器2启动,它与最开始启动的服务器1进行通信,互相交换自己的选举结果,由于两者都没有历史数据,所以id值较大的服务器2胜出,但是由于没有达到超过半数以上的服务器都同意选举它(这个例子中的半数以上是3),所以服务器1、2还是继续保持LOOKING状态。
(3)服务器3启动,根据前面的理论分析,服务器3成为服务器1、2、3中的老大,而与上面不同的是,此时有三台服务器选举了它,所以它成为了这次选举的Leader。
(4)服务器4启动,根据前面的分析,理论上服务器4应该是服务器1、2、3、4中最大的,但是由于前面已经有半数以上的服务器选举了服务器3,所以它只能接收当小弟的命了。
(5)服务器5启动,同服务器4。
Leader
Leader在集群中只有一个节点,是zookeeper集群的中心,负责协调集群中的其他节点。从性能的角度考虑,leader可以选择不接受客户端的连接。
所有的跟随者Follower与观察者Observer节点的写请求都会转交给领导者Leader执行。Leader接受到一个写请求后,首先会发送给所有的Follower,统计Follower写入成功的数量。当有超过半数的Follower写入成功后,Leader就会认为这个写请求提交成功,通知所有的Follower commit这个写操作,保证事后哪怕是集群崩溃恢复或者重启,这个写操作也不会丢失。
Leader的作用
- 在ZAB崩溃恢复之后,消息广播之前,进行集群中的数据同步;
- 维持与Learner的心跳,接收Learner请求消息,并据不同的消息类型,进行不同的处理;
- Learner处理的消息类型包括:PING消息、REQUEST消息、ACK消息、REVALIDATE消息等。
其中:
- PING消息:指Learner的心跳信息;
- REQUEST消息:是Follower发送的提议信息,包括写请求及同步请求;
- ACK消息:是Follower的对提议的回复,超过半数的Follower通过,则commit该提议;
- REVALIDATE消息:是用来延长SESSION有效时间。
Leader的工作流程简图如下所示,实际上流程要比下图复杂得多,启动了三个线程来实现功能:
Follower
Follow在集群中有多个,主要的作用有:
- 与Leader保持心跳连接
- 当Leader挂了的时候,经过投票后成为新的leader。leader的重新选举是由老二Follower们内部投票决定的。
- 向Leader发送请求(PING请求、REQUEST消息、ACK请求、REVALIDATE消息)
- 处理leader发来的消息与请求
- 接收Client的请求,如果为写请求,发送给Leader进行投票;
- 返回Client请求结果。
Follower的工作流程简图:
其中:
- UPTODATE消息:表示同步完成;
- REVALIDATE消息:根据Leader的REVALIDATE结果,关闭待revalidate的session还是允许其接受消息;
- SYNC消息:返回SYNC结果到客户端,这个消息最初由客户端发起,用来强制得到最新的数据更新。
Observer
Observer角色除了不参与Leader选举和Proposal投票外,与Follower的作用相同。
可以说Observer是zookeeper集群中最边缘的存在。Observer的主要作用是提高zookeeper集群的读性能。通过leader的介绍我们知道zookeeper的一个写操作是要经过半数以上的Follower确认才能够写成功的。那么当zookeeper集群中的节点越多时,zookeeper的写性能就 越差。为了在提高zookeeper读性能(也就是支持更多的客户端连接)的同时又不影响zookeeper的写性能,zookeeper集群多了一个儿子Observer,只负责:
- 与leader同步数据
- 不参与leader选举,没有投票权。也不参与写操作的提议过程。
- 数据没有事务化到硬盘。即Observer只会把数据加载到内存。
Zookeeper客户端向服务端写数据流程
一、写流程之写入请求直接发送给Leader节点
- 1)客户端给Leader节点发送了一个写数据的请求,Leader会马上开始写操作,并通知第二台服务器进行写操作;
- 2)服务器进行完写操作之后,发送回应告知Leader节点已完成写操作,Leader节点检测完成写操作的服务器是否超过半数(例如上面三台服务器,只要有两台完成),超过半数立即给客户端发送通知已完成写操作;
- 3)后续Leader节点继续通知未完成写操作的服务器进行写操作,服务器写完则回答Leader节点已完成写操作。
二、写流程之写入请求直接发送给follower节点
- 1)客户端给follower节点发送了 一个写操作请求,follower没有写权限,会马上把写操作请求发送给Leader节点;
- 2)Leader节点接收到follower节点转发的写操作请求,会马上开始写操作,并通知其他服务器开始写操作;
- 3)当Leader服务器检测到超过半数的机器完成了写操作,就会通知之前收到写请求的follower节点已完成写操作,这个follower节点整理信息后再通知客户端已完成写操作。
- 上一篇:[Linux探索之旅]第一部分测试题
- 下一篇:Linux运维工程师面试题3
相关推荐
- 使用再生龙工具远程克隆Linux服务器
-
大家好,之前给大家介绍一个一款可以用来备份还原、远程克隆、P2V、V2V的工具--再生龙,今天就来给大家演示如何用该工具来远程克隆一台linux服务器。使用此方法,可以将一台物理服务器远程克隆到虚拟...
- Linux 下用 SSH 登录远程服务器后把远程服务器文件传本地电脑
-
在Linux下,使用SSH命令登录远程服务器后,可以使用scp命令将远程服务器上的文件复制到本地电脑。以下是scp命令的基本用法:scp[用户名]@[远程服务器地址]:[远程文件路径][本地存放路...
- 一文掌握怎么利用Shell+Python实现Linux系统数据异地备份程序
-
简介:在当今的信息化时代,数据安全已成为企业和个人运维的重中之重。无论是服务器宕机、硬盘损坏,还是遭遇勒索病毒,数据丢失都可能带来巨大损失。为了最大程度保障数据安全,异地备份成为了最佳实践之一。本文将...
- 如何在Linux上搭建本地Docker Registry并实现远程连接
-
在Linux上搭建本地DockerRegistry并实现远程连接,可以按照以下步骤操作:一、安装Docker确保Linux系统上已经安装了Docker。如果尚未安装,可以使用以下命令进行安装(以Ub...
- 服务器连接方法教程(服务器地址怎么连接)
-
连接服务器的方式多种多样,具体取决于服务器的类型、操作系统以及你的使用需求。以下是几种常见的服务器连接方法,包含详细步骤和注意事项:一、远程桌面连接(适用于Windows服务器)适用场景:需要图形...
- 自动化测试学习:使用python库Paramiko实现远程服务器上传和下载
-
前言测试过程中经常会遇到需要将本地的文件上传到远程服务器上,或者需要将服务器上的文件拉到本地进行操作,以前安静经常会用到xftp工具。今天安静介绍一种python库Paramiko,可以帮助我们通过代...
- 手把手教你安装、远程连接Ubuntu 22.04
-
Ubuntu分为桌面版和服务器版本,我们选择服务器版本1下载Ubuntu22.04Ubuntu22.04下载地址:https://releases.ubuntu.com/22.04/ubuntu...
- Windows服务器怎么连接?远程连接服务器命令
-
服务器操作系统可以实现对计算机硬件与软件的直接控制和管理协调,任何计算机的运行离不开操作系统,服务器也一样,服务器操作系统主要分为四大流派:WindowsServer、Netware、Unix和Li...
- 如何使用JuiceSSH实现手机端远程连接Linux服务器
-
在当今数字化时代,远程连接到服务器成为了许多人工作和生活中的必需品。JuiceSSH是一款比较强大的Android应用程序,它可以让您在手机上轻松地远程连接到Linux服务器。下面简单的向您介绍如何使...
- 本地电脑如何远程连接服务器(电脑如何远程桌面连接服务器)
-
下面就来说说如何远程登录服务器。服务器一般有两大类系统,一种是windows系统,一种是Linux系统。下面以Windows系统为例1、Windows系统有自带的登录系统,点击“运行”(或者windo...
- 如何用CHAT配置linux的远程连接?(chattr linux)
-
问CHAT:配置linux的远程连接1.下载ssh2.启动ssh服务3.查看ssh服务状态4.设置ssh服务开机自启动5.设置windows的cmd下ssh6.通过cmd的ssh命令远程到...
- 服务器怎么远程连接控制(服务器远程桌面连接设置方法)
-
我是艾西,还是有很多小白同学问我服务器怎么远程连接。那么今天我们重点来教教大家如何用电脑远程服务器配上图文教程,让不懂的新手小白一看就会,分分钟上手教程远程服务器需要一台电脑俗称“PC”就是我们自己平...
- 如何远程管理Linux服务器(linux远程登录管理)
-
在当今数字化的时代,Linux服务器凭借其稳定性和高效性,成为众多企业和开发者的首选。然而,很多时候我们无法直接在服务器前操作,这就需要掌握远程管理Linux服务器的技巧啦。别担心,今天就来给大家分享...
- Linux系统无法启动?别慌!这可能是全网最全的故障排查攻略
-
当Linux系统罢工时,盲目重装只会浪费时间!本文整理8种常见故障的解决方案,涵盖从引导修复到硬件检测全流程,建议收藏备用。一、引导阶段故障排查1.GRUB引导丢失现象:黑屏显示"grub&...
- Linux进程管理(linux进程管理实验报告)
-
原作者:Linux教程,原文「链接」:https://mp.weixin.qq.com/s/39rQMl3V2Egot9cZ14NCLg【获得原作者转载授权】每个计算机系统都包含一个核心软件集合,即操...
- 一周热门
- 最近发表
- 标签列表
-
- linux一键安装 (31)
- linux运行java (33)
- ln linux (27)
- linux 磁盘管理 (31)
- linux 内核升级 (30)
- linux 运行python (28)
- linux 备份文件 (30)
- linux 网络测试 (30)
- linux 网关配置 (31)
- linux jre (32)
- linux 杀毒软件 (32)
- linux语法 (33)
- linux博客 (33)
- linux 压缩目录 (37)
- linux 查看任务 (32)
- 制作linux启动u盘 (35)
- linux 查看存储 (29)
- linux乌班图 (31)
- linux挂载镜像 (31)
- linux 软件源 (28)
- linux题目 (30)
- linux 定时脚本 (30)
- linux 网站搭建 (28)
- linux 远程控制 (34)
- linux bind (31)