1.引言
1.1 名词解释
Zookeeper:解决分布式应用中经常遇到的一些数据管理问题,如:统一命名服务、状态同步服务、集群管理、分布式应用配置项的管理等。
ZeroMQ:Storm0.9.0之前的版本中需要安装ZeroMQ,实现Strom Worker之间的通信;Storm0.9.0版本之后采用Netty替代ZeroMQ使Strom部署分布式环境更方便。
Netty:JBOSS提供的一个java开源框架。Netty提供异步的、事件驱动的网络应用程序框架和工具,用以快速开发高性能、高可靠性的网络服务器和客户端程序。
2.安装
本次安装分三个步聚进行:
1、安装JRE环境,JRE要求1.6及以上(略)
2、安装Zookeeper,本次使用Zookeeper-3.4.6为例
3、安装Storm,使用0.9.0及以上版即可
2.1 Zookeeper
Zookeeper安装分单机模式和分布式模式,单机模式安装如下:
下载并解压Zookeeper:
<dependency>
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
<version>3.4.6</version>
</dependency>
Zookeeper配置项:
1.tickTime:CS通信心跳数
Zookeeper 服务器之间或客户端与服务器之间维持心跳的时间间隔,也就是每个 tickTime 时间就会发送一个心跳。tickTime以毫秒为单位。
2.initLimit:LF初始通信时限
集群中的follower服务器(F)与leader服务器(L)之间初始连接时能容忍的最多心跳数(tickTime的数量)。
3.syncLimit:LF同步通信时限
集群中的follower服务器与leader服务器之间请求和应答之间能容忍的最多心跳数(tickTime的数量)。
4.dataDir:数据文件目录
Zookeeper保存数据的目录,默认情况下,Zookeeper将写数据的日志文件也保存在这个目录里。
5.dataLogDir:日志文件目录
Zookeeper保存日志文件的目录。
dataLogDir=/home/michael/opt/zookeeper/log
6.clientPort:客户端连接端口
客户端连接 Zookeeper 服务器的端口,Zookeeper 会监听这个端口,接受客户端的访问请求。
clientPort=2181
7.服务器名称与地址:集群信息(服务器编号,服务器地址,LF通信端口,选举端口)
server.N其中N表示服务器编号(可以为1,2,3…),YYY表示服务器的IP地址,A为LF通信端口,表示该服务器与集群中的leader交换的信息的端口。B为选举端口,表示选举新leader时服务器间相互通信的端口(当leader挂掉时,其余服务器会相互通信,选择出新的leader)。一般来说,集群中每个服务器的A端口都是一样,每个服务器的B端口也是一样。但是当所采用的为伪分布时,IP地址都一样,只能时A端口和B端口不一样。
这个配置项的书写格式比较特殊,规则如下:
server.N=YYY:A:B
伪分布:
server.1=127.0.0.1:2888:3888
server.2=127.0.0.1:2889:3889
server.3=127.0.0.1:2890:3890
分布式:
server.1=192.168.1.2:2888:3888
server.2=192.168.1.3:2888:3888
server.3=192.168.1.4:2888:3888
单机版:
1)重命名 Zoo_sample.cfg文件
Windows下直接重命名为zoo.cfg
Linux:
mv ../zoo_sample.cfg zoo.cfg
2)配置Zoo.cfg
dataDir=…/data,data目录不存,则手工创建。
如下:
tickTime=2000
initLimit=5
syncLimit=2
dataDir=D:\\server1\\data
3)启动Zookeeper
../zookeeper-3.4.6/bin/zkServer.sh start
4)测试Zookeeper
../zookeeper-3.4.6/bin/zkCli.sh 或 echo stat|nc localhost 2181
分布式:
1)重命名 Zoo_sample.cfg文件
Windows下直接重命名为zoo.cfg
Linux:
mv ../zoo_sample.cfg zoo.cfg
2)配置Zoo.cfg
dataDir=…/data,data目录不存,则手工创建。在本机模拟三个节点(伪分布)
tickTime=2000
initLimit=5
syncLimit=2
dataDir=D:\\server1\\data
dataLogDir=D:\\server1\\dataLog
clientPort=2181
//伪分布配置实例
server.1=127.0.0.1:2888:3888
server.2=127.0.0.1:2889:3889
server.3=127.0.0.1:2890:3890
3)创建标识Server ID
在…/zookeeper-3.4.6/data目录中创建文件 myid 文件,每个文件中分别写入当前机器的server id,例如1.2.3.4这个机器,在…/zookeeper-3.4.6/data目录的myid文件中写入数字1
注意:windows中新建myid文件是不能有后缀
4)启动Zookeeper
../zookeeper-3.4.6/bin/zkServer.sh start
5)测试Zookeeper
../zookeeper-3.4.6/bin/zkCli.sh 或 echo stat|nc localhost 2181
2.2 Storm
主要介绍Storm分布式集群环境的搭建,单机模式(又称本地集群、伪分布式)
1)搭建一个Zookeeper集群(参考上述2.1节)
2)安装JRE(略)
3)在nimbus、supervisor节点下载并解压缩Storm包
4)修改nimbus、supervisor节点的配置文件(storm.yaml)
5)使用storm脚本启动守护进程(包括nimbus、supervisor、ui)
在自己的win2008服务器上安装如下三台虚拟机(普通PC机上也行):
①cluster01:
用户名 / 密码:nimbus / nimbus
ip:192.168.170.128
②cluster02:
用户名 / 密码:zookeeper / zookeeper
ip:192.168.170.129
③cluster03:
用户名 / 密码:supervisor / supervisor
ip:192.168.170.130
此三台虚拟机分别用作Storm集群中的nimbus节点、Zookeeper集群、supervisor节点,因此后面说的在nimbus节点上的操作实际上就是在cluster01这台虚拟机上进行操作,其他类推。
1、搭建Zookeeper集群
参考上述2.1节,在cluster02虚拟机安装Zookeeper集群。
2、安装JRE
略
3、下载并解压Storm到nimbus、supervisor节点
采用Storm0.9.0及以上
4、修改nimbus、supervisor节点的配置文件(storm.yaml)
Storm的配置文件位于storm主目录下的conf/storm.yaml,有四处强制需要指定,分别是:
①storm.zookeeper.servers:指定zookeeper集群中的主机列表,本例中zookeeper集群只有一台主机,配置如下:
storm.zookeeper.servers:
- “192.168.170.129”
②storm.local.dir: nimbus和supervisor进程需要一个本地磁盘上的目录去存储一些jar包、配置文件,需要注意此目录的权限。
nimbus节点上的配置:
storm.local.dir: "/home/nimbus/storm"
supervisor节点上的配置:
storm.local.dir: "/home/supervisor/storm"
③nimbus.host:指定nimbus节点对应的主机,配置如下:
nimbus.host: "192.168.170.128"
④supervisor.slots.ports:对于每个supervisor节点,需要指定一些端口,来运行相应数目的JVM进程。下面的配置开发了四个端口,即在supervisor节点上运行了四个JVM进程(4个worker、此处涉及到Storm中的并行化机制)。
supervisor.slots.ports:
- 6700
- 6701
- 6702
- 6703
注:nimbus节点和supervisor节点上的storm.yaml均需要配置。
⑤使用storm脚本启动守护进程(包括nimbus、supervisor、ui)
1) nimbus:在nimbus节点上运行storm nimbus命令
在Storm主控节点上运行”bin/storm nimbus >/dev/null 2>&1 &”启动Nimbus后台程序,并放到后台执行;
2) supervisor:在supervisor节点上运行 storm supervisor命令
Supervisor: 在Storm各个工作节点上运行”bin/storm supervisor >/dev/null 2>&1 &”启动Supervisor后台程序,并放到后台执行
3)ui:在nimbus节点上运行storm ui命令
UI: 在Storm主控节点上运行”bin/storm ui >/dev/null 2>&1 &”启动UI后台程序,并放到后台执行,启动后可以通过http://{nimbus host}:8080观察集群的worker资源使用情况、Topologies的运行状态等信息。
注意事项:
启动Storm后台进程时,需要对conf/storm.yaml配置文件中设置的storm.local.dir目录具有写权限。
Storm后台进程被启动后,将在Storm安装部署目录下的logs/子目录下生成各个进程的日志文件。
Storm UI必须和Storm Nimbus部署在同一台机器上,否则UI无法正常工作,因为UI进程会检查本机是否存在Nimbus链接。
为了方便使用,可以将bin/storm加入到系统环境变量中。
2.3 项目部署
①启动Storm Topology:
storm jar allmycode.jar org.me.MyTopology arg1 arg2 arg3
其中,allmycode.jar是包含Topology实现代码的jar包,org.me.MyTopology的main方法是Topology的入口,arg1、arg2和arg3为org.me.MyTopology执行时需要传入的参数。
②停止Storm Topology:
storm kill {toponame}
其中,{toponame}为Topology提交到Storm集群时指定的Topology任务名称。