HDFS HA架构

一、HDFS的HA架构
官方站点:http://hadoop.apache.org/docs/stable/hadoop-project-dist/hadoop-hdfs/HDFSHighAvailabilityWithQJM.html

1、HA具备的作用
HA指的是:HA(High Available),高可用性集群,保证业务连续性,实现业务不中断
一般有两个或两个以上的节点,且分为活动节点及备用节点。

2、HA是怎么处理运作的
HA是使用QJM(Quorum Journal Manager)处理的 ,所谓的HA是nn做HA

如果做集群至少是需要三台机器
ZK(ZooKeeper) 可以将节点专门选为活动节点。如果当前活动的NameNode崩溃,则另一个节点可能在ZooKeeper中采用特殊的独占锁,指示它应该成为下一个活动的。
ZKFC(ZKFailoverController) 监视和管理NameNode的状态
JN(JournalNode)日志集群

例如:
ruozedata001: ZK NN zkfc jn DN
ruozedata002: ZK NN zkfc jn DN
ruozedata003: ZK jn DN

如果将三台机器的DN放在一台机器上去启动,是没必要不现实的 ,利用阿里云集群去处理
如果做成HA的话,HDFS的三个进程中 nn snn dn,snn将变为standby随时对外提供服务

3、通常集群HA部署需要的机器数
JN:在行业中至少需要三台 就是2n+1
zk:也需要2n+1
<=20个节点,zk通常5台就足够了,3台也可以
20~100多台的, 通常是7/9/11>100 通常建议是11台
如果>100 通常建议是11台

关于zk部署的注意事项一:
由于ZooKeeper本身具有轻量级资源要求,因此可以在与HDFS NameNode和备用节点相同的硬件上并置ZooKeeper节点。
但是生产生zk往往会和其他进程部署在同一个机器上,这是一个误区
如果机器比较少,就把zk进程部署到nn/dn上面进行混合装
但是zk是很重要的,如果集群多,购买和划分集群的时候,需要买物理机的时候,可以划分一些配置少一点的,比如说,内存只有48g,core只有8个core这种小轻量的配置,不要统一都是256G内存的服务器,用轻量级的机器专门去部署zk

关于zk注意事项二:
1.做HA的时候nn1的active状态的nn挂了,但是standby应当能够选举zk为active状态,如果zk负载比较重,比较繁忙,选举不出来,所以建议单独部署,包括yarn也是
如果hdfs无法切,nn切不过来,stady切不出active状态,如果机器有的话需要将zk单独切出来
2.不建议zk部署的越来越多,如果越来越多,zk是做选举的,就是说谁做active,谁做standby,机器很多的时候会进行投票选举,投票时间越长对外提供服务的时候是会有问题的
所以zk不是越多越好

4、hdfs ha架构流程
HA使用active NN, standby NN两个节点解决单点问题。两个NN节点通过JN集群,
共享状态,通过ZKFC选举active,监控状态,自动备援。
DN会同时向两个NN节点发送心跳

在生产上的问题:结果双写、数据同步双写
例如:spark是写到hbase(所有的) + es(保留时间对外 2个月数据 )
也就是说计算结果会写两份一份是先写到es,然后载写到hbase,es根据公司情况定,如果查询3个月则保留3个月数据
es查询数据是很快的,如果查询的数据是2个月的则从es中查询,如果是更长时间的则从hbase中查询

数据同步双写 A线(延迟了 半小时) B线(没有延迟 ) 电商节假日 618,日常B线是关闭的

hdfs ha架构具体图示:
HDFS HA架构_第1张图片
active nn:
接收client的rpc请求并处理,同时自己editlog写一份,也向JN的共享存储上的editlog写一份。
也同时接收DN的block report,block location updates 和 heartbeat

standby nn:
同样会接受到从JN的editlog上读取并执行这些log操作,使自己的NN的元数据和activenn的元数据是同步的,
使用说standby是active nn的一个热备。一旦切换为active状态,就能够立即马上对外提供NN角色的服务。
也同时接收DN的block report,block location updates 和 heartbeat

jn:
用于active nn,standby nn的同步数据,本身由一组的JN节点组成的集群,奇数,3台(CDH),是支持Paxos协议。
保证高可用。

ZKFC:
监控NN的健康状态
向ZK集群定期发送心跳 ,让自己被选举,当自己被ZK选举为主时,zkfc进程通过rpc调用让nn转换为active状态

你可能感兴趣的:(HDFS HA架构)