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

本文详细阐述了Zookeeper中的崩溃恢复机制,包括当leader宕机时如何选举新的leader,事务id的结构,以及observer角色在集群中的作用。同时介绍了如何配置observer模式和使用nc工具进行集群操作,展示了Zookeeper的高可用性和数据一致性特点。
摘要由CSDN通过智能技术生成

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

    # 先停掉当前节点上的Zookeeper
    zkServer.sh stop
    # 修改zoo.cfg文件
    vim /opt/software/zookeeper-3.9.1/conf/zoo.cfg
    # 修改属性
    pureType=observer
    server.1=10.16.2.191:2888:3888:observer
    # 启动这个节点的Zookeeper
    zkServer.sh start
    # 查看状态
    zkServer.sh status

配置信息(zoo.cfg)

参数默认值解释
clientPort2181客户端的连接端口号
dataDir/tmp/zookeeper数据目录,实际上是快照文件(snapshot.xxx)的存储目录
dataLogDir日志目录,实际上是log.xxx的存储路径。如果不指定,那么和dataDir的值一样
tickTime2000时间单元,默认单位是毫秒。在Zookeeper中,时间都是以这个时间单元来计算
initLimit10follower在加入Zookeeper集群之后,需要从leader处获取欠缺的事务并补齐,initLimit就是补齐时间:10*tickTime。即默认要求在20s内补齐事务,如果欠缺事务比较多,那么需要适当的调大这个值
syncLimit5原子广播中的规定时间,即follower需要在5*tickTime给leader进行相应
minSessionTimeout maxSessionTimeout2*tickTime 20*tickTime最短会话超时时间以及最长会话超时时间。如果指定的会话超时时间小于了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. 卸载nmap

      rpm -qa | grep -i nmap | xargs rpm -ev --nodeps

    2. 进入软件安装目录,上传nc安装包

      cd /opt/presoftware/
      rz
    3. 安装

      rpm -ivh nc-1.84-22.el6.x86_64.rpm
  4. 步骤

    1. 将Zookeeper先停掉

      zkServer.sh stop
    2. 编辑文件

      vim /opt/software/zookeeper-3.9.1/conf/zoo.cfg

      在文件中添加

      4lw.commands.whitelist=*
    3. 分发给其他的节点

      scp /opt/software/zookeeper-3.9.1/conf/zoo.cfg root@10.16.2.194:/opt/software/zookeeper-3.9.1/conf/
      scp /opt/software/zookeeper-3.9.1/conf/zoo.cfg root@10.16.2.193:/opt/software/zookeeper-3.9.1/conf/
    4. 启动Zookeeper

      zkServer.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是否还存活。如果存活,则返回imok
    echo stat | nc 10.16.2.193 2181查看指定节点的状态
    echo srvr | nc 10.16.2.193 2181查看指定节点的状态,不同于stat的地方在于,srvr不打印客户端信息
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值