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

本文涉及的产品
云原生网关 MSE Higress,422元/月
注册配置 MSE Nacos/ZooKeeper,118元/月
服务治理 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实现微服务的全链路灰度
通过本场景的实验操作,您将了解并实现在线业务的微服务全链路灰度能力。
相关文章
|
13天前
|
运维 监控 安全
云计算环境下的运维挑战与解决方案
本文探讨了云计算环境中运维面临的主要挑战,包括资源管理、自动化部署、安全性问题等,并提出了相应的解决策略。通过案例分析和最佳实践,为云环境下的运维工作提供了指导和参考。
25 1
|
20天前
|
运维 监控 持续交付
云计算环境下的运维自动化实践
本文探讨了在云计算环境下实施运维自动化的必要性、挑战及解决方案,重点介绍了如何利用现代技术工具实现高效的云资源管理和监控。通过具体案例分析,展示了自动化运维在提升系统稳定性、降低人力成本方面的优势。
|
25天前
|
存储 运维 安全
Spring运维之boot项目多环境(yaml 多文件 proerties)及分组管理与开发控制
通过以上措施,可以保证Spring Boot项目的配置管理在专业水准上,并且易于维护和管理,符合搜索引擎收录标准。
39 2
|
3月前
|
运维 负载均衡 监控
运维之光:打造高效、稳定的IT环境
在数字化浪潮中,企业对IT系统的依赖日益加深。本文将深入探讨如何通过高效的运维管理,构建一个稳定可靠的IT环境,确保业务连续性和数据安全。我们将从基础架构的优化、自动化工具的应用、团队协作与沟通的重要性,到持续学习与创新的必要性等方面进行详细阐述。无论你是初入运维领域的新手,还是希望提升现有系统性能的资深专家,这篇文章都将为你提供宝贵的见解和实用的策略。
70 1
|
4月前
|
运维 监控 应用服务中间件
自动化运维:打造高效、稳定的系统环境
【8月更文挑战第30天】本文将探讨如何通过自动化运维技术,提升系统的稳定性和效率。我们将从基础概念出发,逐步深入到实践应用,分享一些实用的工具和技术,以及如何将这些工具和技术融入到日常的运维工作中。无论你是运维新手,还是有一定经验的老手,都能在这篇文章中找到有价值的信息。让我们一起探索自动化运维的世界,提升我们的工作效率,让系统运行得更加平稳。
|
4月前
|
运维 监控 持续交付
"揭秘Puppet:自动化运维的超级英雄,一键驾驭复杂IT环境,让运维繁琐瞬间灰飞烟灭,引领未来运维新纪元!"
【8月更文挑战第9天】Puppet作为自动化运维的杰出代表,凭借其强大的配置管理和高度可定制性,助力IT运维实现自动化与智能化转型。通过定义资源模型与使用声明式语言描述系统状态,Puppet能自动调整系统至期望状态,实现标准化运维流程。其工作流程包括定义-应用-报告三步,支持从服务器配置到复杂网络、数据库管理等多种场景。示例代码展示了如何自动化部署Apache服务器,体现了Puppet在实际操作中的高效与便捷。随着技术演进与社区壮大,Puppet将持续推动运维领域的创新发展。
75 6
|
6月前
|
JSON 弹性计算 运维
深入浅出资源编排ROS:构建云环境下的自动化运维利器引言
**资源编排ROS是阿里云提供的自动化管理工具,通过声明式模板定义云资源生命周期,简化复杂IT架构的运维。它解析JSON或YAML模板,自动创建、更新资源,确保状态与模板一致。ROS用于环境一致性、故障恢复、成本优化,是现代云管理的关键,助力企业提升效率和成本效益。**
178 3
|
6月前
|
运维 安全 Java
SpringBoot运维篇(打包,多环境,日志)
SpringBoot运维篇(打包,多环境,日志)
|
6月前
|
缓存 运维 Java
Spring运维之boot项目多环境(yaml 多文件 proerties)及分组管理与开发控制
Spring运维之boot项目多环境(yaml 多文件 proerties)及分组管理与开发控制
54 0
|
7月前
|
运维 Linux Docker
ChatGLM3在Docker环境部署(1),Linux运维电话面试技巧
ChatGLM3在Docker环境部署(1),Linux运维电话面试技巧