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 at conf/storm.yaml that configures the Storm daemons. You can see the default configuration values here. storm.yaml overrides anything in defaults.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 <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 &
给执行权限 chmod 755 /home/storm/apache-storm-1.1.0/bin/nimbus.sh 脚本“&”符号还是要的,不然 PPID 是 monit 的。不管是 /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:开源服务器监控工具