Zookeeper+Storm集群搭建

基础集群环境参考上一篇文章:集群基础环境搭建

Storm集群架构

Storm是Master-Slaves 主从架构(与hadoop等一致)。主节点是Nimbus,从节点是Supervisor。主节点和从节点借助Zookeeper集群来沟通。

Storm集群的各个组件本身都是无状态的(不保存状态信息),例如nimbus、supervisor、worker等,所有的状态信息都保存在zookeeper集群中。这样的话,集群的可靠性非常高,某个Nimbus(或者Supervisor)宕机后,只需要重启一个Nimbus节点(或者Supervisor节点),再从Zookeeper集群中读取状态信息就可以了。

1.Nimbus主节点:

1.监控从节点Supervisor的状态:Supervisor启动和运行过程中会定时将心跳状态信息发送到Zookeeper上,也就是在Zookeeper集群上创建Znode节点,Nimbus监听该Znode节点来监控Supervisor节点的状态。
2.接收客户端任务的提交Topology
3.进行任务代码的分发、任务Task的分配协调,异常任务的重新分配。

2.Supervisor从节点:

Supervisor是真正的工作节点。Supervisor接收到任务分配后,启动Worker节点(一个或者多个)。
1.获取任务:Nimbus分配任务的时候,将任务信息发送到Zookeeper上,Supervisor监听相应的Znode节点信息,拿到分配给他的任务。
2.获取到任务后,启动相应的Worker进程,Worker进程数根据具体的Topology来决定的,之后监控Worker进程状态(Worker进程启动好之后,在运行过程中也会将心跳状态信息发送到zookeeper上,supervisor也是通过监听znode节点信息来监控worker进程的)

3.Worker进程(JVM):

Worker进程不是常驻进程(Nimbus和Supervisor是Storm框架的常驻进程),并且跟具体的Topology相关。Worker进程上具体运行相应的Topology的Task任务。

Worker进程启动Executor线程。Task运行时真正地跑在线程上,Executor线程真正执行Task。

4.Zookeeper集群:

用来存储各节点、各组件的状态信息。

Zookeeper集群负责Nimbus节点和Supervior节点之间的通信,监控各个节点之间的状态。比如通常我们提交任务的时候是在Nimbus节点上执行的,Nimbus节点通过zk集群将任务分发下去,而Supervisor是真正执行任务的地方。Nimbus节点通过zk集群监控各个Supervisor节点的状态,当某个Supervisor节点出现故障的时候,Nimbus节点就会通过zk集群将那个Supervisor节点上的任务重新分发,在其他Supervisor节点上执行。这就意味着Storm集群也是高可用集群,如果Nimbus节点出现故障的时候,整个任务并不会停止,但是任务的管理会出现影响,通常这种情况下我们只需要将Nimbus节点恢复就可以了。Nimbus节点不支持高可用,这也是Storm目前面临的问题之一。不过一般情况下,Nimbus节点的压力不大,通常不会出现问题。

一般情况下,Zookeeper集群的压力并不大,一般只需要部署3台就够了。Zookeeper集群在Storm集群中逻辑上是独立的,但在实际部署的时候,一般会将zk节点部署在Nimbus节点或Supervisor节点上。

5.topology任务执行整体流程:

Client端向Storm集群提交Topology程序,Nimbus接收到Topology程序后进行任务分配,将执行代码以及相关的配置信息分发到各个Supervisor上(注意,这里不通过zookeeper集群。通过Thrift直接分发到Supervisor节点。)。将任务分配信息发送到Zookeeper集群上,Supervisor从Zookeeper上获取相应的任务,根据任务的要求启动Worker进程,Worker进程启动后,Worker进程会启动一些Executor线程(也是根据任务的要求启动)。Executor线程才是最终真正执行Task逻辑的组件。

Java/Python安装

  1. 手动下载jdk8:
  2. 安装:
sudo mkdir /usr/lib/jvm
sudo tar -zxvf jdk-8u191-linux-x64.tar.gz -C /usr/lib/jvm
sudo vi /etc/profile
source  /etc/profile
  1. 设置环境变量参数如下
#set oracle jdk environment
export JAVA_HOME=/usr/lib/jvm/jdk1.8.0_191  ## 这里要注意目录要换成自己解压的jdk 目录
export JRE_HOME=${JAVA_HOME}/jre  
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib  
export PATH=${JAVA_HOME}/bin:$PATH  
  1. 系统注册此JDK
sudo update-alternatives --install /usr/bin/java java /usr/lib/jvm/jdk1.8.0_191/bin/java 300
  1. 安装python
sudo apt install python
sudo apt install python-pip

## Zookeeper集群安装

  1. 下载安装包
wget https://mirrors.tuna.tsinghua.edu.cn/apache/zookeeper/zookeeper-3.4.13/zookeeper-3.4.13.tar.gz
tar -zxvf zookeeper-3.4.13.tar.gz -C /opt/hadoop/
  1. 修改配置文件
cd /opt/hadoop//zookeeper-3.4.13/conf
cp zoo_sample.cfg zoo.cfg
vi zoo.cfg

修改存储快照文件snapshot的目录:

dataDir=/opt/hadoop/zookeeper-3.4.13/tmp

在最后添加(这里server.x中的x是一个数字,与myid文件中的id是一致的):

server.1=node1:2888:3888
server.2=node2:2888:3888
server.3=node3:2888:3888

创建一个tmp文件夹,存放myid:

mkdir /opt/hadoop/zookeeper-3.4.13/tmp
echo 1 > /opt/hadoop/zookeeper-3.4.13/tmp/myid
  1. 设置jvm环境变量
    在/opt/hadoop/zookeeper-3.4.13/conf创建java.env文件,设置java heap size。(4G内存设置最大为3G)
export JVMFLAGS="-Xms1024m -Xmx3072m $JVMFLAGS"
  1. 分发安装包
    将配置好的zookeeper拷贝到其它节点
scp -r zookeeper-3.4.13/ node2:/opt/hadoop/
scp -r zookeeper-3.4.13/ node3:/opt/hadoop/

修改node2和node3的myid分别为2和3

  1. 启动集群服务
    对每台主机分别启动:
./zkServer.sh start

查看启动状态:

./zkServer.sh status
  1. 注意事项
  • 服务监控:zookeeper服务容易异常退出,因此建议使用daemontools工具来保持运行。
  • 定时压缩日志:启动定时cron任务对zookeeper数据和日志进行定时压缩,避免把存储空间耗尽。
  • 具体参考维护说明:ZooKeeper Administrator's Guide

Storm集群安装

  1. 下载安装包:
wget http://mirror.bit.edu.cn/apache/storm/apache-storm-1.2.2/apache-storm-1.2.2.tar.gz
sudo tar -zxvf apache-storm-1.2.2.tar.gz -C /opt/hadoop/
  1. 配置storm
cd /opt/hadoop/apache-storm-1.2.2
sudo vi conf/storm.yaml
  • 配置zookeeper地址
storm.zookeeper.servers:
     - "node1"
     - "node2"
     - "node3"
  • storm.local.dir: 增加一行,保存一些状态
storm.local.dir: "/data/storm/status"
storm.log.dir: "/data/storm/logs"
  • 配置nimbus.seeds:用于配置主控节点的地址,可以配置多个。
nimbus.seeds: ["node1"]
  • 配置supervisor.slots.ports: 配置工作节点上的进程端口。你配置一个端口,意味着工作节点上启动一个worker,在实际的生产环境中,我们需要根据实际的物理配置以及每个节点上的负载情况来配置这个端口的数量。在这里每个节点我象征性的配置4个端口。
supervisor.slots.ports: 
    - 6700
    - 6701
    - 6702
    - 6703
  • 将Storm分发到另外两台supervisor主机上
sudo scp -r apache-storm-1.2.2/ node2:/opt/hadoop/
sudo scp -r apache-storm-1.2.2/ node3:/opt/hadoop/
  • 对于两台supervisor node,我们额外开启JMX支持,在配置文件中加入如下配置: 9998就是用于通过JMX收集supervisior JVM指标的端口。
supervisor.childopts: -verbose:gc -XX:+PrintGCTimeStamps -XX:+PrintGCDetails -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.port=9998
  1. 配置环境变量
    在/etc/profile加入如下配置:
export STORM_HOME=/opt/hadoop/apache-storm-1.2.2
export PATH=$STORM_HOME/bin:$PATH
  1. 启动storm
    node1启动nimbus和storm ui:
nohup storm ui >/dev/null 2>&1 &
nohup storm nimbus >/dev/null 2>&1 &

node2和node3主机启动Supervisor节点

nohup storm supervisor >/dev/null 2>&1 &
  1. 打开远程管理web查看Storm安装是否成功: http://192.168.110.222:8080
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,294评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,493评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,790评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,595评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,718评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,906评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,053评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,797评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,250评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,570评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,711评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,388评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,018评论 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,796评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,023评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,461评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,595评论 2 350

推荐阅读更多精彩内容