46道ZooKeeper高频题整理(附答案背诵版)

ZooKeeper 适合哪些应用场景?

ZooKeeper 适用于以下应用场景:

  1. 分布式服务注册与订阅:在分布式环境中,为了保证高可用性,通常同一个应用或同一个服务的提供方都会部署多份,达到对等服务。而消费者就需要在这些对等的服务器中选择一个来执行相关的业务逻辑,比较典型的服务注册与订阅,如 Dubbo。
  2. 分布式配置中心:发布与订阅模型,即所谓的配置中心,顾名思义就是发布者将数据发布到 ZooKeeper 节点上,供订阅者获取数据,实现配置信息的集中式管理和动态更新。
  3. 命名服务:在分布式系统中,通过命名服务客户端应用能够根据指定名字来获取资源、服务地址和提供者等信息。
  4. 分布式锁:这个主要得益于 Zookeeper 为我们保证了数据的强一致性。
  5. 数据发布和/订阅:主要的一个场景,比如配置中心。
  6. 负载均衡:能够基于域名服务,进行应用的负载,从而达到请求负载到各个应用中。
  7. 分布式协调/通知:对于一个在多台机器部署运行的应用上,通常都需要一个协调者来控制整个系统的运行流程。
  8. 集群管理:在集群环境中,机器和应用都是分散着进行部署,每次进行服务的上下线升级的过程中,都要手动进行集群的管理,这样造成人做的事比较重复性,并且也比较麻烦容易出错。
  9. Master选举。
  10. 分布式队列。

简述什么是Zookeeper ?

Zookeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Hadoop和Hbase的重要组件。它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务等。Zookeeper的目标就是封装好复杂易出错的关键服务,将简单易用的接口和性能高效、功能稳定的系统提供给用户。

简述Zookeeper 目录结构和作用 ?

Zookeeper的目录结构是基于层次型的目录树,它对树中的节点进行有效管理,从而可以设计出多种多样的分布式的数据管理模型。Zookeeper的作用主要是用来维护和监控存储的数据的状态变化,通过监控这些数据状态的变化,从而可以达到基于数据的集群管理。它并不是用来专门存储数据,而是用于维护和监控数据的状态变化。

简述Zookeeper的工作原理 ?

Zookeeper的工作原理主要基于原子广播机制,实现这个机制的协议叫做Zab协议。Zab协议有两种模式,它们分别是恢复模式和广播模式。当服务启动或者在领导者崩溃的时候,Zab就进入了恢复模式,当领导者被选举出来,且大多数server完成了和leader的状态同步之后,恢复模式就结束了。状态同步保证了leader和server具有相同的系统状态。在广播模式下,当一个server加入zookeper服务中,它会在恢复模式下启动,发现leader并和leader进行状态的同步,待到同步结束,它也参与消息广播。Zookeeper服务一直维持在Broadcast状态,直到leader崩溃了或者leader失去了大部分的follower。

简述zoo.cfg 配置项目和对应的作用 ?

Zoo.cfg配置文件是Zookeeper的核心配置文件,其中可以配置的参数有:

  1. clientPort:用于配置当前服务器对客户端暴露的端口,一般配置为2181,无默认值。
  2. dataDir:用于配置Zookeeper服务器存储快照文件(Zookeeper 节点数据)的目录,无默认值。
  3. dataLogDir:用于配置服务器存储事务日志文件的目录,有默认值dataDir,但是建议将两个目录分别配置,防止磁盘的并发读写,影响服务器性能。可将其配置在一个单独的磁盘上。
  4. tickTime:心跳时间,用于配置服务器最小时间的单位,默认值3000ms,心跳检测时间通常是该单位的倍数。如客户端与服务端之间的会话超时时间在2tickTime~20tickTime之间。
  5. initLimit:用于配置leader服务器等待Follower服务器启动,并完成数据同步的时间,默认为10,表示10*tickTime。
  6. syncLimit:用于配置leader服务器和Follower服务器之间进行心跳检测的最大延时时间,默认为5,表示5*tickTime。
  7. minSessionTimeout和maxSessionTimeout:用于服务端对客户端会话超时时间的限制,也就是客户端自定义的超时时间必须在minSessionTimeoutmaxSessionTimeout内,其默认为分别为2和20,时间表示为2tickTime20tickTime。
  8. maxClientCnxns:从socket层面限制单个客户端和单台服务器之间的最大并发连接数,即以IP地址粒度来进行连接数的限制,如果为0,表示不作限制,默认为60。
  9. clientPortAddress:针对多网卡的机器,该参数允许为每个IP地址指定不同的监听端口。
  10. server.id=host:port:port:用于配置组成Zookeeper集群的机器列表,其中id为serverId,与myid文件中的值对应。第一个端口用于指定Leader服务器和Follower服务器进行运行时通信和数据同步所使用的端口,第二个端口用于进行Leader选举过程中的投票通信。
  11. autopurge.snapRetainCount:用于配置Zookeeper在自动清理的时候需要保留的快照数据文件数量和对应的事务日志文件,默认为3,自定义值小于3也会取值3。

这些参数可以用来配置Zookeeper服务器的各个方面的行为,包括端口号、数据存储目录、心跳检测机制、集群模式等。在具体使用时,需要根据实际情况进行配置。

请列举Zookeeper的常用命令 ?

Zookeeper的常用命令包括:

  1. 启动Zookeeper服务:bin/zkServer.sh start
  2. 查看 Zookeeper状态:bin/zkServer.sh status
  3. 停止 Zookeeper服务:bin/zkServer.sh stop
  4. 重启 Zookeeper服务:bin/zkServer.sh restart
  5. 连接服务器:zkCli.sh -server 192.168.1.2:2181
  6. 查看根目录:ls /
  7. 创建节点:create /zk myDate
  8. 查看节点内容: get /zk
  9. 设置节点内容: set /zk myBook
  10. 删除节点: delete /zk

这些命令可以在Zookeeper的CLI环境下使用,用于管理Zookeeper服务器的状态、连接、节点创建、内容查看、修改和删除等操作。

列举Zookeeper服务启动日志的组成结构 ?

Zookeeper服务启动日志的组成结构包括三类日志:事务日志、快照日志和系统日志。

  1. 事务日志:在Zookeeper系统正常运行过程中,针对所有的更新操作,在返回客户端更新成功响应前,Zookeeper会保证已经将本次更新操作的事务日志写到磁盘上,只有这样,整个更新操作才会生效。事务日志为二进制文件,不能通过vim等工具直接访问,可以通过Zookeeper自带的功能文件读取事务日志文件。
  2. 快照日志:Zookeeper服务器会产生三类日志其中就有快照日志,它是指在Zookeeper运行过程中,将系统状态的快照以文件形式记录下来,可以用于系统恢复或者备份。
  3. 系统日志:Zookeeper的系统运行日志可以通过三个位置来进行设置,一是log4j.properties文件中通过zookeeper.log.dir=.来设置,这里的’.'指的是zkServer.sh所在的目录;二是在zkEnv.sh文件中通过ZOO_LOG_DIR=" Z O O K E E

你可能感兴趣的:(面试题,zookeeper,分布式,云原生)