zoukankan      html  css  js  c++  java
  • 分布式实时日志系统(一)环境搭建之 Jstorm 集群搭建过程/Jstorm集群一键安装部署

     

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

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

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

    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 集群安装过程 :

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    #!/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.i686
    echo 'finish pre install glibc.i686'

    echo 'start unzip all files'
    #tar -zxf jstorm.tar.gz
    unzip jstorm.zip
    echo '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/profile
    echo 'JAVA_HOME=/opt/jdk1.7.0_75' >> /etc/profile
    echo 'export PATH=$JAVA_HOME/bin:$PATH' >> /etc/profile
    echo 'export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar' >> /etc/profile
    echo 'export JAVA_HOME' >> /etc/profile

    echo 'finish java envirement setting etc/profile'
    # 使配置生效
    . /etc/profile
    which java

    ## 搭建zookeeper集群
    echo 'start setup zookeeper ……………………'
    tar -zxf zookeeper-3.4.6.tar.gz -C /opt/
    echo '# zookeeper configuration ' >> /etc/profile
    echo 'export ZOOKEEPER_HOME=/opt/zookeeper-3.4.6' >> /etc/profile
    echo 'export PATH=$ZOOKEEPER_HOME/bin:$PATH' >> /etc/profile
    echo '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.bak
    mv /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
    # 集群配置的时候需要加入三台机器的配置 ,这个就是你在搭建你自己的三台机器的ip
    echo '# zookeeper cluster mathines' >> /opt/zookeeper-3.4.6/conf/zoo.cfg
    echo '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/profile
    echo 'finish setup zookeeper && start setup zeromq……'

    # 安装zeromq
    # 解决错误 cannot link with -luuid, install uuid-dev
    yum 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 install
    cd ..

    # 安装 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.yaml
    echo 'start configuration storm.yaml ……'
    sed -i '/localhost"$/'d /opt/jstorm-0.9.6.2/conf/storm.yaml
    sed -i /'storm.zookeeper.servers:/a - "192.168.9.94"' /opt/jstorm-0.9.6.2/conf/storm.yaml
    sed -i /'storm.zookeeper.servers:/a - "192.168.9.93"' /opt/jstorm-0.9.6.2/conf/storm.yaml
    sed -i /'storm.zookeeper.servers:/a - "192.168.9.92"' /opt/jstorm-0.9.6.2/conf/storm.yaml
    sed -i 's/%JSTORM_HOME%/data//home/work/jstorm/jstorm_data/g' /opt/jstorm-0.9.6.2/conf/storm.yaml
    sed -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 监控搭建 :

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    #!/bin/bash

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

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

    echo 'start install apache-tomcat-7.0.61 '
    mkdir ~/.jstorm
    cp -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/webapps
    cp $JSTORM_HOME/jstorm-ui-0.9.6.2.war ./
    mv ROOT ROOT.old
    ln -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 集群启动 测试

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    #!/bin/bash

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

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

    # 先启动必须组件 zookeeper,启动前必须确定每台机器自己的myid文件,不明白,查看安装地方
    cd /opt/zookeeper-3.4.6
    sh 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):
    Jstorm 集群首页

    topology 分析页面

    2.2 安装注意

    • java环境配置建议1.7以上
    • 集群三台机器需要关闭防火墙,否则错误 “java.net.NoRouteToHostException: 没有到主机的路由
    1
    2
    3
    4
    [root@master 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/

  • 相关阅读:
    数据类型
    springboot中get post put delete 请求
    图解SQL的inner join、left join、right join、full outer join、union、union all的区别
    【转】MyBatis之级联——一对一关系
    【转】浏览器同源政策及其规避方法(2)
    【转】浏览器同源政策及其规避方法(1)
    Spring Boot配置文件详解
    【BUG】Spring Mvc使用Jackson进行json转对象时,遇到的字符串转日期的异常处理(JSON parse error: Can not deserialize value of type java.util.Date from String[])
    【转】SpringBoot Mybatis 读取配置文件
    MySQL
  • 原文地址:https://www.cnblogs.com/yudar/p/4883201.html
Copyright © 2011-2022 走看看