menu Spark社区 | 一条苦行狗的家
search
close
记一次线上Zookeeper故障及恢复
180 浏览 | 1 评论

记一次线上Zookeeper故障及恢复

集群环境

zookeeper和kafka部署到一起,5台机器。

因为考虑到成本问题,并且zookeeper集群消耗资源也不大,所以没有必要申请新机器部署zookeeper集群,所以就将两个服务部署到一起。(祸根已经埋下)

故障现象描述

kafka集群无法正常工作,提示连接不上zk集群,线上服务异常。

(因为算法组的同事需要使用到我们kafka中的数据,通过计算得出推荐的主播,在app首页中展示。所以kafka集群无法工作,导致主页推荐信息无法得到更新,都是历史数据,使得用户点进去,其实都是已经下线的主播,导致用户体验很差。)

排查原因

zookeeper集群中的某一节点磁盘故障导致进程假死。

(后来分析,可能是由于kafka对磁盘的操作次数比较多,导致磁盘出问题)

其实按照正常来说,集群中的某台机器出了问题对集群影响不大,无非是该节点停止服务,还有其他节点提供服务。

但是,磁盘假死的时候,我们发现该机器的zookeeper进程还在,导致不能读写数据,但是还让其他节点无法感知该节点故障,最终导致多台zookeeper节点中数据量不一致,每台机器的数据量都不一样。。。

恢复过程

我们的当务之急是首先尽快恢复服务

  1. 先把线上zookeeper集群中的一个节点正常转化为单节点运行,恢复kafka集群服务。(选择一台数据量最多的zookeeper节点,转为单节点提供服务)
  2. 申请5台机器,重新部署zookeeper集群(此时zookeeper集群是独立于其他服务的)
  3. 把单节点zookeeper中的数据恢复到新部署的集群中,kafka集群切换新的zookeeper集群。(在业务低峰期的时候进行。原本以为zookeeper中单机模式和集群模式中数据不兼容,其实启动后数据正常,依旧可以提供服务。)

评论

textsms
支持Markdown语法
email
link

mode_comment 全部评论 已有 1 条评论 (o゜▽゜)o☆
  1. 2019年09月07日 19:47

    大佬阔以的