免费注册
流程类
图形化表达方式
脑图类
结构化表达方式
笔记类
高效化表达方式
软件与系统设计
UML
工程与技术设计
数据分析与研究
其他图形
自由结构
树形图
括号图
默认模式

zookeeper基本知识

ProcessOn阳光 3月前
723
ProcessOn,立刻提升你的工作效率
首页 知识社区 zookeeper基本知识

      ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Hadoop和Hbase的重要组件。它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务等。ZooKeeper的目标就是封装好复杂易出错的关键服务,将简单易用的接口和性能高效、功能稳定的系统提供给用户。ZooKeeper代码版本中,提供了分布式独享锁、选举、队列的接口.ZooKeeper是以Fast Paxos算法为基础的,Paxos 算法存在活锁的问题,即当有多个proposer交错提交时,有可能互相排斥导致没有一个proposer能提交成功,而Fast Paxos做了一些优化,通过选举产生一个leader (领导者),只有leader才能提交proposer,具体算法可见Fast Paxos。

知识点总结

下载、安装

下载之前要在本地的机器上安装好java环境。 下载地址 https://dlcdn.apache.org/zookeeper/stable/ 下载之后的文件为tar包 (apache-zookeeper-3.8.4-bin.tar.gz) 解压apache-zookeeper-3.8.4-bin.tar.gz 解压之后的目录bin如下截图:

zookeeper选举算法源码分析梳理记录内容

zookeeper源码分析

配置文件(单机)

解压之后启动之前需要修改、增加相应的配置文件。 复制conf下的zoo_sample.cfg文件重命名为zoo.cfg。zoo.cfg中的配置项如下(重点修改下面标红的参数): tickTime=2000 initLimit=10 syncLimit=5 dataDir=e:/albc/albc_zk_data1 dataLogDir=e:/albc/albczk_data1/log clientPort=2182

配置文件参数说明:

tickTime=2000:  tickTime这个时间是作为Zookeeper服务器之间或客户端与服务器之间维持心跳的时间间隔,也就是每个tickTime时间就会发送一个心跳; initLimit=10:  initLimit这个配置项是用来配置Zookeeper接受客户端(这里所说的客户端不是用户连接Zookeeper服务器的客户端,而是Zookeeper服务器集群中连接到Leader的Follower 服务器)初始化连接时最长能忍受多少个心跳时间间隔数。 当已经超过10个心跳的时间(也就是tickTime)长度后 Zookeeper 服务器还没有收到客户端的返回信息,那么表明这个客户端连接失败。总的时间长度就是 102000=20 秒; syncLimit=5:  syncLimit这个配置项标识Leader与Follower之间发送消息,请求和应答时间长度,最长不能超过多少个tickTime的时间长度,总的时间长度就是52000=10秒; dataDir=e:/zk/zk/data  dataDir是Zookeeper保存数据的目录,默认情况下Zookeeper将写数据的日志文件也保存在这个目录里;也可以指定日志存放地方。 dataDir=e:/zk/zk/log  dataLogDir是Zookeeper保存数据的目录 clientPort=2182  clientPort这个端口就是客户端连接Zookeeper服务器的端口,Zookeeper会监听这个端口接受客户端的访问请求

启动(单机)、连接

进入bin目录 执行zkServer.cmd| zkServer.sh –args  args的选项 为:start|startforeground|stop|restart|status|upgrade|print-cmd 服务启动成功之后,在bin目录下执行 zkCli.cmd –server ip:port

配置集群

进入conf目录下,复制一份zoo_sample.cfg重命名为cluster.cfg cluster.cfg的配置内容如下: 
tickTime=2000 
initLimit=10 
syncLimit=5 
dataDir=../../zkdata/serverC/data 
dataLogDir=../../zkdata/serverC/log 
clientPort=2190 
server.1=192.168.245.128:2888:3888  
server.2=192.168.245.129:2889:4888  
server.3=192.168.245.130:2880:5888

说明:server.A=B:C:D:

A是一个数字,表示这个是第几号服务器 B是这个服务器的ip地址C第一个端口用来集群成员的信息交换,表示的是这个服务器与集群中的Leader服务器交换信息的端口 D是在leader挂掉时专门用来进行选举leader使用的 设置服务器编号  进入dataDir指定的目录中,创建myid文件,文件内容为对应ip后面的那个数字。 进入bin目录  复制zkEnv.sh|zkEnv.cmd重命名为zkEnvCluster.sh|zkEnvCluster.cmd,修改zkEnvCluster中使用zoo.cfg改为cluster.cfg。

其他机器的配置类似,依次完成集群中所有机器的配置。

启动集群、连接

集群中所有机器配置完成之后,依次进入每台机器的bin目录下执行
zkServerCluster.cmd|zkServerCluster.sh –args   
args的选项为: start|startforeground|stop|restart|status|upgrade|print-cmd 
第一个启动的机器会报以下错误: 
 2023-11-25 16:16:58,388 - WARN [WorkerSender Thread:QuorumCnxManager@379] - 
 Can not open channel to 2 at election address /192.168.245.129:4888 
 java.net.ConnectException: Connection refused: no further information  
 at sun.nio.ch.SocketChannelImpl.checkConnect(Native Method)  
 at sun.nio.ch.SocketChannelImpl.finishConnect(Unknown Source) 
 2023-11-25 16:14:59,405 - WARN [WorkerSender Thread:QuorumCnxManager@379] - Can not open channel to 3 
 at election address /192.168.245.130:5888 java.net.ConnectException:
 Connection refused: no further information  at sun.nio.ch.SocketChannelImpl.checkConnect(Native Method)  
 at sun.nio.ch.SocketChannelImpl.finishConnect(Unknown Source) 
 注:由于其他server还没有启动,所以会出现上面的报错信息,等剩下的两个server都启动后就不会报错了。

集群的连接与单机的连接一样。


集群及调用示意图 

讲了这么多,到底zookeeper可以做什么,哪些业务场景适合使用呢?

zookeeper可以做什么 

以上图片内容来自ProcessOn 模板社区,你可以点击此链接查看详情。如果你想要将自己的知识结构化记录下来,ProcessOn 是你的绝佳选择,提供多种专业图形的绘制工具和丰富的模板内容,支持工作、学习和生活各个方面的应用。

免费在线协同思维导图流程图 免费使用