本节书摘来自华章计算机《Storm企业级应用:实战、运维和调优》一书中的第2章,第2.1节,作者:马延辉 陈书美 雷葆华著, 更多章节内容可以访问云栖社区“华章计算机”公众号查看。
在安装Storm的之前要做一些准备工作,这涉及操作系统设置、ZooKeeper集群的管理以及Storm安装之前的一些依赖库。下面将介绍Storm的系统配置、协调器ZooKeeper等。2.1.1 系统配置在Linux上安装Storm之前,需要先做如下准备:安装JDK 1.6。安装SSH服务。安装Python 2.6.6解释器。1.?安装JDK 1.6与Hadoop、HBase相同,Storm也需要JDK 1.6或者更高的版本。下面介绍安装JDK 1.6的具体步骤。(1)下载JDK 1.6从Java的官网,目前是Oracle公司的产品下载JDK,本书使用JDK的SE版本,从http://www.oracle.com/technetwork/java/javase/downloads/中下载JDK 1.6的安装包,注意要下载适应当前系统的JDK版本,一般是64位版本的JDK。JDK 1.6版本的u18以及旧版本,不要下载,这些版本的垃圾回收操作容易遇到JVM碰撞问题。(2)手动安装JDK 1.6进入JDK安装目录(假设安装在/usr/lib/jvm/jdk)后,开始安装JDK,具体操作代码如下:
#修改权限 sudo chmod u+x jdk-***-linux-i586.bin #安装 sudo -s ./jdk-***-linux-i586.bin(3)配置环境变量安装结束后,开始配置环境变量JAVA_HOME和CLASSPATH,修改指令如下:
vi /etc/prof?ile进入prof?ile文件后,在文件下面输入如下内容:
#set JAVA Environment export JAVA_HOME=/usr/lib/jvm/jdk export ClASSPATH=".:$JAVA_HOME/lib:$CASSPATH" export PATH="$JAVA_HOME:$PATH"修改完环境变量后,验证JDK是否安装成功,输入如下命令:
java -version如果出现Java版本信息,则说明安装成功。2.?安装SSH服务Storm集群模式的启动、关闭以及ZooKeeper集群需要SSH服务,所以使用的操作系统要安装此服务。(1)安装SSH确认节点可以连接Internet,执行如下命令检查SSH服务。
sudo ps –ef |grep ssh如果没有ssh进程,则执行如下命令安装SSH服务。
sudo yum install openssh(2)查看安装情况执行下面命令查看SSH安装的版本。
ssh -version执行之后如果出现如下信息,则表明安装已经成功。
OpenSSH_4.3p2, OpenSSL 0.9.8e-f?ips-rhel5 01 Jul 2008 Bad escape character 'sion'.查看服务状态命令如下:
service sshd status3.?安装Python 2.6.6在安装Python之前,Linux系统中其实已经有了Python解释器,但如果版本太低,需要重新安装Python。Python是Storm最底层的依赖,需要使用下面的命令下载并安装Python 2.6.6。
wget http:// www.python.org/ftp/python/2.6.6/Python-2.6.6.tar.bz2 tar –jxvf Python-2.6.6.tar.bz2 cd Python-2.6.6 ./conf?igure make make install安装完成后,需要使用命令测试Python 2.6.6是否安装成功。如果安装成功,则命令和结果如下:
python -V Python 2.6.62.1.2 安装ZooKeeper集群由于HBase、Kafka和Storm都使用ZooKeeper集群,大多数情况下,单个节点的ZooKeeper集群可以单独胜任这些应用,但是为了确保故障恢复或者部署大规模集群,可能需要更大规模节点的ZooKeeper集群,官方推荐的最小节点数为3。所以,本案例使用test1、test2和test3三台节点部署ZooKeeper,每个节点上都需要安装,下面介绍具体的安装部署过程。1.?下载官方源码从镜像网站下载ZooKeeper包,并将其解压安装,具体操作代码如下:
#下载、解压 wget http:// mirror.bjtu.edu.cn/apache/zookeeper/zookeeper-3.4.6/zookeeper-3.4.6.tar.gz mkdir -p /opt/modules mv zookeeper-3.4.6.tar.gz /opt/modules/ tar -zxvf zookeeper-3.4.6.tar.gz ln -s /opt/modules/zookeeper-3.4.6 /opt/modules/zookeeper #日志路径,配置文件用 mkdir -p /var/log/zookeeper mkdir /tmp/zookeeper2.?配置ZooKeeper属性文件根据ZooKeeper集群节点情况,创建ZooKeeper配置文件conf/zoo.cfg后,将基本配置添加到配置文件中。(1)配置服务器核心属性使用复制命令生成配置文件,代码如下:
cd conf cp zoo_sample.cfg zoo.cfg然后将下面的代码追加到配置文件zoo.cfg中:
tickTime=2000 clientPort=2181 initLimit=5 syncLimit=2 server.1=test1:2888:3888 server.2=test2:2888:3888 server.3=test3:2888:3888其中,每项参数的含义如下:tickTime:这个时间是作为ZooKeeper服务器之间或客户端与服务器之间维持心跳的时间间隔,也就是每隔tickTime时间发送一个心跳。clientPort:这个端口就是客户端连接ZooKeeper服务器的端口,ZooKeeper会监听这个端口,接受客户端的访问请求。initLimit:这个配置项用来配置ZooKeeper接受客户端(这里所说的客户端不是用户连接ZooKeeper服务器的客户端,而是ZooKeeper服务器集群中连接到Leader的Follower服务器)初始化连接时最长能忍受多少个心跳时间间隔数。当已经超过5个心跳的时间(也就是tickTime)长度后,ZooKeeper服务器还没有收到客户端的返回信息,那么表明这个客户端连接失败。总的时间长度就是5×2000ms=10s。syncLimit:这个配置项标识Leader与Follower之间发送消息、请求和应答时间,最长不能超过多少个tickTime的时间长度,总的时间长度就是2×2000ms=4s。server.A=B:C:D:其中A是一个数字,表示这个是第几号服务器;B是这个服务器的IP地址;C表示这个服务器与集群中的Leader服务器交换信息的端口;D表示万一集群中的Leader服务器挂了,需要一个端口来重新选举出一个新的Leader,而这个端口就是用来执行选举时服务器相互通信的端口。如果是伪集群的配置方式,由于B都是相同的,所以不同的ZooKeeper实例通信端口号不能相同,要给它们分配不同的端口号。接下来,添加myid文件,在dataDir目录(默认是/tmp/zookeeper)下创建myid文件,此文件中只包含一行,且内容为ZooKeeper部署节点对应的server.id中的ID编号。例如,test1、test2和test3分别对应的myid文件中的值是1、2和3。节点test1的myid文件的操作代码如下:
#创建文件myid vi /tmp/zookeeper/myid #将下面的数字添加到文件中 1(2)配置日志打印属性在默认情况下,日志放到当前目录下的zookeeper.out文件中,而在一般情况下需要将日志输出到指定的文件路径下,以便于查看收集和日志。下面的操作都是在ZooKeeper的安装主目录下进行。首先,修改bin/zkEnv.sh,将下面代码添加到脚本主体的开头部分:
ZOO_LOG_DIR=/var/log/zookeeper在默认情况下,日志输出到CONSOLE,关闭ROLLINGFILE。在生产环境中,需要将日志输出到ROLLINGFILE,并修改日志级别为INFO。这些配置项通过修改conf/log4j.properties实现,具体代码如下:
.log.dir=. zookeeper.tracelog.dir=.将上面对应的代码修改为下面的内容:
zookeeper.log.dir=/var/log/zookeeper zookeeper.tracelog.dir=/var/log/zookeeper将下面的代码使用#注释掉:
log4j.rootLogger=${zookeeper.root.logger}将下面代码最前面的#去掉:
#log4j.rootLogger=TRACE, CONSOLE, ROLLINGFILE, TRACEFILE同时修改文件的权限,因为需要用hadoop用户启动,将所有ZooKeeper相关的文件目录的所有者和组都修改为hadoop:hadoop,代码如下:
chown -R hadoop:hadoop /opt/modules/zookeeper* chown -R hadoop:hadoop /var/log/zookeeper chown -R hadoop:hadoop /tmp/zookeeper3.?启动ZooKeeper集群登录test1、test2和test3三个节点,进入ZooKeeper安装主目录,执行下面的命令:
su hadoop bin/zkServer.sh start使用下面的ZooKeeper客户端命令可以测试服务是否可用。
bin/zkCli.sh -server 127.0.0.1:2181如果安装并启动成功,则执行上面的命令进入交互终端后,输入help命令会得到如下的打印信息:
[zk: 127.0.0.1:2181(CONNECTED) 1] help ZooKeeper -server host:port cmd args connect host:port get path [watch] ls path [watch] set path data [version] rmr path delquota [-n|-b] path quit printwatches on|off create [-s] [-e] path data acl stat path [watch] close ls2 path [watch] history listquota path setAcl path acl getAcl path sync path redo cmdno addauth scheme auth delete path [version] setquota -n|-b val path [zk: 127.0.0.1:2181(CONNECTED) 2] ls / [kafkastorm, consumers, storm, hbase, brokers, zookeeper] [zk: 127.0.0.1:2181(CONNECTED) 3]其中,[zk: 127.0.0.1:2181 (CONNECTED) 2]前缀表示已经成功连接ZooKeeper,help命令表示查看当前交互客户端支持的命令,ls /命令表示查看当前ZooKeeper的根目录结构。在ZooKeeper运行过程中,会在dataDir目录下生成很多日志和快照文件,而ZooKeeper运行进程并不负责定期清理合并这些文件,导致占用大量磁盘空间。因此,需要通过Cronjob等方式定期清除过期的日志和快照文件。
相关资源:敏捷开发V1.0.pptx