工作日记-storm集群业务崩溃和解决方案
背景
昨天公司业务部门报告业务崩溃,查看各个业务节点后,定位问题到storm集群。
打开storm ui查看下任务状态,发现可以加载页面元素,但是无法加载数据,分析是nimbus挂掉了,重启nimbus。本着先恢复业务的原则,我直接通过命令行停止任务后,又重新提交了任务,这个时候访问storm ui发现业务系统已经恢复正常。业务系统虽然恢复了,但是需要找到问题的根本原因,才能确保不再发生。
storm部署情况
公司的生产环境部署的storm集群,其中,zookeeper和nimbus都是单点,supervisor也只部署了一个,每个supervisor开启四个slot,这几个关键组件都部署在了一台物理服务器上。
storm任务,会启动两个worker,一共12个线程,分布在这台物理机上,查看storm ui可以看到,启动了两个worker,端口分别为6700和6701,每一个worker负责六个线程。
问题分析
业务层
查看业务系统日志,发现8月3日9点51开始就不正常了,表现为不生产正确的业务事件。
看8月3号以后的业务日志,没有异常的error,说明问题不是出在业务层,继续看storm层。
storm层
nimbus日志
因为前面已知nimbus因为某种原因挂掉了,所以先看nimbus日志,$STORM_HOME/logs/nimbus.log日志如下:
2020-07-31 10:14:57.523 o.a.s.z.Zookeeper main-EventThread [INFO] active-topology-blobs [startstorm-10-1592659649] local-topology-blobs [startstorm-10-1592659649-stormconf.ser,startstorm-10-1592659649-stormjar.jar,startstorm-10-1592659649-stormcode.ser] diff-topology-blobs []
2020-07-31 10:14:57.620 o.a.s.util timer [ERROR] Halting process: ("Error when processing an event")
java.lang.RuntimeException: ("Error when processing an event")
at org.apache.storm.util$exit_process_BANG_.doInvoke(util.clj:341) ~[storm-core-1.2.3.jar:1.2.3]
at clojure.lang.RestFn.invoke(RestFn.java:423) ~[clojure-1.7.0.jar:?]
at org.apache.storm.daemon.nimbus$nimbus_data$fn__8298.invoke(nimbus.clj:221) ~[storm-core-1.2.3.jar:1.2.3]
at org.apache.storm.timer$mk_timer$fn__6387$fn__6388.invoke(timer.clj:71) ~[storm-core-1.2.3.jar:1.2.3]
at org.apache.storm.timer$mk_timer$fn__6387.invoke(timer.clj:42) ~[storm-core-1.2.3.jar:1.2.3]
at clojure.lang.AFn.run(AFn.java:22) ~[clojure-1.7.0.jar:?]
at java.lang.Thread.run(Thread.java:745) [?:1.8.0_121]
2020-07-31 10:14:57.697 o.a.s.z.Zookeeper main-EventThread [INFO] active-topology-dependencies [] local-blobs [startstorm-10-1592659649-stormconf.ser,startstorm-10-1592659649-stormjar.jar,startstorm-10-1592659649-stormcode.ser] diff-topology-dependencies []
2020-07-31 10:14:57.697 o.a.s.z.Zookeeper main-EventThread [INFO] Accepting leadership, all active topologies and corresponding dependencies found locally.
2020-07-31 10:14:58.106 o.a.s.d.nimbus Thread-7 [INFO] Shutting down master
最后一行,Shutting down master,代表nimbus挂了。
supervisor日志
看supervisor的日志,$STORM_HOME/logs/supervisor.log
查看对应时段的日志信息,可以看到,首先是因为clientsession有87007ms没有接收到server的信息,所以触发了timeout处理机制。
2020-07-31 10:14:20.885 o.a.s.s.o.a.z.ClientCnxn main-SendThread(10.43.4.153:2181) [WARN] Client session timed out, have not heard from server in 87077ms for sessionid 0x105876332810086
第二步kill了worker
2020-07-31 10:14:53.914 o.a.s.d.s.Container SLOT_6702 [INFO] Killing 923112bb-4901-4d63-a93e-900e8fb7110e:0c453b60-2eaf-48ab-8c2a-0f7c267dbad5
第三步修改业务thread的状态
2020-07-31 10:14:54.363 o.a.s.s.o.a.c.f.s.ConnectionStateManager main-EventThread [INFO] State change: SUSPENDED
第四步,重连,发现失败,线程状态修改为LOST
2020-07-31 10:14:56.820 o.a.s.s.o.a.z.ClientCnxn main-SendThread(10.43.4.153:2181) [INFO] Opening socket connection to server 10.43.4.153/10.43.4.153:2181. Will not attempt to authenticate using SASL (unknown error)
2020-07-31 10:14:56.980 o.a.s.s.o.a.z.ClientCnxn main-SendThread(10.43.4.153:2181) [INFO] Socket connection established to 10.43.4.153/10.43.4.153:2181, initiating session
2020-07-31 10:14:57.015 o.a.s.s.o.a.z.ClientCnxn main-SendThread(10.43.4.153:2181) [WARN] Unable to reconnect to ZooKeeper service, session 0x105876332810086 has expired
2020-07-31 10:14:57.021 o.a.s.s.o.a.c.ConnectionState main-EventThread [WARN] Session expired event received
2020-07-31 10:14:57.187 o.a.s.s.o.a.c.f.s.ConnectionStateManager main-EventThread [INFO] State change: LOST
2020-07-31 10:14:57.194 o.a.s.s.o.a.z.ClientCnxn main-EventThread [INFO] EventThread shut down for session: 0x105876332810086
第五步,重连成功后,修改线程状态为RECONNECTED,清理原来worker的信息,并建立新的worker
2020-07-31 10:14:57.241 o.a.s.s.o.a.z.ClientCnxn main-SendThread(10.43.4.153:2181) [INFO] Opening socket connection to server 10.43.4.153/10.43.4.153:2181. Will not attempt to authenticate using SASL (unknown error)
2020-07-31 10:14:57.242 o.a.s.s.o.a.z.ClientCnxn main-SendThread(10.43.4.153:2181) [INFO] Socket connection established to 10.43.4.153/10.43.4.153:2181, initiating session
2020-07-31 10:14:57.245 o.a.s.s.o.a.z.ClientCnxn main-SendThread(10.43.4.153:2181) [INFO] Session establishment complete on server 10.43.4.153/10.43.4.153:2181, sessionid = 0x105876332810095, negotiated timeout = 20000
2020-07-31 10:14:57.277 o.a.s.s.o.a.c.f.s.ConnectionStateManager main-EventThread [INFO] State change: RECONNECTED
2020-07-31 10:15:01.983 o.a.s.d.s.Container SLOT_6700 [INFO] Cleaning up 923112bb-4901-4d63-a93e-900e8fb7110e:f1ede737-d405-44a5-a19e-eb4979cfd338
2020-07-31 10:15:03.183 o.a.s.d.s.Container SLOT_6702 [INFO] REMOVE worker-user 0c453b60-2eaf-48ab-8c2a-0f7c267dbad5
2020-07-31 10:15:03.437 o.a.s.d.s.BasicContainer SLOT_6702 [INFO] Created Worker ID 22b3823d-c03c-4593-aaac-f9ae6f5e4e1d
分析到现在还是没有头绪。
暂时的解决方案
我们只能假设是nimbus异常宕机导致后续的问题。
解决方案是:
引入daemontools监控工具,来监控nimbus和supervisor,在挂掉后自动恢复。
引入新的机器,增加supervisor物理节点,看下是否可以解决问题。
增加物理节点
除了按照常规步骤安装部署以外,启动nimbus和supervisor的时候,需要指定一下hostname的参数,防止出现其他supervisor的机器找不到nimbus主机的问题。
以在10.43.4.153和10.43.4.151上启动两个supervisor,在10.43.4.153上启动nimbus为例
nohup /usr/local/apache-storm-1.2.3/bin/storm nimbus -c storm.local.hostname="10.43.4.153" &
nohup /usr/local/apache-storm-1.2.3/bin/storm supervisor -c storm.local.hostname="10.43.4.153" &
nohup /usr/local/apache-storm-1.2.3/bin/storm supervisor -c storm.local.hostname="10.43.4.151" &
成功部署后,如图所示

部署常见问题:https://www.iteye.com/blog/wangmengbk-2215140
damentools工具部署使用
安装部署
创建
/packagemkdir -p /package
chmod 1755 /package
cd /package
下载 daemontools-0.76.tar.gz
/packagegunzip daemontools-0.76.tar
tar -xpf daemontools-0.76.tar
rm -f daemontools-0.76.tar
cd admin/daemontools-0.76
编辑 src/conf-cc 在最后加入
-include /usr/include/errno.h
编译
package/install
启动
首先在"/etc/init"目录下创建一个svscan.conf文件 ,然后在文件中添加如下内容保存:
start on runlevel [345]
respawn
exec /command/svscanboot
其次分别执行如下两个命令重新加载"/etc/init"目录下的配置文件,执行ps命令查看是否启动成功
[root@rfidweb init]# initctl reload-configuration
[root@rfidweb init]# initctl start svscan
svscan start/running, process 32735
[root@rfidweb init]# ps -ef | grep svs
root 32735 1 0 13:56 ? 00:00:00 /bin/sh /command/svscanboot
root 32737 32735 0 13:56 ? 00:00:00 svscan /service
root 32758 8815 0 13:56 pts/0 00:00:00 grep svs编写脚本
#! /bin/bash
mkdir -p /service/storm/nimbus
touch /service/storm/nimbus/run
chmod +x /service/storm/nimbus/run mkdir -p /service/storm/ui
touch /service/storm/ui/run
chmod +x /service/storm/ui/run mkdir -p /service/storm/supervisor
touch /service/storm/supervisor/run
chmod +x /service/storm/supervisor/run
添加内容:
#! /bin/bash exec 2>&1
exec /usr/local/apache-storm-1.2.3/bin/storm ui
#! /bin/bash exec 2>&1
exec /usr/local/apache-storm-1.2.3/bin/storm nimbus -c storm.local.hostname="10.43.4.153"验证是否生效
ps -ef | grep "nimbus"
然后kill -9
再次ps命令查看pid已经改变
工作日记-storm集群业务崩溃和解决方案的更多相关文章
- storm集群架构
一.storm何许人也? Storm 是Twitter的一个开源框架.Storm一个分布式的.容错的实时计算系统,它被托管在GitHub上,遵循 Eclipse Public License 1.0. ...
- Storm集群组件和编程模型
Storm工作原理: Storm是一个开源的分布式实时计算系统,常被称为流式计算框架.什么是流式计算呢?通俗来讲,流式计算顾名思义:数据流源源不断的来,一边来,一边计算结果,再进入下一个流. 比 ...
- Storm集群安装Version1.0.1开启Kerberos
Storm集群安装,基于版本1.0.1, 同时开启Kerberos安全认证, 使用apache-storm-1.0.1.tar.gz安装包. 1.安装规划 角色规划 IP/机器名 安装软件 运行进程 ...
- storm集群部署和配置过程详解
先整体介绍一下搭建storm集群的步骤: 设置zookeeper集群 安装依赖到所有nimbus和worker节点 下载并解压storm发布版本到所有nimbus和worker节点 配置storm ...
- Storm集群安装部署步骤【详细版】
作者: 大圆那些事 | 文章可以转载,请以超链接形式标明文章原始出处和作者信息 网址: http://www.cnblogs.com/panfeng412/archive/2012/11/30/how ...
- Storm集群的安装配置
Storm集群的安装分为以下几步: 1.首先保证Zookeeper集群服务的正常运行以及必要组件的正确安装 2.释放压缩包 3.修改storm.yaml添加集群配置信息 4.使用storm脚本启动相应 ...
- Storm集群部署
一. 说明 Storm是一个分布式实时计算系统,Storm对于实时计算的意义就相当于Hadoop对于批量计算的意义.对于实时性较高的系统Storm是不错的选择.Hadoop提供了map, reduce ...
- Storm集群安装详解
storm有两种操作模式: 本地模式和远程模式. 本地模式:你可以在你的本地机器上开发测试你的topology, 一切都在你的本地机器上模拟出来; 远端模式:你提交的topology会在一个集群的机器 ...
- Storm入门教程 第三章Storm集群安装部署步骤、storm开发环境
一. Storm集群组件 Storm集群中包含两类节点:主控节点(Master Node)和工作节点(Work Node).其分别对应的角色如下: 主控节点(Master Node)上运行一个被称为N ...
- Storm 集群安装配置
本文详细介绍了 Storm 集群的安装配置方法.如果需要在 AWS 上安装 Storm,你应该看一下 storm-deploy 项目.storm-deploy 可以自动完成 E2 上 Storm 集群 ...
随机推荐
- Windows 系统下 Docker 和 Docker Compose 安装配置:一键部署有来开源项目本地环境
作者主页: 有来技术 开源项目: youlai-mall vue3-element-admin youlai-boot vue-uniapp-template 仓库主页: GitCode Gitee ...
- Solution -「ROI 2018」「LOJ #2850」无进位加法
\(\mathscr{Description}\) Link. 给定 \(\{a_n\}\),每次令某个 \(a_i\leftarrow a_i+1\),最终得到 \(\{b_n\}\),求 ...
- 如何快速的开发一个完整的iOS直播app(播放篇)
作者:袁峥链接:https://www.jianshu.com/p/7b2f1df74420来源:简书著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 开发一款直播app,集成ij ...
- KafKa动态分组ID
背景说明:做这个的原因主要是因为懒,KafKa监听没有独立项目出去,由于KafKa没有组内广播模式,这就造成了一个问题:项目多处启动的时候,就只有一个地方能接收信息.这个时候就要手懂修改分组ID了. ...
- 金泰克S300固态硬盘 SM2256K开卡量产
开卡原因:固态硬盘出现开机正常,用一会就找不到硬盘了,电脑冷启动后又可以识别硬盘,决定根据网上教程进行开卡量产修复试试. 硬盘型号:tigo S300 120GB,主控芯片SM2256K AB,闪存颗 ...
- uni-app中picker-view显示默认值的注意点(坑)
今天我在使用picker-view的时候,发现无法给picker-view给一个默认值:后面经过发现后: 才知道到,是一个异步问题: 1==>动态循环出来的数据,在data中直接循环,不要在re ...
- react给当前元素添加一个类以及key的作用
给当前元素添加一个类是通过className来处理的: 引入css;直接from XXXX import React, { Component } from "react"; // ...
- Sa-Token v1.20.0 发布,新增临时Token认证
框架介绍 Sa-Token是一个轻量级Java权限认证框架,主要解决:登录认证.权限认证.分布式Session会话.单点登录.OAuth2.0 等一系列权限相关问题. 框架针对踢人下线.自动续签.前后 ...
- 解决当前标识(IIS APPPOOL\XXXX)没有对“C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Temporary ASP.NET Files”的写访问权限的问题
1.问题描述 在Windows Server2019数据中心版中搭建IIS项目,访问的时候出现如下所示的错误: 当前标识(IIS APPPOOL\XXXX)没有对"C:\Windows\Mi ...
- 同步工具-腾讯EMR表治理工具安装使用
一.安装 1.root用户上传文件 cd wangrz -bey luoshu-1.0-bin.tar.gz 2.解压文件到服务目录 重新安装洛书需执行:rm -rf /usr/local/servi ...