工作日记-storm集群业务崩溃和解决方案


背景

昨天公司业务部门报告业务崩溃,查看各个业务节点后,定位问题到storm集群。

打开storm ui查看下任务状态,发现可以加载页面元素,但是无法加载数据,分析是nimbus挂掉了,重启nimbus。本着先恢复业务的原则,我直接通过命令行停止任务后,又重新提交了任务,这个时候访问storm ui发现业务系统已经恢复正常。业务系统虽然恢复了,但是需要找到问题的根本原因,才能确保不再发生。


storm部署情况

公司的生产环境部署的storm集群,其中,zookeeper和nimbus都是单点,supervisor也只部署了一个,每个supervisor开启四个slot,这几个关键组件都部署在了一台物理服务器上。

storm任务,会启动两个worker,一共12个线程,分布在这台物理机上,查看storm ui可以看到,启动了两个worker,端口分别为6700和6701,每一个worker负责六个线程。

部署常见问题:https://www.iteye.com/blog/wangmengbk-2215140

damentools工具部署使用

安装部署

  1. 创建 /package

    mkdir -p /package
    chmod 1755 /package
    cd /package
    
  2. 下载 daemontools-0.76.tar.gz/package

      gunzip daemontools-0.76.tar
      tar -xpf daemontools-0.76.tar
      rm -f daemontools-0.76.tar
      cd admin/daemontools-0.76
    
  3. 编辑 src/conf-cc 在最后加入

    -include /usr/include/errno.h
    
  4. 编译

    package/install
    
  5. 启动

    首先在"/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
    
    
  6. 编写脚本

    #! /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"
    
    
  7. 验证是否生效

    ps -ef | grep "nimbus"

    然后kill -9

    再次ps命令查看pid已经改变