网址: http://xumingming.sinaapp.com/179/twitter-storm-搭建storm集群/
本文翻译自: https://github.com/nathanmarz/storm/wiki/Setting-up-a-Storm-cluster。
这篇文章介绍搭建storm集群并运行的步骤。如果你使用AWS, 那么你可以看一下storm-deploy项目,storm-deploy项目使得在Amazon EC2上安装,配置storm集群完全自动化。这篇文章同时也帮你配置好Ganglia以监控CPU, 硬盘以及网络资源的使用情况。
下面是搭建storm集群的一些主要步骤:
- 搭建ZooKeeper集群。
- 在Nimbus和所有工作机器上面安装所有的软件。
- 在Nimbus和所有工作机器上下载并解压storm的发行版。
- 对storm.yaml进行一些必要的配置。
- 使用storm脚本来启动所有的必要的进程(nimbus, supervisor, worker)。
搭建ZooKeeper集群
storm使用zookeeper来协调整个集群, 但是要注意的是storm并不用zookeeper来传递消息。所以zookeeper上的负载是非常低的,单个节点的zookeeper在大多数情况下都已经足够了, 但是如果你要部署大一点的storm集群, 那么你需要的zookeeper也要大一点。关于如何部署zookeeper,可以看这里。
关于如何部署zookeeper有些需要注意的地方:
- 对zookeeper做好监控非常重要, zookeeper是fail-fast的系统,只要出现什么错误就会退出, 所以一定要监控,更多细节看这里。
- 一定要配置一个cron job来压缩zookeeper的数据和业务日志。zookeeper自己是不会去压缩这些的,所以你如果不设置一个cron job, 那么你很快就会磁盘不够用了,更多细节看这里。
在Nimbus和工作机器上安装必要软件
接下来需要安装Nimbus和工作机器上面的一些storm所依赖的软件。
- ZeroMQ 2.1.7
- JZMQ
- Java 6
- Python 2.6.6
- unzip
上面同时也列出了storm所依赖的软件的版本, 如果版本不一样可能运行不了。
如果安装ZeroMQ和JZMQ的时候有问题,可以看下安装依赖。
在Nimbus和工作机器上下载并解压storm发行版
接下来, 下载storm的发行版,然后解压。storm的发行版可以在这里找到。
配置storm.yaml
storm发行版在conf/storm.yaml包含了一些配置信息。你可以在这里看到默认配置。storm.yaml里面的配置比default.xml的优先级要高, 下面是要运行storm集群所必须的配置:
1. storm.zookeeper.servers 这个配置storm集群使用的zookeeper集群的地址,比如:
1
2
3
|
storm.zookeeper.servers:
- "111.222.333.444"
- "555.666.777.888"
|
2. storm.local.dir Nimbus和Supervisor在本地磁盘上需要一个目录来存储一些状态信息(jar包, 配置文件之类的东西)你应该在每台机器上创建那个目录,分配正确的权限,比如:
1
|
storm.local.dir: "/mnt/storm"
|
3. java.library.path 这是storm所依赖的本地依赖(ZeroMQ和JZMQ)的加载地址, 默认的是:/usr/local/lib:/opt/local/lib:/usr/lib, 大多情况下是对的,所以你应该不用更改这个配置。
4. nimbus.host 所有工作机器需要nimbus机器的地址, 这样它们才知道去哪里获取jar包和配置文件:
1
|
nimbus.host: "111.222.333.44"
|
5. supervisor.slots.ports 对于每一台工作机器,这个配置指定在这台工作机器上运行多少工作进程, 每个进程使用一个独立端口来接收消息,这个配置同时也指定使用哪些端口。如果你在这里定义5个端口, storm会在这个机器上最多分配5个工作进程。如果分配3个端口,那么最多分配3个进程。默认的配置是4个:
1
2
3
4
5
|
supervisor.slots.ports:
- 6700
- 6701
- 6702
- 6703
|
启动守护进程
最后一步是启动storm的所有守护进程。还是前面说的那样,对于每个进程都要有监控!storm是一个fail-fast系统,出现什么不可预知的错误的时候它都会退出的。storm被设计成在任何时候都可以安全退出, 在任何时候都能正确重启, 这就是storm为什么不在线程内存储状态 — 如果Nimbus和Supervisor重启的话,不会影响正在运行的topology。下面介绍如何启动这些线程:
- Nimbus 在Nimbus机器上运行bin/storm nimbus
- Supervisor 在每台工作机器上运行bin/storm supervisor, supervisor负责启动和终止工作机器上的工作进程。
- UI storm UI是一个可以查看storm运行状态的的一个网站,通过bin/storm ui运行,访问地址: http://{nimbus.host}:8080/。
就像你能看到的一样,运行storm集群很简单。这些进程会往你解压storm发行版的目录的子目录logs目录里面打日志。