Storm安装笔记
安装环境
三台服务器10.223.138.[141-143]
- CentOS release 6.7 (Final) 64位
-
JDK 1.7.0_80
It is strongly recommended to use Oracle JDK rather than OpenJDK.
- CDH 5.7.0
本次安装Storm版本为1.1.0
官网地址 请点击我
官方文档 Version: 1.1.0
安装文档 Setting up a Storm Cluster
安装Zookeeper集群
CDH安装Zookeeper服务,此处略
Zookeeper version:zookeeper-3.4.5-cdh5.7.0
- 10.223.138.141:2181
- 10.223.138.142:2181
- 10.223.138.143:2181
官方建议:
A few notes about Zookeeper deployment:
- It's critical that you run Zookeeper under supervision, since Zookeeper is fail-fast and will exit the process if it encounters any error case. See here for more details.
- It's critical that you set up a cron to compact Zookeeper's data and transaction logs. The Zookeeper daemon does not do this on its own, and if you don't set up a cron, Zookeeper will quickly run out of disk space. See here for more details.
- 进程监控以避免任何错误导致的程序退出
- 定时压缩数据和日志以避免可能引发的磁盘空间不足
安装依赖
安装Storm所需要的依赖
- Java 7
- Python 2.6.6
JDK 7 下载地址 请点击我
CenOS 6.7自带Python 2.6.6
# python -V
Python 2.6.6
以上安装方法此处不再赘述,可自行网上查阅。
下载Storm包
下载地址 apache-storm-1.1.0.tar.gz
将压缩包解压到指定目录tar -zxvf apache-storm-1.1.0.tar.gz -C /your/path/
配置storm.yaml
The Storm release contains a file atconf/storm.yaml
that configures the Storm daemons. You can see the default configuration values here. storm.yaml overrides anything indefaults.yaml
.
配置文件位置conf/storm.yaml
,以下是用以启动集群的必要配置
- storm.zookeeper.servers:Zookeeper集群配置
storm.zookeeper.servers:
- "10.223.138.141"
- "10.223.138.142"
- "10.223.138.143"
如果端口不是默认的2181还需要配置storm.zookeeper.port参数
- storm.local.dir:存储目录用以保存运行环境,比如jar包、配置文件等,在每台机器上手动创建目录并赋权限
storm.local.dir: "/home/storm"
- nimbus.seeds:master节点,官方建议配置machine's FQDN,即全域名。维基百科Fully_qualified_domain_name。本机查看命令
hostname -f
,修改方法请自行网上查阅。(配置多个Nimbus角色的机器可以启动Nimbus H/A。)
nimbus.seeds: ["cdh-1"]
原来我使用的是10.223.138.141,但是storm ui上Nimbus Summary出现了两行数据,一个是cdh-1,一个是10.223.138.141这种奇怪的问题,但是换成了全域名的这种形式就没问题了。
- supervisor.slots.ports:对应每一台Worker机器,定义一台机器上跑几个worker就配置几个端口,比如我这边一个机器上跑三个worker,配置如下
supervisor.slots.ports:
- 6700
- 6701
- 6702
- 健康度监控
# 脚本相关文件的存放目录
storm.health.check.dir: "/home/storm/healthchecks"
# 脚本执行的超时时间
storm.health.check.timeout.ms: 5000
配置第三方库和环境变量
如果需要扩展第三方库或自定义插件,把jar包放入extlib/
或者extlib-daemon/
目录,extlib-daemon/
这个里面只能被Storm的程序所使用,比如(Nimbus, Supervisor, DRPC, UI, Logviewer)这些,也可以通过环境变量STORM_EXT_CLASSPATH
和STORM_EXT_CLASSPATH_DAEMON
去配置扩展库classpath目录。
启动
- Nimbus: Nimbus角色的机器执行命令
bin/storm nimbus &
- Supervisor: Worker角色的机器执行命令
bin/storm supervisor &
,它用于启停Worker进程。 - UI: 某一台机器执行命令
bin/storm ui &
,然后可以通过浏览器访问http://{ui host}:8080。
logs/
此目录下可查看运行日志。
进程监控
在Setting up a Storm Cluster这份官方安装文档中强烈建议run under supervision,引用官方文档的原话(原文地址:Daemon-Fault-Tolerance)
What happens when Nimbus or Supervisor daemons die?
The Nimbus and Supervisor daemons are designed to be fail-fast (process self-destructs whenever any unexpected situation is encountered) and stateless (all state is kept in Zookeeper or on disk). As described in Setting up a Storm cluster, the Nimbus and Supervisor daemons must be run under supervision using a tool like daemontools or monit. So if the Nimbus or Supervisor daemons die, they restart like nothing happened.
当Nimbus或者Supervisor daemon进程挂了会怎样?
Nimbus和Supervisor daemon进程设计成快速失败(无论何时遇到任何异常情况执行自毁)和无状态(所有状态保存在Zookeeper或者磁盘上)。正如Setting up a Storm Cluster中描述的,Nimbus和Supervior daemon进程必须在监控下运行,如使用daemontools或者monit工具。所以如果Nimbus或者Supervisor daemon进程挂了,它可以像什么异常也没有发生似的重新启动。
这里我使用monit,详细介绍请参阅官网。(官网地址请点击我)
安装monit
安装命令yum install monit
,如果没有找到的话,需要先安装epel源yum install epel-release
配置文件位置 /etc/monit.conf,分为Global section和Services两个部分
- 配置Global section,以下是我个人的Global配置:(邮件功能暂略)
set daemon 60 #每60秒检查一次服务
with start delay 240 #Monit启动后第一次检查延迟240秒
set logfile /var/log/monit.log #日志输出到单独的文件
set pidfile /var/run/.monit.pid #pid文件位置
set idfile /var/.monit.id #id文件位置
set statefile /var/.monit.state #state文件位置
#配置web页面访问
set httpd port 2812 and #端口2812
use address 10.223.138.141 #如果配置localhost只能本地访问
allow localhost #允许本地访问
allow 10.223.138.141 #若不配置,monit status命令不可用,后台报错
#error : Denied connection from non-authorized client
#error : Cannot read status from the monit daemon
allow 10.223.132.0/24 #允许10.223.132网段访问,即我的电脑所在网段
allow admin:monit #用户名与密码
中间插一下:如果使用防火墙,要访问的话还需要把2812端口加入防火墙配置,编辑防火墙配置文件/etc/sysconfig/iptables
增加一行配置:-A INPUT -m state --state NEW -m tcp -p tcp --dport 2812 -j ACCEPT
注意:需要在相应的配置段中加入,其他位置不生效
.
.
-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 2812 -j ACCEPT
.
.
重启服务service iptables restart
- 配置Services
这里把Services的配置和全局配置分开,在/etc/monit.d/下面新建文件nimbus和supervisor作为监控nimbus和supervisor的配置。
这里主要是监控nimbus和supervisor的进程,我们只看monit监控进程的语法 CHECK PROCESS
有两种方式,一个是pidfile,一个是正则匹配进程名,因为storm的deamon没写pid文件,这里我用第二种方法,使用monit procmatch
命令验证是否可以匹配相应的进程,例如nimbus的进程,Command里面最后有org.apache.storm.daemon.nimbus
#monit procmatch org.apache.storm.daemon.nimbus
List of processes matching pattern "org.apache.storm.daemon.nimbus":
------------------------------------------
...此处省略...
------------------------------------------
Total matches: 1
匹配到nimbus的进程,表示OK。
#vi /etc/monit.d/nimbus
check process nimbus matching org.apache.storm.daemon.nimbus
start program = "/bin/bash -c '/home/storm/apache-storm-1.1.0/bin/nimbus.sh &>/tmp/nimbus.out'" with timeout 60 seconds
stop program = "/bin/kill -9 `ps -ef|grep daemon.nimbus|grep -v grep|awk '{print $2}'`"
if 3 restarts within 5 cycles then unmonitor
group storm
关于monit更为详细的说明请参见官方手册 Monit manual
以上设置的很简单,这里得好好说说这个start program,就是启动的命令,它可是实现进程挂掉后重启,但是我一开始试了好几种方式都不行
- 直接执行,
/home/storm/apache-storm-1.1.0/bin/storm nimbus
,启动超时 - 放入后台,
/home/storm/apache-storm-1.1.0/bin/storm nimbus &
,程序会自行终结 -
创建脚本文件/home/storm/apache-storm-1.1.0/bin/nimbus.sh
/home/storm/apache-storm-1.1.0/bin/storm nimbus &
脚本“&”符号还是要的,不然PPID是monit的。
给执行权限chmod 755 /home/storm/apache-storm-1.1.0/bin/nimbus.sh
不管是
/home/storm/apache-storm-1.1.0/bin/nimbus.sh
还是/bin/bash /home/storm/apache-storm-1.1.0/bin/nimbus.sh
都不能实现自动重启。 -
参考monit的FAQ(请点击我)使用
/bin/bash -c
执行但是后面必须要有一个输出的文件,没有会报错:error : 'nimbus' failed to start (exit status 0) -- no output
所以经过好一番折腾,最终 start program = "/bin/bash -c '/home/storm/apache-storm-1.1.0/bin/nimbus.sh &>/tmp/nimbus.out'"
,nimbus.sh就是上面提到的那个脚本文件。我觉得这应该不是最正确的配置,但是至少可以实现重启了。
supervisor同理
#vi /etc/monit.d/supervisor
check process supervisor matching org.apache.storm.daemon.supervisor.Supervisor
start program = "/bin/bash -c '/home/storm/apache-storm-1.1.0/bin/supervisor.sh &>/tmp/supervisor.out'" with timeout 60 seconds
stop program = "/bin/kill -9 `ps -ef|grep daemon.supervisor|grep -v grep|awk '{print $2}'`"
if 3 restarts within 5 cycles then unmonitor
group storm
这样就算配置完成了。141配置nimbus,然后141-143配置supervisor,三台机器都装了Monit,虽然M/Monit可以统一管理集群,但是需要收费,这边就没有考虑了。后面再尝试使用其他监控工具试试。
接下来就是启动monit,先熟悉monit的基本命令
-
monit
启动 -
monit -t
校验配置文件正确性 -
monit reload
重新加载配置 -
monit status
查看状态 -
monit quit
退出
所以当修改完配置文件之后,第一步执行monit -t
查看配置是否正确,然后monit reload
重新加载配置。
monit启动之后可以登录web查看,根据Global里面的配置,我的页面地址是:http://10.223.138.141:2812/
启动storm的UI后查看,我在10.223.138.141上启动的,访问地址为:10.223.138.141:8080(不要忘记防火墙!)
至此,Storm安装完毕!
参考
- Monit manual
- Monit FAQ
- Monit:开源服务器监控工具