三台服务器10.223.138.[141-143]html
JDK 1.7.0_80java
It is strongly recommended to use Oracle JDK rather than OpenJDK.
本次安装Storm版本为1.1.0
官网地址 请点击我
官方文档 Version: 1.1.0
安装文档 Setting up a Storm Clusterpython
CDH安装Zookeeper服务,此处略
Zookeeper version:zookeeper-3.4.5-cdh5.7.0git
官方建议:github
A few notes about Zookeeper deployment:web
- 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所须要的依赖apache
JDK 7 下载地址 请点击我
CenOS 6.7自带Python 2.6.6浏览器
# python -V Python 2.6.6
以上安装方法此处再也不赘述,可自行网上查阅。bash
下载地址 apache-storm-1.1.0.tar.gz
将压缩包解压到指定目录tar -zxvf apache-storm-1.1.0.tar.gz -C /your/path/
服务器
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: - "10.223.138.141" - "10.223.138.142" - "10.223.138.143"
若是端口不是默认的2181还须要配置storm.zookeeper.port参数
storm.local.dir: "/home/storm"
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: - 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目录。
bin/storm nimbus &
bin/storm supervisor &
,它用于启停Worker进程。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,详细介绍请参阅官网。(官网地址请点击我)
安装命令yum install monit
,若是没有找到的话,须要先安装epel源yum install epel-release
配置文件位置 /etc/monit.conf,分为Global section和Services两个部分
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的配置和全局配置分开,在/etc/monit.d/下面新建文件nimbus和supervisor做为监控nimbus和supervisor的配置。
这里主要是监控nimbus和supervisor的进程,咱们只看monit监控进程的语法 CHECK PROCESS <unique name> <PIDFILE <path> | MATCHING <regex>>
有两种方式,一个是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安装完毕!