HDFS的HA

为什么要用集群

在企业中主要使用集群

在学习的过程中使用伪分布式即可,就是单点

HDFS中的

NN

SNN

DN

YARN 的

RM 老大

NM

每个组件只有一个即可

如果nn挂了就不能再继续对外提供服务,例如客户端请求的读写,put get那些。

为了解决这个问题,企业一般都会准备两台nn,对外提供服务的只有一台,处于active状态,另一台是standby状态,进行实时备份随时准备从standby状态切换到active状态

同时,拥有两台nn基本上就不需要snn了,因为nn会进行实时备份,而snn只是进行合并备份的工作,一个小时checkpoint。如果用snn只能恢复checkpoint点的数据,如果中途挂掉,那中间那半小时的数据就会丢失。

主从架构 master-slave
比如hdfs读写请求都是先NN节点;
但是:hbase 读写请求不是经过老大master

命名空间:当我们有两台nn的时候分别为nn1和nn2,我们执行HDFS命令和我们只有一台nn进程有什么区别呢?

hdfs dfs -ls /  这是我们在伪分布里执行的HDFS命令。当我们执行这个命令的时候,就会去core.site.xml和hdfs.site.xml两个配置文件里去寻找配置的信息,以便于找到服务器执行相应的命令。

但是当我们有两个nn进程的时候上边的那个命令就不能这样执行了,要加上你要执行命令的服务器名称等等

hdfs dfs -ls hdfs://ip:9000 / 这两个nn分别对应着两个ip,这里的ip是谁就通过哪个执行命令。但是在shell脚本或者代码之中,如果active的nn挂了,我们再执行命令的时候不可能再改代码改脚本,所以这里引出一个命名空间的概念,我们的脚本或者代码先连接命名空间,命名空间再去尝试连接active的nn,这个过程我们是无感知的。

命名空间的工作流程,命名空间从客户端接到命令以后,会先尝试连接其中一台nn,这里我们就假设先连接nn2,发现nn2是standby状态,然后再去尝试连接nn1,发现是active状态,这时候nn1会接受请求并执行命令。

- 流程
- 1、客户端根据命名空间发起请求
- 2、命名空间按照配置顺序寻找active节点
- 3、NN1记录editlog并写入JN集群
- 4、NN2节点实时读取JN集群的数据,并进行重演

- 重点
- 1、DN节点会向所有的NN节点汇报心跳状况
- 2、ZKFC是单独的进程

HDFA的 HA的架构部署

环境准备  3台机器

hadoop001:ZK NN ZKFC JN DN

hadoop002:ZK NN ZKFC JN DN

hadoop003:ZK JN DN

每个组件的作用

 NN:fsimage editlog(读写请求记录)

ZK(2n+1 奇数台):负责选举,决定active和standby在哪台节点

ZKFC(zookeeperFailOverControl):节点真正挂掉,负责将standy状态的节点切换到active状态

JN:同步editlog的进程

ZK是一个单独的进程集群

以下是企业ZK集群部署台数参考

20台节点: 5台
20~100台节点: 7/9/11台
>100台节点: 11台
但是: 不是说zk节点越多越好,因为zk节点越多做出选举的决策的时间就越长。

几百台节点, zk部署的机器就它一个进程,这是为了提高选举效率

HA出现的主要原因就是为了解决单点问题,监控状态自动备援

通过jn共享状态

ZKFC

通过ZKFC切换nn的syandby状态到active状态

ZKFC是一个单独的进程

向ZK集群定期发送心跳,使得自己可以被选举

监控NN的健康状态

当自己被选为active的时候,ZKFC通过RPC协议调用使standby的节点切换为active状态,对外提供服务。这个过程是无感知的。

DN

同时向NN1和NN2发送心跳和块报告

active的NN:

操作记录写到自己的editlog

同时把editlog里的内容写到JN集群里

接收DN的心跳和块报告

standby的NN

接收JN的集群日志

显示读取执行log操作(重演),使得自己的元数据和active的nn的数据保持一致

也要接收DN的心跳和块报告。

猜你喜欢

转载自www.cnblogs.com/xuziyu/p/10658323.html