一、strom原理
- 架构分类
①主从架构:简单、高效,但存在单节点故障。(HDFS/yum/storm/Hbase/spack/flink)
②对称架构:复杂、效率低,但无单节点故障,更可靠。(zookeeper/kafka等集群都会选举主)
2.storm 组件
①Nimbus
-
接收客户端topo代码,拆分成多个task,将task信息存入zk;
-
将task分配给Supervisor,将task与Supervisor之间的映射关系写入zk;
-
故障监控(主要监控Supervisor执行任务的情况)。
②Supervisor -
从Nimbus目录上获取代码,从zk上读取Nimbus分配给它的task;
-
启动工作进程work执行任务;
-
监控运行的工作进程work。
③work -
从zk上读取分配的task,并计算出task结果后都需要向哪些work提供自己的计算结果;
-
启动一个或者多个Excutor线程执行任务task。
④zk -
Nimbus与Supervisor之间的通信(分配任务和心跳监控);
-
Supervisor与work之间的通信(分配任务和心跳监控);
-
实现Nimbus的HA。
二、zk简介
zk是一个开源的分布式协调服务框架。实现各机器服务之间的通信中转。
zk核心功能:
1.文件系统
①/目录先下有许多子目录,每个目录都是一个znode节点。
②znode节点可以直接存储数据。
③每个znode节点都有类型(持久化、顺序持久化、临时、顺序临时)。
2.通知机制
①客户端监听关心的znode节点。
②znode节点有变化(数据改变/删除/子目录添加或删除)时,通知客户端。
三、zk安装配置
zk官网:http://zookeeper.apache.org/
1.从官网下载tar.gz包
2.使用命令 tar -zvxf zookeeper-3.4.5.tar.gz -C /指定安装目录
3.cd conf 目录下 执行 mv zoo_sample.cfg zoo.cfg
配置内容:
①tickTime=2000 是zk集群各节点之间健康检查的心跳时间(单位ms)后面的多数超时时间设置都以其作为基准。
②initLimit=10 是选举leader时最长能忍受多少个心跳时间间隔数,即初始化时可忍受10×2000 = 20000ms 内集群zk节点之间无通讯。
③syncLimit=5 是Leader 与 Follower之间数据同步时,所能忍受的心跳时间间隔数,即同步时间超过5×2000=10000ms 则数据同步失败。
④dataDir=/tmp/zk/data 用于指定存放zk数据的目录(如果目录不存在则需要创建)
⑤dataLogDir=/tmp/zk/log 用于指定存放zk日志的目录(如果目录不存在则需要创建)
⑥clientPort=2181 客户端访问zk的端口号(默认是2181)
4. vi zoo.cfg 增加配置项
server.1=101.181.97.1:2888:3888
server.2=101.181.97.2:2888:3888
server.3=101.181.97.3:2888:3888
其中server后的数字为机器编号(每个编号必须在集群内唯一)(与每台机器上的myid文件中的数字保持一致),等号后即可以是ip地址也可以是主机名称,2888端口用于数据同步,3888端口用于leader选举。
以上所增项需要将zk集群上的每台机器的信息记录到zoo.cfg文件中。
5.在 dataDir 所指定的目录下创建myid文件,vi myid 输入 1(与第4步中的ip地址对应的id号),保存即可。
6.将整个zk安装目录,通过scp命令拷贝到其他节点,如:
scp -r /本机zk安装目录 root@目标机器ip:/目标机器存放目录
7.注意:修改最后拷贝到其它机器上的myid文件中的数值。
8./bin sh zkServer.sh start 启动服务
sh zkServer.sh status 查看服务状态
sh zkCli.sh -server ip1:2181,ip2:2181,ip3:2181 连接查看zk集群信息
备注:如果是通过主机名称配置
①cat /etc/sysconfig/network 中查看
HOSTNAME=主机名称
②cat /etc/hosts 中查看 ip与主机名之间的映射关系
ip1 主机名称1
ip2 主机名称2
ip3 主机名称3
③有时还需要配置/etc/sysconfig/iptables文件
在/etc/sysconfig/iptables中加入:
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 2181 –j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 2888 –j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 3888 –j ACCEPT
执行命令:
service iptables stop service iptables start