Storm集群的安装部署
内容
Storm简介
- Storm节点
Storm集群中包含两类节点:nimbus和supervisor。nimbus是集群中的主控节点,负责在集群内分发代码,分配任务给supervisor节点,并且负责监控集群运行状态。supervisor是具体的工作节点,负责监听从nimbus分配给它执行的任务,据此管理执行任务的工作进程。nimbus和supervisor之间的协调工作通过Zookeeper集群来实现,如下图所示: - 本文的步骤
- 搭建ZooKeeper集群
- 搭建Storm集群
- 用Supervisor管理ZooKeeper和Storm
- 本文所涉及的物理节点
物理机IP | OS | 硬盘 | 内存 |
---|---|---|---|
192.168.0.177 | Red Hat 6.5 / 64 | 150G | 3G |
192.168.0.179 | Red Hat 6.5 / 64 | 250G | 3G |
192.168.0.250 | Red Hat 6.5 / 64 | 150G | 3G |
- 本文所涉及的软件
|软件|版本|前置条件|安装路径|安装节点|
|:–:|:–:|:–:|:–:|
|Zookeeper|3.4.6|JRE 6 or later|/opt/zookeeper|所有节点|
|Storm|0.9.6|JRE 6 or later
Python 2.6.6 or later
ZooKeeper|/opt/storm|Nimbus:
192.168.0.179
Supervisor:
192.168.0.250
192.168.0.177
192.168.0.179|
|Supervisor|3.1.3|–|–|所有节点|
搭建ZooKeeper集群
准备
到Oracle官网下载安装JRE/JDK,或使用下面的命令安装OpenJDK1
yum install java-1.6.0-openjdk
下载
点击这里从官方下载最新的ZooKeeper Release版本,并解压到集群中每台需要部署Storm的服务器上,这里均解压到/opt/zookeeper3.4.6/
,然后创建软链1
2[root@192.168.0.177 ~]#tar zxvf zookeeper-3.4.6.tar.gz
[root@192.168.0.177 ~]#ln -s /opt/zookeeper3.4.6/ /opt/zookeeper配置
在conf
路径下创建配置文件zoo.cfg
, 可以参考以下配置1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32[root@192.168.0.177 ~]#cat /opt/zookeeper/conf/zoo.cfg
The number of milliseconds of each tick
tickTime=2000
# The number of ticks that the initial
# synchronization phase can take
initLimit=10
# The number of ticks that can pass between
# sending a request and getting an acknowledgement
syncLimit=5
# the directory where the snapshot is stored.
# do not use /tmp for storage, /tmp here is just
# example sakes.
dataDir=/opt/zookeeper/data
# the port at which the clients will connect
clientPort=2181
# the maximum number of client connections.
# increase this if you need to handle more clients
#maxClientCnxns=60
#
# Be sure to read the maintenance section of the
# administrator guide before turning on autopurge.
#
# http://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_maintenance
#
# The number of snapshots to retain in dataDir
autopurge.snapRetainCount=3
# Purge task interval in hours
# Set to "0" to disable auto purge feature
autopurge.purgeInterval=5
server.1=192.168.0.177:2888:3888
server.2=192.168.0.250:2888:3888
server.3=192.168.0.179:2888:3888ZooKeeper集群中的每台server需要互相通信,故需要按照
server.id=host:port:port
的格式配置各ZooKeeper节点的信息。而配置文件中的dataDir
参数配置了ZooKeeper的数据存储地址,该路径下需要创建一个名为myid的文件,用来存储该节点在ZooKeeper集群中的序号,即server.id
中的id
1
2
3
4
5
6[root@192.168.0.177 ~]cat /opt/zookeeper/data/myid
1
[root@192.168.0.250 ~]cat /opt/zookeeper/data/myid
2
[root@192.168.0.179 ~]cat /opt/zookeeper/data/myid
3启动
使用zkServer.sh
脚本启动ZooKeeper进程1
/opt/zookeeper/bin/zkServer.sh start
由于Zookeeper是快速失败(fail-fast)的,且遇到错误情况进程会退出,因此,最好能通过监控程序将Zookeeper管理起来,保证Zookeeper退出后能被自动重启。详情参考这里。
有网友提到,当在的Supervisor等监控程序下启动时,最好在命令后再加上
start-foreground
,以保证监控程序能正常地运行:When running zookeeper under supervision, use “zkServer.sh start- foreground” instead of “zkServer.sh start”. The regular start command forks and exits too many times for supervisord to track the application state successfully.
转载自 https://groups.google.com/d/msg/storm-user/_L6i2JLjQwA/H1LMX2s6JV4J验证
运行zkCli.sh
连接Zookeeper启动交互式命令行,验证是否运行成功。在命令行中可以执行类似操作系统的文件命令,如ls
,rm
,来管理集群中的文件1
2
3
4
5
6
7[root@192.168.0.177 ~]#/opt/zookeeper/bin/zkCli.sh
Connecting to localhost:2181
2016-04-20 02:40:44,256 [myid:] - INFO [main:Environment@100] - Client environment:zookeeper.version=3.4.6-1569965, built on 02/20/2014 09:09
WATCHER::
...
WatchedEvent state:SyncConnected type:None path:null
[zk: localhost:2181(CONNECTED) 0]注意:Zookeeper运行过程中会在dataDir目录下生成很多日志和快照文件,而Zookeeper进程并不负责定期清理合并这些文件,导致占用大量磁盘空间,因此,需要通过cron等方式定期清除没用的日志和快照文件。详情参考这里。
搭建Storm集群
准备
Redhat或CentOS系统中会默认安装Python,确保其版本在2.6.6,否则对其进行更新。下载
点击这里从官网下载Storm的压缩包,解压到集群中每台需要部署Storm的服务器上,然后创建软链1
2[root@192.168.0.177 ~]#unzip apache-storm-0.9.6.zip -D /opt/
[root@192.168.0.177 ~]#ln -s /opt/apache-storm-0.9.6 /opt/storm配置
创建Storm的数据存储路径1
[root@192.168.0.177 ~]# mkdir /mnt/storm
在配置文件
conf/storm.yaml
中新增如下内容:1
2
3
4
5
6
7storm.zookeeper.servers:
- "192.168.0.177"
- "192.168.0.179"
- "192.168.0.250"
storm.local.dir: "/mnt/storm"
nimbus.host: "192.168.0.177"
ui.port: 8080其中
nimbus.host
指定了即将要启动的nimbus服务的ip或hostname。启动
用bin/storm
来启动Storm的三种服务:nimbus,supervisor和ui,如1
[root@192.168.0.177 ~]#/opt/storm/bin/storm nimbus >/dev/null 2>&1 &
会在192.168.0.177上启动nimbus,命令中的
>/dev/null 2>&1 &
让进程在后台运行,否则该进程会一直运行在当前的shell会话中。
用相同的方式在在192.168.0.177上启动supervisor和ui,在其他的节点上启动supervisor进程。1
2/opt/storm/bin/storm supervisor >/dev/null 2>&1 &
/opt/storm/bin/storm ui >/dev/null 2>&1 &此时包含一个nimbus节点和三个supervisor节点的Storm集群已经搭建完毕。到
http://192.168.0.177:8080
访问Storm的ui可以看到集群中的节点的的信息。三种服务启动的日志可以到/opt/storm/logs
路径下获取。需要注意的是,Storm同样是快速失败的,这样Storm才能在任意时刻被停止,并且当进程重启后被正确地恢复执行。这也是为什么Storm不在进程内保存状态的原因,即使nimbus或supervisor被重启,运行中的topology也不会受到影响。
用Supervisor管理ZooKeeper和Storm
这里不要与Storm的supervisor混淆,Supervisor是一个Unix体系下的C/S模式的进程管理程序,它能够让用户监控和管理大量的线程,类似的程序还有launchd和daemontools等,。用Supervisor可以轻松地管理ZooKeeper和Storm,当他们失败的时候Supervisor会自动将其重启。
- 安装
使用如下命令在Redhat或者CentOs下安装Supervisor,并设置为开机自动启动1
2yum install supervisor
chkconfig supervisord on - 配置
在/etc/supervisord.conf
中添加ZooKeeper相关配置。注意要保证logfile
所配置的日志文件的路径在系统中存在。添加Storm,这里以nimbus服务为例1
2
3
4
5
6
7
8
9
10
11
12[program:zoo-keeper]
command=/opt/zookeeper/bin/zkServer.sh start-foreground
user=root
autostart=true
autorestart=true
startsecs=10
startretries=999
log_stdout=true
log_stderr=true
logfile=/opt/zookeeper/logs/supervisord-zookeeper.out
logfile_maxbytes=20MB
logfile_backups=101
2
3
4
5
6
7
8
9
10
11
12[program:storm-nimbus]
command=/opt/storm/bin/storm nimbus
user=root
autostart=true
autorestart=true
startsecs=10
startretries=999
log_stdout=true
log_stderr=true
logfile=/opt/storm/logs/supervisord-nimbus.out
logfile_maxbytes=20MB
logfile_backups=10 - 启动
启动supervisord
服务:查看所有服务的当前运行状态1
service supervisord start
1
2
3
4
5[root@192.168.0.177 ~]#supervisorctl status
storm-nimbus RUNNING pid 599, uptime 10:56:28
storm-supervisor RUNNING pid 637, uptime 10:56:22
storm-ui RUNNING pid 674, uptime 10:56:16
zoo-keeper RUNNING pid 31233, uptime 11:40:57