您的位置:首页 > 其它

Storm集群搭建与配置指南

2015-01-04 16:17 176 查看
系统环境

安装环境为GNU/Linux 2.6.32 x64。

需要为每台设置好hostname,并在/etc/hosts配置好集群中每台机器的hostname与ip的关系。

确认集群里每台机器互相之间都是可以访问的,取消端口的限制。

注:以下命令行输入的命令没有加sudo,可自己酌情添加。
 

Storm集群包含以下组件

zookeeper

kafka

storm

三者都运行在JVM里,所以需要先安装Java环境。
 

Java环境
官方推荐使用Java6,安装过程略,需在~/.bashrc中配置好J***A_HOME,并在PATH中追加J***A_HOME/bin。
 

Python环境
Storm需要Python2.6.6以上的环境,一般都有预装,如果没有可以使用yum安装或者通过源码进行安装。
 

Zookeeper环境
kafka和storm都高度依赖Zookeeper,所以先部署他。
 

版本
官方建议配一个3台机器的集群,使用的是3.3.6稳定版。
 

准备
下载后解压,假设解压到/usr/local/zookeeper,设置一个环境变量$ZK_HOME指向这个目录。
 
配置
进入$ZK_HOME/conf目录,创建配置文件zoo.cfg,如下所示:
tickTime=2000
dataDir=your path
clientPort=2181
initLimit=5
syncLimit=2
server.1=机器1的hostname:2888:3888
server.2=机器2的hostname:2888:3888
server.3=机器3的hostname:2888:3888
 

本文后续章节会对这些参数进行详细的介绍,这里只是简单说几点:集群中的每台机器都需要感知整个集群是由哪几台机器组成的,在配置文件中,可以按照这样的格式,每行写一个机器配置: server.id=host:port:port. 关于这个id,我们称之为Server ID,用来标识该host在集群中的机器序号。在每个ZooKeeper机器上,我们都需要在数据目录(数据目录就是dataDir参数指定的那个目录)下创建一个myid文件,该文件只有一行内容,并且是一个数字——对应这个 Server ID数字。
 

在ZooKeeper的设计中,集群中所有机器上的zoo.cfg文件的内容都是一致的。
 

关于myid文件。myid文件中只有一个数字,即一个Server ID。例如,server.1 的myid 文件内容就是”1“。注意,请确保每个server的myid文件中id数字不同,并且和s erver.id=host:port:port中的id一致。另外,id的范围是1~255。
 

在其他2台机器也进行上述的操作,唯一的不同是myid中的数字。
 

如果要设置JVM参数,可以在$ZK_HOME/conf/java.env进行配置,例如:
export JVMFLAGS="-Xms2048m -Xmx2048m $JVMFLAGS"
zk使用log4j输出日志,默认输出到控制台上,可以到 $ZK_HOME/conf/log4j.properties中进行修改。
 

启动集群
分别执行$ZK_HOME/bin/zkServer.sh start启动。其中还有许多其他命令可具体参考其他文档。使用echo stat|nc ip port命令可验证集群的状态。
 

其他说明
有一些配置需要特别提一下:
maxClientCnxns单个客户端与单台服务器之间的连接数的限制,是ip级别的,这个值设置太小集群无法正常工作。设置为0代表无限制,其实就差不多了。其他配置在运维篇中会详细描述。
 

Kafka环境
一开始其实只需要配置一台kafka就可以了,因为kafka是无中心结构的,每个节点的地位都是一样的,节点之间通过zk进行互相发现和交互。加入一个新节点只需要启动节点进程,会自动向 zk报告自己的存在,这样集群中的其他节点也会知道了。不过这里假设配置的是多节点的集群。
 

版本
kafka_2.9.2-0.8.1版本
 

准备
下载后解压,假设解压到/usr/local/kafka,设置一个环境变量$KAFKA_HOME指向这个目录。
 

配置
修改$KAFKA_HOME/conf/server.properties配置文件,里面已有一些配置,下面选一个些重点的来说:
broker.id表示集群的一个节点的唯一表示,用一个数字表示。
 
log.dirs代表数据的持久化的目录,kafka不使用内存,而是直接持久化到硬盘,利用的是操作系统本身的缓存机制进行缓存,所以这个目录很重要。
 
log.retention.hours代表数据要保留多少个小时,超过这个时间会被自动删除。消费者即使从 kafka中取走了数据,但kafka也不会马上删除,而是过期了再删除。
 
zookeeper.connect表示与kafka进行通讯的zk集群,这个也很重要。
其他命令请参考官方文档。
 

kafka也是使用了log4j打日志,到$KAFKA_HOME/conf/log4j.properties修改即可。
 

修改kafka的JVM参数可以在$KAFKA_HOME/bin/kafka-server-start.sh中修改:
export KAFKA_HEAP_OPTS="-Xmx4G -Xms4G 等等"
 

启动集群
$KAFKA_HOME/bin/kafka-server-start.sh为启动命令,其他命令请参考官方文档。
如果有多个节点请分别在节点上启动。
启动后进程工作在前台,如果要设成daemon请使用nohup命令并在命令最后加上&。
 

在任意一个节点中输入命令来创建一个topic(队列)进行验证。
$/KAFKA_HOME/bin/kafka-topics.sh --create --topic first_topic --zookeeper 你的ZK集群IP:PORT --partitions 1 --replication-factor 1
如果输出Created topic "first_topic".则表示OK。
 

Storm环境
storm集群中的节点角色分为nimbus(监控和分派任务)和supervisor(任务具体调度)两种,一般一台主机只扮演其中的一种角色,要都在一起也可以,不过最好是要保持nimbus的安全,因为nimbus有单点故障的危险。这里假设都在一台机器上,分开的话过程也是一样的。
 

版本
apache-storm-0.9.1-incubating版本
 

准备
下载后解压,假设解压到/usr/local/storm,设置一个环境变量$STORM_HOME指向这个目录。
 

配置
修改$STORM_HOME/conf/storm.yaml,不管是nimbus还是supervisor都是一样的配置。对其中一些重要的配置进行说明:
storm.local.dir: "your path",这是storm的各个节点存储一些本地数据的路径,比如说上传的topology和它的JAR文件等等。
 

storm.zookeeper.servers:
 

"zk1 ip : port"

"zk2 ip : port"


 

代表zk集群的地址。
 

nimbus.host: "nimbus ip",代表nimbus节点的ip。
 

supervisor.slots.ports:
- 46700
- 46701
- 46702

 

代表supervisor节点可以启动的worker子进程的个数,其中的数字代表worker节点用来通信的本地端口号。默认是4个。
 

各个节点和worker的JVM参数可以分别配置,例如:
nimbus.childopts: "-Xmx2048m"
supervisor.childopts: "-Xmx2048m"
worker.childopts: "-Xmx2024m"
更多配置默认参数请参见官方文档,在这里可以看到默认配置:
https://github.com/apache/incubator-storm/blob/master/conf/defaults.yaml
 

启动集群
在nimbus节点中启动:
$STORM_HOME/bin/storm nimbus
 
在supervisor节点中启动:
$STORM_HOME/bin/storm supervisor
 
随意一个节点可以启动一个web后台程序,可以监控集群和拓扑的性能:
$STORM_HOME/bin/storm ui
 

上述启动的所有进程工作在前台,如果要设成daemon请使用nohup命令并在命令最后加上&。
 

最后在浏览器中输入地址:
http://{运行ui后台程序的进程ip}:8080  

如果可以看到类似下面的页面就表示部署成功了:
 



 
 











大小: 45.4 KB






查看图片附件
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: