vue适合什么网站开发,工程与建设官网,wordpress图片生成插件,企业 怎么建交互网站目录 ZooKeeper 的定义ZooKeeper 的特点ZooKeeper 的应用场景你觉得Zookeeper比较重要的功能ZooKeeper 的选举机制 ***zookeeper主节点故障#xff0c;如何重新选举#xff1f;ZooKeeper 的监听原理 ***zookeeper集群的节点数为什么建议奇数台 ***ZooKeeper 的部署方式有哪几… 目录 ZooKeeper 的定义ZooKeeper 的特点ZooKeeper 的应用场景你觉得Zookeeper比较重要的功能ZooKeeper 的选举机制 ***zookeeper主节点故障如何重新选举ZooKeeper 的监听原理 ***zookeeper集群的节点数为什么建议奇数台 ***ZooKeeper 的部署方式有哪几种集群中的角色有哪些集群最少需要几台机器规则是怎样的ZooKeeper 的常用命令Zookeeper目录结构简述什么是CAP理论zookeeper满足CAP的哪两个 ***Paxos 算法 ***ZAB协议/Zookeeper怎么保证一致性的 ***ZooKeeper 使用的ZAB协议与Paxo算法的异同分布式集群中为什么会有主节点节点挂掉的时候Zookeeper是如何发现的Leader一旦选出如何让集群中所有Follow获悉Zookeeper下 服务器的工作状态有几种Zookeeper提供了什么ZooKeeper是否会自动进行日志清理请说明 ZooKeeper 使用到的各个端口的作用zookeeper 负载均衡和 nginx 负载均衡区别什么是脑裂ZooKeeper节点类型临时节点、永久节点用来作什么能否为临时节点创建子节点是哪个进程在Zookeeper上注册临时节点ZooKeeper对节点的watch监听是永久的吗客户端向服务端写数据流程zookeeper 是如何实现分布式锁的当自己master连接不上Zookeeper会怎么办Zookeeper的数据存储在什么地方总结一下哪些地方用到了 zookeeperZookeeper实现HDFS的高可用是怎么操作的 ZooKeeper 的定义 总的来说Zookeeper 是一个开源的分布式的为分布式应用提供协调服务的 Apache 项目。
具体来说Zookeeper是一个基于观察者模式设计的分布式服务管理框架它负责存储和管理大家都关心的数据然后接受观察者的注册一旦这些数据的状态发生了变化Zookeeper 就负责通知已经在 Zookeeper 上注册的那些观察者做出相应的反应。
Zookeeper 文件系统 通知机制。
ZooKeeper 的特点 1Zookeeper是由一个领导者Leader)和多个跟随者Follower组成的集群。
2集群中只要有半数以上节点存活Zookeeper 集群就能正常服务。
3全局数据一致性每个 Server 保存一份相同的数据副本Client 无论连接到哪个 server数据都是一致的。
4更新请求 顺序性 来自同一个 Client 的更新请求按其发送顺序依次执行。
5数据更新原子性一次数据更新要么成功要么失败保证了数据一致性。
6实时性在一定时间范围内Client 能读到最新数据。
ZooKeeper 的应用场景 1统一命名服务在分布式环境下经常需要对服务进行统一命名便于识别例如 ip 地址。
2统一配置管理在一个集群中要求所有节点的配置信息是一致的
3统一集群管理在一个集群中需要实时监控每个节点的状态变化
4负载均衡在Zookeeper中记录每个服务器的访问次数再次请求的时候让访问次数最少得服务器去处理当前的请求。
你觉得Zookeeper比较重要的功能 ZooKeeper最重要的功能之一是提供分布式系统的协调和管理服务它能够协调分布式系统中各个节点的状态维护分布式系统的配置信息帮助分布式系统实现同步和通信。
ZooKeeper 的选举机制 *** 选举机制总原则集群中的每台机器都参与投票通过交换选票信息得到每台机器的最终得票 一旦出现得票数超过机器总数 一半以上 数量当前机器即为 leader。
以一个简单的例子来说明整个选举的过程。
假设有五台服务器组成的 Zookeeper 集群它们的 id 从 1-5同时它们都是最新启动的也就是没有历史数据在存放数据量这一点上都是一样的。假设这些服务器依序启动来看看会发生什么。 1服务器 1 启动发起一次选举。服务器 1 投自己一票。此时服务器 1 票数一票不够半数以上3票选举无法完成服务器 1 状态保持为LOOKING
2服务器2启动再发起一次选举。服务器 1 和 2 分别投自己一票并交换选票信息此时服务器 1 发现服务器2的 ID 比自己目前投票推举的服务器1大更改选票为推举服务器2。此时服务器 1 票数 0 票服务器 2 票数 2 票没有半数以上结果选举无法完成服务器12 状态保持 LOOKING
3服务器 3 启动发起一次选举。此时服务器 1 和 2 都会更改选票为服务器 3。此次投票结果服务器1为0票服务器2为0票服务器 3 为 3 票。此时服务器 3 的票数已经超过半数服务器 3 当选 Leader。服务器 12 更改状态为 FOLLOWING服务器3更改状态为LEADING
4服务器 4 启动发现当前集群已经有 Leader它自己自动成为 Follower
5服务器5启动同服务器 4一样。
zookeeper主节点故障如何重新选举 当集群中的leader挂掉集群会重新选出一个leader此时首先会比较每一台机器的epochepoch大的直接选举为leaderepoch若是相同就比较每一台机器的事务idzxidzxid 最大的被选为 leader。极端情况zxid 都相等的情况那么就会直接比较服务器idmyid、sid。 在 Zookeeper 集群中epoch 是用来标识 Zookeeper 集群中的逻辑时期epoch。每当选举出一个新的 Leader 时Zookeeper 集群的 epoch 就会增加以标识当前的 Leader 任期。 ZooKeeper 的监听原理 *** 1首先要有一个 main() 线程
2在 main() 线程中创建 ZooKeeper 客户端这时就会创建两个线程一个负责网络连接通信connet一个负责监听listener
3客户端通过 connet 线程将注册的监听事件发送给服务端
4在 ZooKeeper 的注册监听器列表中将注册的监听事件添加到列表中
5ZooKeeper 监听到有数据或路径的变化就会将这个消息发送给 listener 线程
6 客户端 listener 线程内部调用 process() 方法做出相应处理 zookeeper集群的节点数为什么建议奇数台 *** 1因为 zookeeper 中只要有半数以上的机器正常工作那么整个集群对外就是可用的。比如说如果有 2 个 zookeeper那么只要 1 个死了 zookeeper 就不能用了因为 1没有过半那么 zookeeper 的死亡容忍度为 0同理如果有 3 个 zookeeper如果死了 1个还剩2个 正常还是过半的所以 zookeeper 的死亡容忍度为 1我之前算过 4 个5 个 6 个等情况下的死亡容忍度发现了一个规律2n 和 2n-1 的容忍度是一样的所以为了节约资源就选择奇数台。
2防止因为集群脑裂造成集群用不了。比如有 4 个节点脑裂为 2 个小集群都为 2 个节点这时候不能满足半数以上的机器正常工作因此集群就不可用了那么当有 5 个节点的时候脑裂为 2 个小集群分别为2和 3这时候 3 这个小集群仍然可以选举出 leader因此集群还是可用的。
ZooKeeper 的部署方式有哪几种集群中的角色有哪些集群最少需要几台机器规则是怎样的 1部署方式
单机模式将Zookeeper运行在单台机器上仅供学习和开发使用集群模式zookeeper运行在多台机器上每台机器上都运行一个zookeeper实例伪分布式模式仍然只有一台物理机器但是该机器运行了多个Zookeeper实例。
2zookeeper有三种角色
老大Leader(领导者老二Follower 跟随者老三Observer观察者。Observer 接受客户端连接将写操作转给Leader但Observer不参与投票即不参加一致性协议的达成只同步Leader节点的状态Observer角色是为集群系统扩展而生的。Follower和Observer归类为Learner学习者
3集群最少需要机器数3集群规则为2N1台N0
ZooKeeper 的常用命令 1 ls查看当前 znode 的子节点
2create创建节点
3set设置节点的值
4 get获取节点的值
5 stat查看节点的状态
6 delete删除节点
7 deleteall递归删除节点
Zookeeper目录结构 ZooKeeper的目录结构采用类似Unix文件系统的树形结构。ZooKeeper 目录结构由 ZNode 组成每个ZNode 默认情况下最多可以存储 1MB 的数据。ZNode是ZooKeeper中的基本数据单元可以用于存储配置信息、状态信息等。
ZooKeeper目录结构的根节点为/所有的ZNode都是以根节点为基础进行构建的。每个ZNode的名称是唯一的并且可以包含多个子节点每个子节点都是一个独立的ZNode。ZNode可以是永久节点也可以是临时节点。
在ZooKeeper目录结构中常用的ZNode包括
/zookeeperZooKeeper的内部节点用于存储ZooKeeper的配置信息和状态信息。/brokersKafka集群中所有的Broker信息存储在该节点下。/controllerKafka集群中Controller的状态信息存储在该节点下。/consumersKafka中所有的消费者组信息存储在该节点下。/configKafka集群的配置信息存储在该节点下。/adminKafka中所有的管理员操作信息存储在该节点下。
简述什么是CAP理论zookeeper满足CAP的哪两个 *** 分布式系统有三个指标
Consistency一致性 用户在访问分布式系统中的任意节点得到的数据必须一致。 Availability可用性 用户访问集群中任意的健康节点必须能得到响应而不是超时或拒绝。 Paratition tolerance分区容错性 分区因为网络故障或其他原因导致分布式系统中的部分节点与其他节点失去连接形成独立的分区。容错在集群出现分区时整个系统也要持续对外提供服务。
分布式系统无法同时满足这三个指标这个结论就是 CAP 理论。 Zookeeper 符合一致性、分区容错性。CP Paxos 算法 *** Paxos 算法一种基于消息传递且具有高度容错性的一致性算法。
Paxos 算法解决的问题如何快速正确的在一个分布式系统中对某个数据的值达成一致并且保证不论发生任何异常都不会破坏整个系统的一致性。
在一个 Paxos 系统中首先将所有的节点划分为Proposer提议者、Accepter接受者和 Learner学习者。注意每个节点都可以身兼数职
一个完整的 Paxos 算法流程分为三个阶段
准备阶段 Proposer 向多个 Accepter 发出 Propose 请求Promise承诺Accepter 针对收到的Propose请求进行Promise承诺 接受阶段 Proposer 收到多个Accepter的Promise承诺后向Accepter发出ProposeAccepter 针对收到的Propose请求进行Accept处理 学习阶段 Proposer将形成的决议发送给所有的 Learner
ZAB协议/Zookeeper怎么保证一致性的 *** 依赖了 ZAB 协议ZAB 协议借鉴了 Paxos 算法是专门为 ZooKeeper 设计的支持崩溃恢复的原子广播协议。Paxos 算法中采用多个Proposer 会存在竞争 Acceptor 的问题ZooKeeper 设计为只有一个 Leader 负责处理外部的写事务请求然后 Leader 将数据同步到其他 Follower 节点。即ZooKeeper 只有一个 Leader 可以发起提议。
ZAB 协议包括两种基本的模式消息广播正常、崩溃恢复异常。
这两个模式是相辅相成的消息广播模式就是 Zookeeper 不出现任何问题并且正常工作的模式崩溃恢复看字面意思就是当 Zookeeper 出现故障时用于恢复的。
1消息广播 2崩溃恢复 ZooKeeper 使用的ZAB协议与Paxo算法的异同 相同点
两者都存在一个类似于 Leader 进程的角色由其负责协调多个 Follower 进程的运行Leader 进程都会等待超过半数的 Follower 做出正确的反馈后才会将一个提案进行提交ZAB 协议中每个 Proposal 中都包含一个 epoch 值来代表当前的 Leader 周期Paxos 中名字为 Ballot
不同点
ZAB(ZooKeeper Atomic Broadcast) 用来构建高可用的分布式数据主备系统ZookeeperPaxos 是用来构建分布式一致性状态机系统。而 Paxos 算法与 ZAB 协议不同的是Paxos 算法的发起者可以是一个或多个。当集群中的 Acceptor 服务器中的大多数可以执行会话请求后提议者服务器只负责发送提交指令事务的执行实际发生在 Acceptor 服务器。这与 ZooKeeper 服务器上事务的执行发生在 Leader 服务器上不同。Paxos 算法在数据同步阶段是多台 Acceptor 服务器作为数据源同步给集群中的多台 Learner 服务器而 ZooKeeper 则是单台 Leader 服务器作为数据源同步给集群中的其他角色服务器。
注意ZAB是在Paxos的基础上改进和演变过来的。
分布式集群中为什么会有主节点 在分布式环境中有些业务逻辑只需要集群中的某一台机器进行执行其他的机器可以共享这个结果这样可以大大减少重复计算提高性能于是就需要主节点。
节点挂掉的时候Zookeeper是如何发现的 ZooKeeper提供了一种心跳机制即每个节点都会定期向其他节点发送心跳消息如果一个节点超过一定时间没有收到其他节点的心跳消息就会判定这个节点已经下线了。
Leader一旦选出如何让集群中所有Follow获悉 心跳机制
Zookeeper下 服务器的工作状态有几种 ZooKeeper 服务器有四种工作状态
LOOKING寻找 Leader 状态。当服务器处于该状态时它会认为当前服务器没有 Leader因此需要进入 Leader 选举状态。FOLLOWING跟随者状态。表明当前服务器角色是 Follower。LEADING领导者状态。表明当前服务器角色是 Leader。OBSERVING观察者状态。表明当前服务器角色是 Observer。
Zookeeper提供了什么 1文件系统 2通知机制
ZooKeeper是否会自动进行日志清理 ZooKeeper 不会自动进行日志清理需要运维人员进行日志清理
请说明 ZooKeeper 使用到的各个端口的作用 12888Follower与Leader交换信息的端口
23888万一集群中的 Leader 服务器挂了需要一个端口来重新进行选举选出一个新的 Leader而这个端口就是用来执行选举时服务器相互通信的端口
zookeeper 负载均衡和 nginx 负载均衡区别 zk的负载均衡是可以调控nginx只是能调权重其他需要可控的都需要自己写插件但是nginx的吞吐量比zk大很多应该说按业务选择用哪种方式。
什么是脑裂 脑裂通常会出现在集群环境中当集群中出现故障比如网络故障分成了“两个集群”这两个集群无法互相通信此时就会让集群觉得Leader挂了这时候就会出现两个Leader节点这就是脑裂。
实际上Zookeeper集群中是不会出现脑裂问题的而不会出现的原因就跟过半机制有关。有了过半机制对于一个Zookeeper集群要么没有Leader要没只有1个Leader这样就避免了脑裂问题。
ZooKeeper节点类型 1Znode有两种类型
短暂客户端和服务器端断开连接后创建的节点自己删除持久客户端和服务器端断开连接后创建的节点不删除
2Znode有四种形式的目录节点默认是persistent
持久化目录节点客户端与zookeeper断开连接后该节点依旧存在持久化顺序编号目录节点 客户端与zookeeper断开连接后该节点依旧存在只是Zookeeper给该节点名称进行顺序编号临时目录节点 客户端与zookeeper断开连接后该节点被删除临时顺序编号目录节点客户端与zookeeper断开连接后该节点被删除只是Zookeeper给该节点名称进行顺序编号
临时节点、永久节点用来作什么 临时节点常用于实现分布式锁等功能而永久节点则用于存储一些配置信息、元数据等。
能否为临时节点创建子节点 ZooKeeper 中不能为临时节点创建子节点如果需要创建子节点应该将要创建子节点的节点创建为永久性节点
是哪个进程在Zookeeper上注册临时节点 一般情况下是客户端进程通过ZooKeeper的API在zk上注册临时节点。客户端注册的临时节点在客户端连接断开后会自动删除。
ZooKeeper对节点的watch监听是永久的吗 不是一个Watch事件是一个一次性的触发器当被设置了Watch的数据发生了改变的时候则服务器将这个改变发送给设置了Watch的客户端以便通知它们。
为什么不是永久的举个例子如果服务端变动频繁而监听的客户端很多情况下每次变动都要通知到所有的客户端这太消耗性能了。在实际应用中很多情况下我们的客户端不需要知道服务端的每一次变动我只要最新的数据即可。
客户端向服务端写数据流程 可以分为两种情况一是将写入请求直接发送给 leader 一是将写入请求发给 follower该情况也会将写入请求转发给 leader。 1客户端会向ZK集群中的一台机器server1发送写数据的请求。
2server1接收到请求后马上会通知leader 有写数据的请求来了
3leader拿到请求后进行广播让集群每一台机器都准备要写数据
4集群中的所有机机器接收到leader广播后都回应一下leader
5 leader再次进行广播 开始写数据其他机器接收到广播后也开始写数据
6数据成功写入后回应leader最后由leader来做整个事务提交
7当数据成功写入后有最初和客户端发生连接的 server1 回应客户端数据写入成功。
zookeeper 是如何实现分布式锁的 1首先 zookeeper 集群接收到获取锁的请求时就会在 locks 节点下创建一个临时顺序节点。
2然后先对当前节点下的所有子节点进行排序判断自己是不是最小的节点如果是就可以获取到锁如果不是就说明锁已被其他客户端获取然后可以对前一个节点进行监听等待客户端把自己创建的节点删除。
3获取到锁后进行业务的处理释放锁的时候删除该临时节点然后后面的节点就会接收到通知。
当自己master连接不上Zookeeper会怎么办 当一个Hadoop集群中的Active NameNode连接不上ZooKeeper时它会尝试在一段时间内重新连接ZooKeeper。如果在此期间内Active NameNode仍然无法连接到ZooKeeper会直接转为standby。
Zookeeper的数据存储在什么地方 1内存中DataTree、DataNode、ZKDatabaseZooKeeper 会将一部分数据存储在内存中以提高读取速度和性能。
2磁盘上的快照文件ZooKeeper 会定期将内存中的数据持久化到磁盘上的快照文件中以便在重启后恢复状态。
2事务日志ZooKeeper 会将所有更新操作记录在事务日志中以确保数据的持久性和一致性。
总结一下哪些地方用到了 zookeeper 1Hadoop HA配置高可用
2HBase保证master的高可用、RegionServer 的监控、元数据的入口以及集群配置的维护等工作。
3Kafkacontroller的选举、broker 的注册、topic 的注册
Zookeeper实现HDFS的高可用是怎么操作的 在HDFS中实现高可用需要使用Zookeeper来协调选举NameNode的过程。具体来说我们需要启动两个NameNode一个作为Active节点一个作为Standby节点。同时在Zookeeper上创建一个znode作为一个lock的作用来确保只有一个NameNode能够成为Active节点。
在启动时Active节点会尝试去Zookeeper上创建这个lock如果成功则表示它已经成为Active节点否则它会监视这个lock的状态一旦该节点被释放它就会重新尝试去获得这个lock。同时Standby节点也会监视这个lock的状态一旦Active节点出现故障或宕机它会尝试去获得这个lock并成为Active节点。
当Active节点宕机时Standby节点会检测到这个故障然后会尝试去获取这个lock。在获取到这个lock之后它会启动自己的NameNode服务并且接管原来Active节点的工作。
在整个过程中Zookeeper起到了协调的作用它可以保证只有一个NameNode节点被选举为Active节点保证了系统的高可用性。