首页 > 其他分享 > ZooKeeper 避坑实践: Zxid溢出导致选主

ZooKeeper 避坑实践: Zxid溢出导致选主

时间:2023-02-09 17:01:22浏览次数:67  
标签:Zxid 选主 zxid ZooKeeper 事务 避坑 epoch 集群

作者:子葵

背景


线上 flink 用户使用 ZooKeeper 做元数据中心以及集群选主,一些版本的 flink 在 ZooKeeper 选主时,会重启 Job,导致一些非预期的业务损失。而 ZooKeeper 在 zxid溢出时,会主动触发一次选主,就会导致 flink Job 的非预期重启,造成业务损失。本篇从原理和最佳实践上分析和解决由于 ZooKeeper zxid 溢出导致的集群选主问题。检查 ZooKeeper Server 日志出现。


zxid lower 32 bits have rolled over, forcing re-election, and therefore new epoch start


解决方法


ZooKeeper 本身提供当前处理的最大的 Zxid,通过 stat 接口可查看到当前处理的最大的 zxid 的值,通过此值可以计算当前 zxid 距离溢出值还有多少差距。MSE 提供风险管理以及集群选主相关告警,提前预防和及时感知选主风险,避免业务损失。


通过 MSE ZooKeeper 风险管理和集群选主时间告警,预知风险。


MSE ZooKeepr 提供风险管理的能力,风险管理会定期扫描集群风险,通知用户,zxid 溢出就是集群的风险之一,当 zxid 接近溢出值之前,通过风险管理对风险的扫描,就可以看到集群zxid溢出的风险,提前做好规避。​


 ZooKeeper 避坑实践: Zxid溢出导致选主_客户端


风险管理会每天扫描集群的各项风险,也可以通过手动触发 一键健康检查进行集群风险诊断。


同时通过 MSE ZooKeeper 的集群选主时间告警,可以检测集群的选主时间,避免因为集群选主时间过长导致业务损失。通过告警管理中创建 MSE 告警规则进行集群选主时间的告警设置。


 ZooKeeper 避坑实践: Zxid溢出导致选主_客户端_02

 ZooKeeper 避坑实践: Zxid溢出导致选主_客户端_03


原因分析


什么是zxid,它是怎么产生的?


首先我们了解一下什么是 zxid,它是怎么产生的:zxid 是 ZooKeeper 中一个事务的全局唯一 id,通过 zxid 描述各个事务之间的全序关系。客户端对 ZooKeeper 内部数据的变更都是通过事务在 ZooKeeper 集群内的传播和处理完成的,因此 zxid 就是客户端对数据进行一次变更所产生的事务在全局事务中的一个唯一 id,这个 id 描述了本次变更的事务在全局事务中的位置,并且不会有两个不同的事务拥有相同的 zxid(全序关系)。


 ZooKeeper 避坑实践: Zxid溢出导致选主_MSE_04


zxid 是一个 64bits 的数,有两个部分组成:当前选举周期(epoch,占用高32bits)以及计数部分(counter,占用低32bits),epoch 表示 leader 关系的变化,每当新的集群产生新的leader,都会产生一个新的 epoch表示当前 leader 的选举周期,ZooKeeper  集群选主成功之后保证只会有一个Leader,并且此 Leader 的 epoch 是以前没有使用过的,这就保证了只会有一个 leader 使用本次选举过程中产生的 epoch, 在此基础上,每当客户端对数据进行变更的时候,leader 对产生的事务在当前 counter 的值加一产生新的事务的 zxid,并使用此 zxid 将此事务在集群中进行同步,这样就保证了事务的全序关系。


 ZooKeeper 避坑实践: Zxid溢出导致选主_MSE_05


为什么 zxid 溢出需要重新选主


通过研究 zxid 的组成,可以发现,当单个 epoch 中处理的事务过多,以至于当前epoch 对应的 counter 数值超过了 32bits 计数的最大值,如果继续计数 epoch 就会 +1 , 如果在未来,进行了一次选举,其他的 Server 当选了 leader,但是他产生的新 epoch 可能就会和现在 zxid 中的 epoch 重合,导致不同的事务会有相同的 zxid,破坏了事务之间的全序关系,可能导致脏数据的产生。因此 ZooKeeper 在低 32 位达到最大计数值的时候,就会主动产生一次选主,避免以上问题。


ZooKeeper 集群选主会产生什么影响


一般情况下使用 ZooKeeper 作为注册配置中心,集群选主对于客户端来说是无感知的,集群选主之后客户端会主动重连恢复,但是对于依赖于 ZooKeeper Disconnected 事件的应用,可能会受到影响,在集群选主的时候,Server会向客户端返回 Disconnected 事件,例如 Curator recipes 中 LeaderLatch 类型,在 ZooKeeper 集群选主的时候,LeaderLatch 会重新分配 Leader。


往期内容回顾



点击​​此处​​来查看微服务引擎产品

标签:Zxid,选主,zxid,ZooKeeper,事务,避坑,epoch,集群
From: https://blog.51cto.com/u_13778063/6047179

相关文章

  • zookeeper单机版和伪集群版的搭建
    一.单机版1,下载: wgethttp://mirrors.hust.edu.cn/apache/zookeeper/zookeeper-3.4.10/zookeeper-3.4.10.tar.gz2,解压: tar-zxvfzookeeper-3.4.10.tar.gz3,在 zookeep......
  • Linux下Zookeeper安装和启动
    Zookeeper安装0.环境Inteli5-1240016GBMemoryUbuntu20.04.5LTSLinux5.15.0-52-generic1.下载官网速度太慢,可以在清华镜像下载https://mirrors.tuna.tsinghu......
  • 从一个 Demo 说起 Zookeeper 服务端源码
    从一个Demo说起Zookeeper服务端源码简介Zookeeper目前是Apache下的开源项目,作为最流行的分布式协调系统之一,我们平时开发中熟知的Dubbo、Kafka、Elastic-Job、Hadoop......
  • 8 k8s运行zookeeper和redis等实例
    一Kubernetes实战案例-自定义镜像结合PV/PVC运行Zookeeper集群1构建zookeeper镜像dockfile内容:FROMharbor.magedu.com/magedu/slim_java:8ENVZK_VERSION3.4.14......
  • Zookeeper 集群安装配置,超详细,速度收藏!
    今天,栈长分享下Zookeeper的集群安装及配置。下载下载地址:http://zookeeper.apache.org/下载过程就不说了,我们下载了最新的zookeeper-3.4.11。安装1、上传安装包......
  • 大数据必知必会:Zookeeper(3)集群环境安装
    摘要】Zookeeper3.8.0集群环境安装安装前准备集群环境下,至少需要3台服务器。IP地址主机名称10.0.0.5node110.0.0.6node210.0.0.7node3需要保......
  • zookeeper examples within kazoo
    zookeeper样例,包含:CRUDretrywatchertransactiondocker部署zookeeperdockerrun-id--namezk-p2181:2181zookeeper:latest样例代码importsysimportlogg......
  • <<从Paxos到Zookeeper-分布式一致性原理与实践>>
    <<从Paxos到Zookeeper-分布式一致性原理与实践>>1分布式特点分布性对等性并发性缺乏全局时钟故障总会发生2分布式问题通信异常网络分区三态单体应用中一次......
  • (转)「Golang」for range 使用方法及避坑指南
    原文:https://blog.csdn.net/qq_37005831/article/details/114296008前言循环控制结构是一种在各种编程语言中常用的程序控制结构,其与顺序控制结构、选择控制结构组成了程......
  • Docker+vulhub靶机搭建避坑指南
    Docker+vulhub安装避坑指南1.Docker安装kali需提前换源安装好pipsudoaptinstalldocker.iopipinstalldocker-compose2.搭建vulhub直接使用镜像:gitclonehtt......