Storm集群搭建与配置指南

系统环境

  • 安装环境为GNU/Linux 2.6.32 x64。

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

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

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

Storm集群包含以下组件

  • zookeeper

  • kafka

  • storm

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

Java环境

官方推荐使用Java6,安装过程略,需在~/.bashrc中配置好JAVA_HOME,并在PATH追加JAVA_HOME/bin

Python环境

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

Zookeeper环境

kafkastorm都高度依赖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=
机器1hostname:2888:3888
server.2=
机器2hostname:2888:3888
server.3=
机器3hostname: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“。注意,请确保每个servermyid文件中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修改即可。

修改kafkaJVM参数可以在$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个。

各个节点和workerJVM参数可以分别配置,例如:

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

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

 

 

猜你喜欢

转载自damacheng009.iteye.com/blog/2065915