《Storm企业级应用:实战、运维和调优》——2.1 环境准备

本文涉及的产品
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
简介:

本节书摘来自华章计算机《Storm企业级应用:实战、运维和调优》一书中的第2章,第2.1节,作者:马延辉 陈书美 雷葆华著, 更多章节内容可以访问云栖社区“华章计算机”公众号查看。

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 status

3.?安装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.6

2.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/zookeeper

2.?配置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/zookeeper

3.?启动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等方式定期清除过期的日志和快照文件。

相关实践学习
基于MSE实现微服务的全链路灰度
通过本场景的实验操作,您将了解并实现在线业务的微服务全链路灰度能力。
相关文章
|
22天前
|
运维 Kubernetes 监控
构建高效稳定的容器化运维环境
在现代IT基础设施中,容器技术以其轻量级、快速部署和易于管理的特性成为企业数字化转型的重要支撑。本文将深入探讨如何构建一个高效且稳定的容器化运维环境,涵盖从容器选择、集群管理到持续集成与持续部署(CI/CD)的最佳实践。文章旨在为运维工程师提供一套系统的解决方案,以应对日益复杂的业务需求和技术挑战。
|
27天前
|
人工智能 运维 监控
自动化运维在云计算环境下的应用与挑战
随着云计算技术的不断发展,自动化运维在云环境中扮演着越来越重要的角色。本文将探讨自动化运维在云计算环境下的应用和所面临的挑战,并分析其对企业运维工作的影响,以及未来的发展趋势。
22 8
|
30天前
|
运维 负载均衡 监控
提升运维效率:自动化工具在云端环境中的应用
随着云计算技术的快速发展,运维工作面临着更加复杂和繁重的挑战。本文将探讨如何利用自动化工具在云端环境中提升运维效率,从而降低成本、减少人为错误,并实现更高水平的运维管理。
|
10月前
|
运维 Linux
【Linux运维】安装——虚拟硬件环境
【Linux运维】安装——虚拟硬件环境
|
SQL 分布式计算 运维
【大数据开发运维解决方案】sqoop1.4.7的安装及使用(hadoop2.7环境)
Sqoop是一款开源的工具,主要用于在Hadoop(Hive)与传统的数据库(mysql、postgresql...)间进行数据的传递,可以将一个关系型数据库(例如 : MySQL ,Oracle ,Postgres等)中的数据导进到Hadoop的HDFS中,也可以将HDFS的数据导进到关系型数据库中。
【大数据开发运维解决方案】sqoop1.4.7的安装及使用(hadoop2.7环境)
|
弹性计算 运维 监控
系统运维 SysOM profiling 在云上环境的应用观测实践 | 龙蜥技术
通过部署 profiling,直击 CPU 指标异常等问题的第一现场。
系统运维 SysOM profiling 在云上环境的应用观测实践 | 龙蜥技术
|
消息中间件 运维 NoSQL
【运维】Centos 7 一键 搭建 Java开发者环境
虽然自己是一个开发,但是并不能止于开发的技术,项目发布需要部署到到Linux 服务器上, 所以对于开发人员来说,掌握一定的运维技能是必须的, 之前也有过帮人搭建网站的一些经验,运维什么的也是自己一并来,所以专门写一篇文章来记录一下相关,方便回头查阅! Centos 7 开发者环境初始化脚本下载
|
运维 Java 测试技术
【SpringBoot2】运维实用篇-多环境开发
什么是多环境?其实就是说你的电脑上写的程序最终要放到别人的服务器上去运行。每个计算机环境不一样,这就是多环境。常见的多环境开发主要兼顾3种环境设置,开发环境——自己用的,测试环境——自己公司用的,生产环境——甲方爸爸用的。因为这是绝对不同的三台电脑,所以环境肯定有所不同,比如连接的数据库不一样,设置的访问端口不一样等等。
143 0
|
运维 Kubernetes Java
快速搭建自动化运维环境(下)
快速搭建自动化运维环境(下)
1579 0
快速搭建自动化运维环境(下)
|
运维 Kubernetes 安全
快速搭建自动化运维环境(上)
快速搭建自动化运维环境(上)
2523 0
快速搭建自动化运维环境(上)