分布式实时日志系统(一)环境搭建之 Jstorm 集群搭建过程/Jstorm集群一键安装部署

最近公司业务数据量越来越大,以前的基于消息队列的日志系统越来越难以满足目前的业务量,表现为消息积压,日志延迟,日志存储日期过短,所以,我们开始着手要重新设计这块,业界已经有了比较成熟的流程,即基于流式处理,采用 flume 收集日志,发送到 kafka 队列做缓冲,storm 分布式实时框架进行消费处理,短期数据落地到 hbase、mongo中,长期数据进入 hadoop 中存储。 接下来打算将这其间所遇到的问题、学习到的知识记录整理下,作为备忘,作为分享,带给需要的人。

淘宝开源了许多产品组件,其中包括这鼎鼎有名的 jstorm ,也就是我们采用的分布式实时处理框架,至于为什么,请看《为什么选择Jstorm》。这篇文章只介绍 Jstorm 整个集群的搭建过程,并提供一键安装部署脚本,方便其它使用的人员(搭建环境是一件头疼的事情,费时、费力)。

这是 Jstorm 的介绍PPT:(slideshare PPT 分享服务在大陆是被墙的,不能科学上网?查看使用shadowsocks服务享受自由网络学习方法)

Jstorm introduction-0.9.6 from longda feng

Jstorm 官方搭建使用过程如连接https://github.com/alibaba/jstorm/wiki/%E5%A6%82%E4%BD%95%E5%AE%89%E8%A3%85 ,我整理了三个脚本:安装 Jstorm 集群安装 jstorm_web_ui 监控页面启动zookeeper、Jstorm集群进行测试

一、整体环境说明

三个脚本是测试环境搭建使用的,三台机器:192.168.9.92192.168.9.93192.168.9.94
如果在其他机器上面使用,必须修改脚本中相应有ip的地方 ,脚本在文章最后提供,在 zip 文件夹里面有完整的一份,使用的时候直接使用zip文件夹即可。

二、搭建过程

将 zip 包解压到测试环境 /home/work 目录下,解压后,执行目录中的三个脚本,顺序执行,即可安装完毕。

2.1 搭建脚本如下

2.1.1 Jstorm 集群安装过程 :

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120
#!/bin/bash

# author: xirong # date  :  2015-02-06 

##### 此脚本为在测试环境192.168.9.92~94 三台机器上面搭建 jstorm 集群的脚本,免去一步步的安装的过程,如果换其他环境,把文中的ip修改即可# 详细步骤请参考 https://github.com/alibaba/jstorm/wiki/%E5%A6%82%E4%BD%95%E5%AE%89%E8%A3%85#	# 安装目录# jstorm : /opt/jstorm-0.9.6.2, zookeeper : /opt/zookeeper-3.4.6 , java : /opt/jdk1.7.0_75 ## 注意:执行此shell脚本时候,最好使用 source jstorm_install.sh 或者 . jstorm_install.sh 强制在当前shell进程中执行,否则当前shell脚本获取不到>修改的这些环境变量值 # 		遇到sudo的命令时需要输入密码# 脚本执行前提:#		存在用户work,即存在/home/work/目录 ;#       全新机器无Java#		机器已经存在 Python 2.6,一般centos自带# # 执行完脚本后需要手动操作的步骤:# 1. zookeeper 集群需要每台机器标记自己身份,vim $dataDir/myid 将机器的标识填入,比如第一天机器即为1,二台为2,以此类推      #### 

# 在64系统里执行32位程序如果出现/lib/ld-linux.so.2: bad ELF interpreter: No such file or directory

# 解决错误Failed to set locale, defaulting to C echo "export LC_ALL=en_US.UTF-8"  >>  /etc/profile  source /etc/profile 

yum install glibc.i686echo ‘finish pre install glibc.i686‘

echo ‘start unzip all files‘#tar -zxf jstorm.tar.gz unzip jstorm.zipecho ‘finish unzip all files and start java setup‘cd jstorm_tar/tar -zxf jdk-7u75-linux-i586.tar_0.gz -C /opt/echo ‘finish unzpip jdk-7u75-linux-i586.tar_0.gz && start java envirenment settting ‘

# 配置java环境echo ‘## java configuration ‘ >> /etc/profileecho ‘JAVA_HOME=/opt/jdk1.7.0_75‘ >> /etc/profileecho ‘export PATH=$JAVA_HOME/bin:$PATH‘ >> /etc/profileecho ‘export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar‘ >> /etc/profileecho ‘export JAVA_HOME‘ >> /etc/profile

echo ‘finish java envirement setting etc/profile‘# 使配置生效. /etc/profilewhich java

## 搭建zookeeper集群 echo ‘start setup zookeeper ……………………‘tar -zxf zookeeper-3.4.6.tar.gz -C /opt/ echo ‘# zookeeper configuration ‘ >> /etc/profileecho ‘export ZOOKEEPER_HOME=/opt/zookeeper-3.4.6‘ >> /etc/profileecho ‘export PATH=$ZOOKEEPER_HOME/bin:$PATH‘ >> /etc/profileecho ‘export CLASSPATH=$ZOOKEEPER_HOME/lib‘ >> /etc/profile

mkdir -p /home/work/jstorm/zookeeper_data #cd /opt/zookeeper-3.4.6/conf/cp -f /opt/zookeeper-3.4.6/conf/zoo_sample.cfg /opt/zookeeper-3.4.6/conf/zoo_sample.cfg.bakmv /opt/zookeeper-3.4.6/conf/zoo_sample.cfg /opt/zookeeper-3.4.6/conf/zoo.cfg# 修改zookeeper数据文件的位置sed -i.bak ‘s/dataDir=\/tmp\/zookeeper/dataDir=\/home\/work\/jstorm\/zookeeper_data\//g‘ /opt/zookeeper-3.4.6/conf/zoo.cfg# 集群配置的时候需要加入三台机器的配置 ,这个就是你在搭建你自己的三台机器的ipecho ‘# zookeeper cluster mathines‘ >> /opt/zookeeper-3.4.6/conf/zoo.cfgecho ‘server.1=192.168.9.92:2888:3888‘ >> /opt/zookeeper-3.4.6/conf/zoo.cfg echo ‘server.2=192.168.9.93:2888:3888‘ >> /opt/zookeeper-3.4.6/conf/zoo.cfg echo ‘server.3=192.168.9.94:2888:3888‘ >> /opt/zookeeper-3.4.6/conf/zoo.cfg 

# dataDir目录下添加标识身份 myid(这个需要手动做)# vim $dataDir/myid 将机器的标识填入,比如第一天机器即为1,二台为2

# 使配置生效. /etc/profileecho ‘finish setup zookeeper && start setup zeromq……‘

# 安装zeromq # 解决错误 cannot link with -luuid, install uuid-devyum install uuid-devel && yum install libuuid-devel

tar -zxf zeromq-2.1.7.tar.gz cd zeromq-2.1.7./configure && make && sudo make install && sudo ldconfig cd .. 

echo ‘finish setup zeromq && start setup jzmq ……‘

# 安装jzmq tar -zxf jzmq.tar && cd jzmq  && ./autogen.sh && ./configure && make && sudo make installcd ..

# 安装 jstrom echo ‘finish setup jzmq && start setup jstorm ……‘mkdir /home/work/jstorm/jstorm_data unzip jstorm-0.9.6.2.zip -d /opt/

echo ‘export JSTORM_HOME=/opt/jstorm-0.9.6.2‘ >> ~/.bashrc echo ‘export PATH=$PATH:$JSTORM_HOME/bin‘ >> ~/.bashrc

echo ‘after configure bashrc for jstorm‘source ~/.bashrc

# 配置$JSTORM_HOME/conf/storm.yamlecho ‘start configuration storm.yaml ……‘sed -i ‘/localhost"$/‘d /opt/jstorm-0.9.6.2/conf/storm.yamlsed -i /‘storm.zookeeper.servers:/a\     - "192.168.9.94"‘ /opt/jstorm-0.9.6.2/conf/storm.yamlsed -i /‘storm.zookeeper.servers:/a\     - "192.168.9.93"‘ /opt/jstorm-0.9.6.2/conf/storm.yamlsed -i /‘storm.zookeeper.servers:/a\     - "192.168.9.92"‘ /opt/jstorm-0.9.6.2/conf/storm.yamlsed -i ‘s/%JSTORM_HOME%\/data/\/home\/work\/jstorm\/jstorm_data/g‘ /opt/jstorm-0.9.6.2/conf/storm.yamlsed -i /‘storm.zookeeper.root/a\ nimbus.host: "192.168.9.92"‘ /opt/jstorm-0.9.6.2/conf/storm.yaml

# 下面这两句只需要在安装 jstorm_ui 和提交jar节点的机器上面执行就可以了#mkdir ~/.jstorm#cp -f $JSTORM_HOME/conf/storm.yaml ~/.jstorm

echo ‘congratilations ! you have successfully install jstorm on your machine ! Enjoy it !‘

2.1.2 Jstorm_web_ui 监控搭建 :

12345678910111213141516171819202122232425262728
#!/bin/bash

# author: xirong # date  :  2015-05-11 

########## 安装 jstorm 监控 UI 页面 (只需要在一台机器上面安装即可)# 此脚本执行前需要先执行脚本 1.jstorm_cluster_install.sh#########

echo ‘start install apache-tomcat-7.0.61 ‘mkdir ~/.jstormcp -f $JSTORM_HOME/conf/storm.yaml ~/.jstorm

tar -zxf apache-tomcat-7.0.61.tar.gz  -C /opt/cd /opt/apache-tomcat-7.0.61/webappscp $JSTORM_HOME/jstorm-ui-0.9.6.2.war  ./mv ROOT ROOT.oldln -s jstorm-ui-0.9.6.2 ROOT cd ../bin./startup.sh

echo ‘congratulaions ! you have install jstorm_ui! enjoy it !‘

# 如果本机端口8080没有开放,那么需要开放端口号8080以供外面可以访问#/sbin/iptables -I INPUT -p tcp --dport 8080 -j ACCEPT#/etc/rc.d/init.d/iptables save#/etc/init.d/iptables restart

2.1.3 jstorm 集群启动 测试

12345678910111213141516171819202122232425262728293031
#!/bin/bash

# author: xirong # date  :  2015-05-11 

###### 启动 jstorm脚本 # 1. 先启动必须组件 zookeeper,启动前必须确定每台机器自己的myid文件####

# 先启动必须组件 zookeeper,启动前必须确定每台机器自己的myid文件,不明白,查看安装地方 cd /opt/zookeeper-3.4.6sh bin/zkServer.sh start 

echo ‘zookeeper has started ! please see status :‘

# leader or follower sh bin/zkServer.sh status

# 详细命令 http://www.wangyuxiong.com/archives/51725

# 启动 jstorm 服务 自动脚本 $JSTORM_HOME/logs/supervisor.log检查有无错误sh /opt/jstorm-0.9.6.2/bin/start.sh

# 只需要在nimbus机器上面执行,如果已经ok的话,就不需要了# nohup jstorm nimbus &# $JSTORM_HOME/logs/nimbus.log检查有无错误

# 停止 #sh /opt/jstorm-0.9.6.2/bin/stop.sh

监控页面如下(当然这只是官方例子,证明安装部署的ok):

2.2 安装注意

  • java环境配置建议1.7以上
  • 集群三台机器需要关闭防火墙,否则错误 “java.net.NoRouteToHostException: 没有到主机的路由
1234
[[email protected] shirdrn]# service iptables stop  Flushing firewall rules: [  OK  ]  Setting chains to policy ACCEPT: filter [  OK  ]  Unloading iptables modules: [  OK  ]

三、jstorm 常用命令

  1. 启动 nimbus “nohup jstorm nimbus & “ 查看$JSTORM_HOME/logs/nimbus.log 检查错误日志
  2. 启动 supervisor “nohup jstorm supervisor &” 查看$JSTORM_HOME/logs/supervisor.log 检查有无错误
  3. 停止 “sh $JSTORM_HOME/bin/stop.sh”

完整命令列表同storm一样,包括jar、kill、activate、deactivate、rebalance、repl、classpath、localconfvalue、remoteconfvalue、nimbus、supervisor、ui、drpc等,详细见:https://github.com/techdocscn/storm/blob/master/source/documentation/Command-line-client.md

四、zookeeper 常用命令

zk 集群搭建过程:

常用命令:

  1. 启动ZK服务: sh bin/zkServer.sh start
  2. 查看ZK服务状态: sh bin/zkServer.sh status
  3. 停止ZK服务: sh bin/zkServer.sh stop
  4. 重启ZK服务: sh bin/zkServer.sh restart
    或者连接到服务器 bin/zkCli.sh -server 127.0.0.1:2181 输入help 查看操作帮助

其它使用命令详细参考: http://www.wangyuxiong.com/archives/51725

学习资料:

Jstorm中使用zookeeper主要用于Storm集群各节点的分布式协调工作,具体功能如下:
(1)存储客户端提供的topology任务信息,nimbus负责将任务分配信息写入Zookeeper,supervisor从Zookeeper上读取任务分配信息;
(2)存储supervisor和worker的心跳(包括它们的状态),使得nimbus可以监控整个集群的状态, 从而重启一些挂掉的worker;
(3)存储整个集群的所有状态信息和配置信息。
具体目录结构参考:storm在ZooKeeper中的目录结构

五、jstorm.zip 包和脚本下载

在 zip 文件夹里面有完整的上述三个骄傲本,使用的时候直接下载zip文件夹即可,下载地址 : 百度网盘 ,密码:btcq

六、storm 学习资料

大圆那些事 http://www.cnblogs.com/panfeng412/tag/Storm/
徐明明 https://xumingming.sinaapp.com/category/storm/
常用的一些基本命令 http://my.oschina.net/infiniteSpace/blog/339193
jstorm通用介绍 http://luoshi0801.iteye.com/blog/2168848
简单之美个人博客 http://shiyanjun.cn/archives/1019.html

jstorm深入分析:http://hexiaoqiao.sinaapp.com/2014/06/jstorm%E4%BB%8B%E7%BB%8D/
介绍nimbus :http://hexiaoqiao.sinaapp.com/2014/06/jstorm%E4%B9%8Bnimbus%E7%AE%80%E4%BB%8B/
介绍 superviser :http://hexiaoqiao.sinaapp.com/2014/07/jstorm%E4%B9%8Bsupervisor%E7%AE%80%E4%BB%8B/
storm 入门教程(量子恒道官方博客) http://blog.linezing.com/?cat=92

原文http://www.ixirong.com/2015/05/12/how-to-install-jstorm-cluster/

时间: 10-13

分布式实时日志系统(一)环境搭建之 Jstorm 集群搭建过程/Jstorm集群一键安装部署的相关文章

分布式实时日志系统(四) 环境搭建之centos 6.4下hbase 1.0.1 分布式集群搭建

一.hbase简介 HBase是一个开源的非关系型分布式数据库(NoSQL),它参考了谷歌的BigTable建模,实现的编程语言为 Java.它是Apache软件基金会的Hadoop项目的一部分,运行于HDFS文件系统之上,为 Hadoop 提供类似于BigTable 规模的服务.因此,它可以容错地存储海量稀疏的数据.HBase在列上实现了BigTable论文提到的压缩算法.内存操作和布隆过滤器.HBase的表能够作为MapReduce任务的输入和输出,可以通过Java API来存取数据,也可以

分布式实时日志系统(二) 环境搭建之 flume 集群搭建/flume ng资料

最近公司业务数据量越来越大,以前的基于消息队列的日志系统越来越难以满足目前的业务量,表现为消息积压,日志延迟,日志存储日期过短,所以,我们开始着手要重新设计这块,业界已经有了比较成熟的流程,即基于流式处理,采用 flume 收集日志,发送到 kafka 队列做缓冲,storm 分布式实时框架进行消费处理,短期数据落地到 hbase.mongo中,长期数据进入 hadoop 中存储. 接下来打算将这其间所遇到的问题.学习到的知识记录整理下,作为备忘,作为分享,带给需要的人. 学习flume ng的

Python实现一键安装部署LNMP环境

最近一直在学Python,东西比较多,时间持续的也比较长,为了能够学以致用,想到了原来写过的shell一键安装部署LNMP脚本,既然shell能写,Python也一定能写,就用学到的知识写了下面这个版本,这可能并不是最优版本,等学到更多东西的时候再进行优化升级! 环境介绍: Python 2.6.6 Centos 6.5 nginx 1.10.1 mysql 5.6.34 php 5.3.3 代码如下: #!/bin/env python import os import sys def ent

Android系统编译环境初始化时Product产品的import-nodes过程

从运行make -f config,mk文件開始,config,mk作为当前的makefile文件.将会被make解析,一般make解析Makefile文件流程首先是载入当中include的各种其它mk文件,同一时候在载入的过程中会初始化自己定义的变量,相似于预编译,在完毕各种初始化后,确定目标以及依赖关系,终于运行目标输出动作. 在config.mk中存在多个须要include的mk文件.这里关注product相关的envsteup.mk 在envsteup.mk从又会include prod

教你一步搭建Flume分布式日志系统

在前篇几十条业务线日志系统如何收集处理?中已经介绍了Flume的众多应用场景,那此篇中先介绍如何搭建单机版日志系统. 环境 CentOS7.0 Java1.8 下载 官网下载 http://flume.apache.org/download.html 当前最新版  apache-flume-1.7.0-bin.tar.gz 下载后上传到CentOS中的/usr/local/ 文件夹中,并解压到当前文件中重命名为flume170    /usr/local/flume170 tar -zxvf a

基于zipkin分布式链路追踪系统预研第一篇

分布式服务追踪系统起源于Google的论文“Dapper, a Large-Scale Distributed Systems Tracing Infrastructure”(译文可参考此处),Twitter的zipkin是基于此论文上线较早的分布式链路追踪系统了,而且由于开源快速被各社区所研究,也诞生了很多的版本. 在这里也是对zipkin进行研究,先贴出Twitter zipkin结构图. 结构比较简单,大概流程为: Trace数据的收集至Scribe(Facebook开源的日志传输通路)或

zipkin分布式链路追踪系统

基于zipkin分布式链路追踪系统预研第一篇 分布式服务追踪系统起源于Google的论文“Dapper, a Large-Scale Distributed Systems Tracing Infrastructure”(译文可参考此处),Twitter的zipkin是基于此论文上线较早的分布式链路追踪系统了,而且由于开源快速被各社区所研究,也诞生了很多的版本. 在这里也是对zipkin进行研究,先贴出Twitter zipkin结构图. 结构比较简单,大概流程为: Trace数据的收集至Scr

Cobbler全自动批量安装部署Linux系统

前言:这篇文章是系统运维www.osyunwei.com的作品,我只是根据实践了一下,出于对原作者的尊重附原文链接如下: 原文链接:http://www.osyunwei.com/archives/7606.html 根据文章的说明是可以完成所属功能的,不过原文章有点小问题,在本文中我已经修改过了,仅供大家参考,有问题大家交流,E-mail:[email protected] 安装之前的一点说明 Cobbler服务器系统:CentOS5.10 64位 IP地址:192.168.21.128 需要

[Big Data - ELK] ELK(ElasticSearch, Logstash, Kibana)搭建实时日志分析平台

ELK平台介绍 在搜索ELK资料的时候,发现这篇文章比较好,于是摘抄一小段: 以下内容来自: http://baidu.blog.51cto.com/71938/1676798 日志主要包括系统日志.应用程序日志和安全日志.系统运维和开发人员可以通过日志了解服务器软硬件信息.检查配置过程中的错误及错误发生的原因.经常分析日志可以了解服务器的负荷,性能安全性,从而及时采取措施纠正错误. 通常,日志被分散的储存不同的设备上.如果你管理数十上百台服务器,你还在使用依次登录每台机器的传统方法查阅日志.这