Storm集群部署
Storm的环境分为生产环境和开发环境两种。
开发环境是提供Storm开发人员进行Storm程序开发与测试的环境。Storm的硬件环境只需要一台普通PC主机(该主机上需具备JDK、Eclipse等)即可。在开发环境上开发Storm应用称为本地
模式。
生产环境则是Storm的集群环境。需要3台或更多的主机作为节点,安装Linux操作系统,同时需要安装JDK、ZooKeeper、ZeroMQ、JZMQ、Storm和Python(我这里是系统自带的)即可。在生
产环境上运行Storm应用称为远程模式。
用到的软件
apache-storm-0.9.3.tar.gz
dk-6u45-linux-i586.bin
jzmq-master.zip
zeromq-2.1.7.tar.gz
zookeeper-3.4.5.tar.gz
安装需要的依赖库
在32位CentOS上需要如下rpm包
autoconf-2.63-5.1.el6.noarch
automake-1.11.1-4.el6.noarch
gcc-c++-4.4.7-3.el6.i686
libcom_err-devel-1.41.12-14.el6.i686
libstdc++-devel-4.4.7-3.el6.i686
libtool-2.2.6-15.5.el6.i686
libuuid-2.17.2-12.9.el6.i686
libuuid-devel-2.17.2-12.9.el6.i686
uuid-1.6.1-10.el6.i686
uuid-devel-1.6.1-10.el6.i686
在64位CentOS上需要如下rpm包
autoconf-2.63-5.1.el6.noarch
automake-1.11.1-4.el6.noarch
e2fsprogs-devel-1.41.12-14.el6.x86_64
gcc-c++-4.4.7-3.el6.x86_64
libcom_err-devel-1.41.12-14.el6.x86_64
libstdc++-devel-4.4.7-3.el6.x86_64
libtool-2.2.6-15.5.el6.x86_64
libuuid-2.17.2-12.9.el6.x86_64
libuuid-devel-2.17.2-12.9.el6.x86_64
uuid-1.6.1-10.el6.x86_64
uuid-devel-1.6.1-10.el6.x86_64
HostName IP Soft Process
storm1 192.168.1.61 Storm,Zookeeper QuorumPeerMain、Nimbus、Supervisor、Core、Drcp、Logviewer
storm2 192.168.1.62 Storm,Zookeeper QuorumPeerMain、Supervisor、Logviewer
storm3 192.168.1.63 Storm,Zookeeper QuorumPeerMain、Supervisor、Logviewer
##修改storm1的主机名
vi /etc/sysconfig /network
HOSTNAME=h1
esc,shift+zz
##修改storm1的主机映射文件
vi /etc/hosts
192.168.1.61 storm1
192.168.1.62 storm2
192.168.1.63 storm3
esc,shift+zz
##关闭storm1的防火墙
service iptables stop
chkconfig iptables off
chkconfig --list | grep iptables
##在storm1上安装32位Jdk-6u45
cd /usr/java/
chmod u+x jdk-6u45-linux-i586.bin
./jdk-6u45-linux-i586.bin
mv jdk1.6.0_45/ java
##在storm1上配置JAVA_HOME
vi /etc/profile
export JAVA_HOME=/usr/java
export PATH=.:$JAVA_HOME/bin:$PATH
esc,shift+zz
source /etc/profile
##验证storm1上的JDK安装是否成功
java -version
##复制storm1虚拟机两个,分别改名为storm2和storm3。将storm2主机IP改为192.168.1.42,将storm3主机IP改为192.168.1.43
##配置SSH免密码登陆(使用rsa非对称加密方式)
[root@storm1 .ssh]# ssh-keygen -t rsa三次回车
[root@storm2 .ssh]# ssh-keygen -t rsa三次回车
[root@storm3 .ssh]# ssh-keygen -t rsa三次回车
[root@storm1 .ssh]# ssh-copy-id root@h1,输入yes,输入密码
[root@storm2 .ssh]# ssh-copy-id root@h1,输入yes,输入密码
[root@storm3 .ssh]# ssh-copy-id root@h1,输入yes,输入密码
[root@storm1 .ssh]# scp authorized_keys root@storm2:/root/.ssh/,输入yes,输入密码
[root@storm1 .ssh]# scp authorized_keys root@storm3:/root/.ssh/,输入yes,输入密码
##验证SSH免密码登陆
各个机器相互登陆到其他机器,首次会提示输入密码
ssh storm1
ssh n ...
##在storm1上配置安装zookeeper-3.4.5.tar.gz到/cloud/
tar -zxvf zookeeper-3.4.5.tar.gz -C /cloud
mv zookeeper-3.4.5.tar.gz zk
##在storm1上配置Zookeeper
mv /cloud/zk/conf/zoo_examp.cfg /cloud/zk/conf/zoo.cfg
vi /cloud/zk/conf/zoo.cfg
dataDir=/cloud/zk/data
server.1=storm1:2888:3888
server.2=storm2:2888:3888
server.3=storm3:2888:3888
esc
shift+zz
在zk下创建data文件夹,该文件夹里有个myid,值为1
##在storm1上配置ZOOKEEPER_HOME
vi /etc/profile
export ZOOKEEPER_HOME=/usr/java
export PATH=.:ZOOKEEPER_HOME/bin:$JAVA_HOME/bin:$PATH
esc,shift+zz
source /etc/profile
##将storm1上的zk复制到storm2和storm3上
scp -r /cloud/zk root@storm2:/cloud/ ###/cloud/zk/data/myid的值改为2
scp -r /cloud/zk root@storm3:/cloud/ ###/cloud/zk/data/myid的值改为3
##将storm1上的/etc/profile复制到storm2和storm3上
scp /etc/profile root@storm2:/etc/
scp /etc/profile root@storm3:/etc/
##安装apache-storm-0.9.3.tar.gz到/cloud/
tar -zxvf apache-storm-0.9.3.tar.gz -C /cloud
mv apache-storm-0.9.3 storm
vi /cloud/storm/conf/storm.yaml
/cloud/storm/conf/storm.yaml配置如下
storm.zookeeper.servers:
- "storm1"
- "storm2"
- "storm3"
nimbus.host: "storm1"
drpc.servers:
- "storm1"
esc
shift+zz
##将storm1上配置好的storm复制到storm2和storm3上
scp -r /cloud/storm root@storm2:/cloud/
scp -r /cloud/storm root@storm3:/cloud/
##启动storm集群
在storm1上:
nohup storm nimbus >/dev/null 2>&1 &
nohup storm supervisor >/dev/null 2>&1 &
nohup storm ui >/dev/null 2>&1 &
nohup storm drpc >/dev/null 2>&1 &
nohup storm logviewer >/dev/null 2>&1 &
在storm2上:
nohup storm supervisor >/dev/null 2>&1 &
nohup storm logviewer >/dev/null 2>&1 &
在storm3上:
nohup storm supervisor >/dev/null 2>&1 &
nohup storm logviewer >/dev/null 2>&1 &
##验证集群启动状态
1:
[root@storm1 soft]# for i in storm1 storm2 storm3; do echo $i; ssh $i `which jps`; done
storm1
4606 Jps
2516 core
2346 QuorumPeerMain
2408 nimbus
2311 supervisor
4684 drpc
2466 logviewer
storm2
2336 QuorumPeerMain
2388 supervisor
2407 logviewer
4535 Jps
storm3
5705 QuorumPeerMain
5798 supervisor
2962 logviewer
7945 Jps
2:
192.168.1.41:8080