0


Zookeeper,三个节点,详解(四)

ZAB协议

崩溃恢复

  1. 所谓崩溃恢复,指的是当Zookeeper集群中leader产生宕机或者丢失的时候,整个集群不会停止服务而是会选举出一个新的leader继续对外提供服务
  2. 崩溃恢复,可以很好的避免集群中出现单点故障(因为一个节点故障而导致整个集群崩溃),实现集群的高可用
  3. 在Zookeeper集群中,当leader产生丢失的时候,Zookeeper集群会重新选举出一个新的leader,同时会给新leader产生一个编号(Epochid)。新leader产生编号之后,会将自己的Epochid发送给每一个follower。follower在接收到Epochid之后,会存放在本地文件acceptedEpoch
  4. 事务id:在Zookeeper集群中,事务id由64位二进制数字(16位十六进制)组成,前32位表示的是Epochid,后32位表示实际的事务id。例如:0x200000003表示第二任leader执行的第3个写操作
  5. 每更换一个leader,都会产生一个新的log文件

其他

observer

  1. observer(观察者)既不参与选举也参与原子广播,但是会监听选举和投票结果,根据结果执行对应的操作
  2. 在集群规模庞大或者网络不稳定的时候,选举或者原子广播的效率都会比较低,所以在实际过程中,会尽量减少参与选举或者原子广播的节点数量,因此在实际过程中,会将一个集群的90%~97%的节点设置为observer。例如,如果一个集群中有100台节点,那么此时observer的数量大约是89或者91台
  3. 在Zookeeper中,计算过半是计算的有决策权(选举/原子广播)的节点数量,observer没有决策权,所以不影响过半。例如:一个集群由21个节点组成,1个leader+6个follower+14个observer,即使observer全部宕机,Zookeeper集群也正常提供服务;即使observer全部存活,只要有4个follower宕机,那么Zookeeper集群也会停止服务
  4. 设置observer# 先停掉当前节点上的ZookeeperzkServer.sh stop# 修改zoo.cfg文件vim /opt/software/zookeeper-3.9.1/conf/zoo.cfg# 修改属性pureType=observerserver.1=10.16.2.191:2888:3888:observer# 启动这个节点的ZookeeperzkServer.sh start# 查看状态zkServer.sh status

配置信息(zoo.cfg)

参数默认值解释clientPort2181客户端的连接端口号dataDir/tmp/zookeeper数据目录,实际上是快照文件(snapshot.xxx)的存储目录dataLogDir日志目录,实际上是log.xxx的存储路径。如果不指定,那么和dataDir的值一样tickTime2000时间单元,默认单位是毫秒。在Zookeeper中,时间都是以这个时间单元来计算initLimit10follower在加入Zookeeper集群之后,需要从leader处获取欠缺的事务并补齐,initLimit就是补齐时间:10tickTime。即默认要求在20s内补齐事务,如果欠缺事务比较多,那么需要适当的调大这个值syncLimit5原子广播中的规定时间,即follower需要在5tickTime给leader进行相应minSessionTimeout maxSessionTimeout2tickTime 20tickTime最短会话超时时间以及最长会话超时时间。如果指定的会话超时时间小于了min或者大于了max,那么就按照min或者max执行server.x=hostname:port1:port2配置集群中的节点: 1. x是选举编号,即myid 2. hostname就是主机名或者IP 3. port1是原子广播的端口号 4. port2是选举的端口号jute.maxbuffer1M控制每一个节点能够携带的数据量globalOutstandingLimit1000最大请求堆积数。当请求过多导致leader暂时处理不了的时候,那么此时leader会先将这些请求放到队列中临时存储,这个过程就是请求堆积preAllocSize64M预先开辟的磁盘空间,用于写入日志文件leaderServersyes是否允许leader节点对外接收请求maxClientCnxns60客户端最大连接数,就是每一个节点同时最多允许被多少个客户端连接

特性

  1. 过半性:过半选举(一个节点胜过一半及以上的节点才能成为leader),过半服务(集群中要存活一半及以上的节点才能提供服务),过半执行(请求需要一半及以上的follower同意才能执行)
  2. 数据一致性:从客户端角度而言,无论连接到哪一个节点上都能获取到相同的数据;从服务器角度而言,Zookeeper中每一个节点上存储的数据都一样
  3. 原子性:一个请求,要么所有节点都执行,要么所有节点都不执行
  4. 可靠性:Zookeeper集群不会因为一个节点宕机而导致整个集群停止服务
  5. 顺序性:所有节点执行请求的顺序是完全一致的 - 队列
  6. 实时性:在网络条件较好的情况下,可以实时监控Zookeeper的变化

集群操作

  1. 可以在一个节点上来查看其他节点的属性信息 - 集群操作
  2. 通过nc工具来实现的。nc工具用于发送TCP请求,此时可以将需要执行的命令以TCP请求的方式发送到对应的节点上,等待对应节点响应结果即可
  3. 安装nc(netcat)1. 卸载nmaprpm -qa | grep -i nmap | xargs rpm -ev --nodeps2. 进入软件安装目录,上传nc安装包cd /opt/presoftware/rz3. 安装rpm -ivh nc-1.84-22.el6.x86_64.rpm
  4. 步骤1. 将Zookeeper先停掉zkServer.sh stop2. 编辑文件vim /opt/software/zookeeper-3.9.1/conf/zoo.cfg在文件中添加4lw.commands.whitelist=*3. 分发给其他的节点scp /opt/software/zookeeper-3.9.1/conf/zoo.cfg [email protected]:/opt/software/zookeeper-3.9.1/conf/scp /opt/software/zookeeper-3.9.1/conf/zoo.cfg [email protected]:/opt/software/zookeeper-3.9.1/conf/4. 启动ZookeeperzkServer.sh start
  5. 常用命令命令解释echo conf | nc 10.16.2.123 2181查看10.16.2.123的配置信息echo cons | nc 10.16.2.456 2181查看10.16.2.456连接的客户端信息echo crst | nc 10.16.2.258 2181重置10.16.2.258的客户端连接echo dump | nc 10.16.2.193 2181获取当前集群的所有的会话信息,包含会话id,这些会话创建的临时节点数量等echo envi | nc 10.16.2.193 2181查看指定节点的环境信息echo ruok | nc 10.16.2.193 2181查看指定节点上的Zookeeper是否还存活。如果存活,则返回imokecho stat | nc 10.16.2.193 2181查看指定节点的状态echo srvr | nc 10.16.2.193 2181查看指定节点的状态,不同于stat的地方在于,srvr不打印客户端信息
标签: zookeeper debian php

本文转载自: https://blog.csdn.net/CHANGSHENG888x/article/details/138193792
版权归原作者 CHANGSHENG888x 所有, 如有侵权,请联系我们删除。

“Zookeeper,三个节点,详解(四)”的评论:

还没有评论