Storm 的nimbus 单节点宕机如何自动重启?

storm在生产上跑得很欢快,但是突然遇到一个问题,不知道storm是什么原因,无缘无故的自动停止了。查看日志没有任何的报错信息,包括警告信息都没有,反正就是无缘无故的shut down了。问题分析,初步我们判断应该是系统资源不足导致的,但这只是推测,因为storm集群的这些server都没有做监控,只有后面加上监控才能验证是否是因为资源问题引起的。

好吧!既然遇到问题咱们就解决问题吧!首先网上一搜,还是有很多遇到跟我们一样的问题,但是没有找到一个很好的解决方案。去storm官网一搜索,反复找到了解决办法,“Launches the nimbus daemon. This command should be run under supervision with a tool like daemontools or monit. See Setting up a Storm cluster for more information.”官网上推荐我们把nimbus和supervisor运行在daemontools or monit下面。于是我就点进了daemontools。先在测试机器上安装测试了一下,进程被kill掉,自动就会重启,完全可以满足我们当前遇到的问题。

1、daemontools安装

这里是官网的安装文档:http://cr.yp.to/daemontools/install.html

下面是我们的安装步骤:

mkdir -p /package

cd /package/

wget http://cr.yp.to/daemontools/daemontools-0.76.tar.gz

等待下载安装包,然后解压编译。

gunzip daemontools-0.76.tar.gz

tar -xpf daemontools-0.76.tar

cd admin/daemontools-0.76/

./package/install
如果没有下载gcc,记得安装下载yum install gcc,我之前就是没有下载跳进这个坑了,让后在install就可以了,会出现下面的日志.

直接编译报错了,错误信息:

Log4j代码 收藏代码
./compile wait_pid.c
./makelib unix.a alloc.o alloc_re.o buffer.o buffer_0.o buffer_1.o \
buffer_2.o buffer_get.o buffer_put.o buffer_read.o buffer_write.o \
coe.o env.o error.o error_str.o fd_copy.o fd_move.o fifo.o lock_ex.o \
lock_exnb.o ndelay_off.o ndelay_on.o open_append.o open_read.o \
open_trunc.o open_write.o openreadclose.o pathexec_env.o \
pathexec_run.o prot.o readclose.o seek_set.o sgetopt.o sig.o \
sig_block.o sig_catch.o sig_pause.o stralloc_cat.o stralloc_catb.o \
stralloc_cats.o stralloc_eady.o stralloc_opyb.o stralloc_opys.o \
stralloc_pend.o strerr_die.o strerr_sys.o subgetopt.o wait_nohang.o \
wait_pid.o
./load envdir unix.a byte.a
/usr/bin/ld: errno: TLS definition in /lib64/libc.so.6 section .tbss mismatches non-TLS reference in envdir.o
/lib64/libc.so.6: could not read symbols: Bad value
collect2: ld returned 1 exit status
make: *** [envdir] Error 1
然后修改src目录下的error.h库文件。

vim src/error.h

找到“extern int errno;” 替换成“#include <errno.h>”,然后再编译。

./package/install

到此,提示下面信息表示成功安装。

Log4j代码 收藏代码
Copying commands into ./command…
Creating symlink daemontools -> daemontools-0.76…
Making command links in /command…
Making compatibility links in /usr/local/bin…
Creating /service…
Adding svscanboot to inittab…
init should start svscan now.

2、storm ui、nimbus、supervisor配置

首先进入service目录。

cd /service/

storm ui的配置:

mkdir ui

cd ui/

vim run

run脚本如下:

Shell代码 收藏代码
#!/bin/bash
exec 2>&1
exec /opt/app/apache-storm-0.9.5/bin/storm ui
chmod 755 run

nimbus的配置:

cd /service/

mkdir nimbus

cd nimbus/

vim run

run脚本如下:

Shell代码 收藏代码
#!/bin/bash
exec 2>&1
exec /opt/app/apache-storm-0.9.5/bin/storm nimbus
chmod 755 run

supervisor的配置:

cd /service/

mkdir supervisor

cd supervisor/

vim run

run脚本如下:

Shell代码 收藏代码
#!/bin/bash
exec 2>&1
exec /opt/app/apache-storm-0.9.5/bin/storm supervisor
chmod 755 run

到此一切安装和配置均OK,下面启动吧!

supervise /service/ui &

supervise /service/nimbus &

supervise /service/supervisor &

大功告成,以后这些服务就会自动重启了。当然肯定有同学会问,哪不是以后这些服务就杀不死了嘛!如果不想让某个服务自动重启,用命令ps -ef|grep supervise查看,把相应的进程给kill掉服务就不会自动重启了。

如果希望Storm随操作系统的启动而启动的话,在/etc/rc.local脚本里面添加如下配置:

export JAVA_HOME=/opt/app/jdk1.8.0_92

export PATH=JAVAHOME/bin:JAVA_HOME/bin:PATH

export CLASSPATH=.:JAVAHOME/lib/dt.jar:JAVA_HOME/lib/dt.jar:JAVA_HOME/lib/tools.jar

/usr/local/bin/supervise /service/ui

/usr/local/bin/supervise /service/nimbus

/usr/local/bin/supervise /service/supervisor

注:首先要指定JDK的环境变量,supervise要使用全路径。

展开阅读全文

没有更多推荐了,返回首页