ZooKeeper概念详解,最全整理(zookeeper简介)

ZooKeeper概念详解,最全整理ZooKeeper 概览
ZooKeeper 是一个开源的分布式协调服务,ZooKeeper 框架最初是在“Yahoo!\”上构建的,用于以简单而稳健的方式访问他们的应用程序。

ZooKeeper 概述

ZooKeeper 是一个开源的分布式协调服务。 ZooKeeper 框架最初构建在Yahoo! 之上,旨在提供一种简单而可靠的方式来访问应用程序。

Apache ZooKeeper 自此成为Hadoop、HBase 和其他分布式框架使用的编排服务的标准。

例如,Apache HBase 使用ZooKeeper 来跟踪分布式数据的状态。

ZooKeeper的设计目标是将复杂且容易出错的分布式一致性服务封装成一组高效可靠的原语,并通过一组简单易用的接口呈现给用户。

**介绍:** 操作系统或计算机网络术语的类别。它是一个由多条指令组成的进程,用于完成特定的功能。这个不能分割。也就是说,原语的执行必须是连续的,并且在执行过程中不能被中断。

ZooKeeper是一个典型的分布式数据完整性解决方案,允许您基于ZooKeeper实现数据发布/订阅、负载均衡、命名服务、分布式协调/通知、集群管理、分布式锁定和分发等功能。

ZooKeeper最常用的使用场景之一是充当服务生产者和服务消费者的注册中心。

当服务生产者调用服务时,首先会在ZooKeeper中查找该服务,并调用服务生产者的内容和数据。

ZooKeeper在Dubbo架构中充当注册中心的角色,如下图所示。

Dubbo架构图

下面根据个人使用情况谈谈ZooKeeper

我做过的项目主要使用ZooKeeper作为Dubbo的注册中心(Dubbo官方推荐使用ZooKeeper注册中心)。

另外,在构建Solr集群时,我们使用ZooKeeper作为Solr集群的管理工具。

此时ZooKeeper主要提供以下功能:

集群管理:容错、负载均衡。配置文件集中管理。集群入口。

个人认为,在使用ZooKeeper时,最好使用集群版本的ZooKeeper,而不是单机版本。

官网的一张架构图描述了ZooKeeper的集群版本。通常,三台服务器可以组成一个ZooKeeper集群。

为什么使用奇数个服务器组成ZooKeeper集群更好?

ZooKeeper 的领导者选举算法已知使用Zab 协议。 Zab的中心思想是,如果大部分服务器写入成功,那么任务数据也会写入成功。

如果您有三台服务器,则最多一台服务器可以挂起。如果您有4 台服务器,则最多1 台服务器可以挂起。

对于3 或4 台服务器,可靠性是相同的,因为最多1 台服务器可以挂起。

在这种情况下,选择奇数个ZooKeeper 服务器。

重要的ZooKeeper 概念

重要概念总结

关于ZooKeeper 的重要概念:

ZooKeeper本身是一个分布式程序(只要至少有一半的节点存活,ZooKeeper就会正常运行)。 **为了保证高可用性,ZooKeeper最好以集群的形式部署。 **这样,只要集群中的大多数机器可用(容忍特定机器的故障),ZooKeeper 本身就会继续运行。将可用。 **ZooKeeper 将数据存储在内存中**。这保证了高吞吐量和低延迟(尽管内存限制了存储容量。这种限制也是进一步保持Znode 上存储的数据量较低的原因)。 **ZooKeeper 具有高性能。 **写入在所有服务器之间同步状态,这可以提高性能,特别是对于读取次数多于写入次数的应用程序。 (“读取”多于“写入”是协调服务的常见场景。) **ZooKeeper 有临时节点的概念。 **只要创建临时节点的客户端会话处于活动状态,临时节点就存在。

当会话结束时,临时节点将被删除。持久节点是指一旦创建了一个ZNode,它就一直保存在Zookeeper中,除非该ZNode被主动删除。

ZooKeeper最底层实际上只提供两个功能:管理(存储、读取)用户程序发送的数据,为用户程序发送数据节点监控服务。

第4 章第1 节和第7 章第8 节(《从 Paxos 到 ZooKeeper》) 提供了以下会话、Znode、版本、观察者和ACL 概念的概述。

会议

会话是指ZooKeeper服务器和客户端之间的会话。在ZooKeeper中,客户端连接是客户端和服务器之间的长TCP连接。

当客户端启动时,首先与服务器建立TCP连接,客户端会话生命周期也从初始连接建立开始。

通过该连接,客户端可以通过心跳检测与服务器保持有效的会话,向Zookeeper服务器发送请求并接收响应,并通过该连接接收服务器发送的Watch事件通知。

Session的sessionTimeout值用于设置客户端会话的超时时间。

如果客户端连接由于各种原因而断开,例如服务器负载过大、网络故障或客户端主动断开连接,则将保留之前创建的会话。仍然有效。

在为客户端创建会话之前,服务器首先为每个客户端分配一个sessionID。

sessionID是Zookeeper会话的关键标识,因此很多会话相关的操作机制都是基于这个sessionID的。

因此,会话ID 必须是全局唯一的,无论哪个服务器将它们分配给客户端。

Z节点

当我们谈论分布式时,我们通常将组成集群的每台机器称为“节点”。

然而,在ZooKeeper中,“节点”分为两类。

第一类也指形成集群的机器。这称为机器节点。第二类是指数据模型中的数据单元,称为数据节点(ZNode)。

ZooKeeper 将所有数据存储在内存中。数据模型是一棵树(Znode树),Znodes是由正斜杠(/)分隔的路径,例如/foo/path1。每个服务器存储自己的数据内容和属性信息集。

在Zookeeper中,节点可以分为两类:持久节点和临时节点。所谓持久节点,是指一旦创建了一个ZNode,它就一直保存在ZooKeeper中,除非该ZNode被主动删除。

临时节点则不同。它的生命周期与客户端会话绑定,当客户端会话过期时,客户端创建的所有临时节点都将被删除。

此外,ZooKeeper还允许用户为每个节点添加一个特殊的属性SEQUENTIAL。

当节点标记有此属性时,ZooKeeper 在创建节点时会自动在节点名称末尾添加一个整数。该整数是由父节点维护的自动递增数字。

版本

前面提到,Zookeeper 中的每个ZNode 中都会存储数据,对于每个ZNode,Zookeeper 都会维护一个称为Stat 的数据结构。

Stat 中记录了该ZNode 的三个数据版本。

version(当前ZNode版本) cversion(当前ZNode子节点版本) aversion(当前ZNode ACL版本)

观察者

观察者(事件监听器)是ZooKeeper的一个非常重要的功能。

ZooKeeper允许用户在指定节点上注册多个观察者,当触发某个事件时,ZooKeeper服务器将该事件通知给感兴趣的客户端。这种机制是ZooKeeper实现分布式协调服务时的一个关键特性。

前交叉韧带

ZooKeeper使用ACL(AccessControlLists)策略进行权限控制,类似于UNIX文件系统中的权限控制。

ZooKeeper定义了五种权限,如下所示。

特别值得注意的是,CREATE和DELETE这两个权限是子节点权限控制。

动物园管理员功能

ZooKeeper有哪些特点?详细介绍如下:

**顺序一致性:**同一客户端发起的事务请求最终会按照严格的顺序应用到ZooKeeper。 **原子性:** 每个事务请求的处理结果一致地应用于集群中的所有机器。也就是说,集群中的所有机器要么成功应用特定事务,要么没有一台机器应用该事务。 **单一系统镜像:** 无论客户端连接到哪个ZooKeeper服务器,显示的服务器数据模型都是一致的。 **可靠性:** 应用更改请求后,更改的结果将持续存在,直到被下一个更改覆盖。

ZooKeeper 设计目标

简单的数据模型

ZooKeeper 允许分布式进程通过共享的分层命名空间相互协调,类似于标准文件系统。

命名空间由ZooKeeper 中称为Znode 的数据寄存器组成,类似于文件和目录。

与典型的存储文件系统不同,ZooKeeper 数据存储在内存中,这使得ZooKeeper 能够实现高吞吐量和低延迟。

可以构建集群

为了保证高可用性,ZooKeeper最好以集群的形式部署。这使得只要集群中的大多数机器可用(容忍特定机器的故障),ZooKeeper 本身就可以继续使用。

当客户端使用ZooKeeper时,它必须知道集群机器列表,并与集群中的特定机器建立TCP连接才能使用该服务。

客户端使用此TCP 链接发送请求、获取结果、获取监听事件以及发送心跳包。如果连接异常断开,客户端可以连接到另一台机器。

ZooKeeper官方提供的架构图:

上图中的每台服务器代表一台安装了ZooKeeper服务的服务器。组成ZooKeeper服务的服务器在内存中维护当前服务器状态,并且每个服务器之间保持通信。

通过Zab协议(Zookeeper原子广播)跨集群维护数据一致性。

顺序存取

对于来自客户端的每个更新请求,ZooKeeper 都会分配一个全局唯一的增量编号。

该数字反映了所有事务操作的顺序。应用程序可以使用ZooKeeper 的此功能来实现高级同步原语。这个数字是时间戳,也称为zxid(ZooKeeper 事务ID)。

高性能

ZooKeeper 具有高性能。这对于读取次数多于写入次数的应用程序来说尤其有效,因为写入会同步所有服务器之间的状态。 (“读取”多于“写入”是协调服务的常见情况。)

ZooKeeper集群角色概述

**最常见的集群模式:Master/Slave模式(Active/Standby模式)。 **在此模式下,主服务器通常作为主服务器提供写服务,其他从服务器通过异步复制从主服务器获取最新数据来提供读服务。

不过,ZooKeeper 并没有选择传统的主/从概念,而是引入了三种角色:领导者、追随者和观察者。

如下所示:

ZooKeeper 集群中的所有机器通过领导者选举过程选举出一台称为“领导者”的机器。

读取器可以为客户端提供写入和读取服务。只能提供阅读服务,不包括读者、关注者、观察者。

follower和observer唯一的区别是,observer机器不参与leader选举过程,也不参与写操作的“过半写成功”策略。因此,观察者机器可以提高读取性能。影响集群而不影响写入性能。

ZooKeeper ZAB 协议Paxos 算法

ZAB协议Paxos算法

Paxos算法是ZooKeeper的灵魂。不过ZooKeeper并没有完全采用Paxos算法,而是采用ZAB协议作为其核心算法来保证数据的一致性。

另外,ZooKeeper的官方文档还指出,ZAB协议并不是像Paxos算法那样通用的分布式共识算法,而是专门为ZooKeeper设计的崩溃可恢复的原子消息广播算法。

ZAB协议概述

ZAB(ZooKeeper Atomic Broadcast)协议是专门为分布式协调服务ZooKeeper设计的原子广播协议,用于支持崩溃恢复。

ZooKeeper主要依靠ZAB协议来实现分布式数据的一致性。基于该协议,ZooKeeper实现了主备模式的系统架构,维持集群内副本之间的数据一致性。

ZAB协议的两种基本模式

ZAB 协议包括两种基本的模式,分别是崩溃恢复和消息广播。

当整个服务框架在启动过程中,或是当 Leader 服务器出现网络中断、崩溃退出与重启等异常情况时,ZAB 协议就会进入恢复模式并选举产生新的 Leader 服务器。

我们整理了上百道【运维技术栈面试题】,成为您运维面试路上的好助手。这样,你就可以安心参加面试并获得高薪offer。

这些面试题涵盖了从Shell、MySQL到K8s等云原生技术栈,适合运维行业新人以及运维行业新人的面试需求。升职或换工作以增加薪水。

本次访谈集内容为

174 运维工程师面试题128 k8s 面试题108 shell 脚本面试题200 Linux 面试题51 Docker 面试题35 Jenkis 面试题78 MongoDB 面试题17 ansible 面试题60 dubbo 面试题53 Kafka 面试题18 mysql 面试题40 nginx 面试题77 redis 面试题Zookeeper 题28

总共1000多道面试题,内容全面且有价值。

174 道运营工程师面试问题

1.什么是运维?

2、运维人员在工作场所经常需要与操作人员进行交互。运营人员做什么工作?

3. 给定300台服务器,如何管理它们?

4、我们简单解释一下raid0、raid1和raid5这两种运行模式的运行原理和特点。

5、LVS、Nginx、HAproxy有什么区别,工作中如何选择?

6. Squid、Varinsh、Nginx 有什么区别,你在工作中如何选择?

7.Tomcat和Resin有什么区别?

8.什么是中间件?

9. Tomcat 的三个端口8005、8009、8080 是什么意思?

10.什么是CDN?

11.什么是网站灰度发布?

12、请简单说明一下DNS域名解析的过程。

13.什么是RabbitMQ?

14.Keepalived如何工作?

15.描述LVS工作流程的三种模式。

16、mysql的innodb如何识别锁定问题以及mysql如何减少主从复制延迟?

d0raid1raid5两种工作模式的工作原理及特点

5、LVS、Nginx、HAproxy有什么区别,工作中如何选择?

6. Squid、Varinsh、Nginx 有什么区别,你在工作中如何选择?

7.Tomcat和Resin有什么区别?

8.什么是中间件?

9. Tomcat 的三个端口8005、8009、8080 是什么意思?

10.什么是CDN?

11.什么是网站灰度发布?

12、请简单说明一下DNS域名解析的过程。

13.什么是RabbitMQ?

14.Keepalived如何工作?

15.描述LVS工作流程的三种模式。

16、mysql的innodb如何识别锁定问题以及mysql如何减少主从复制延迟?

17.如何重置mysql root密码?

以上对#ZooKeeper概念的详细解释以及最全面的相关内容来源合集仅供参考。相关信息请参见官方公告。

原创文章,作者:CSDN,如若转载,请注明出处:https://www.sudun.com/ask/91309.html

(0)
CSDN的头像CSDN
上一篇 2024年6月21日
下一篇 2024年6月21日

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注