- 前言
在Hadoop 2.0之前,每个HDFS集群都有一个NameNode,如果该机器或进程不可用,将导致整个HDFS集群不可用.解决办法:只能手动重新启动NameNode,而在起来之前是不能被访问的
HDFS高可用允许在一个集群上运行两个NameNode,这样在机器崩溃情况下,可以快速的故障转移到新的NameNode(对外是无感知的)
- 简单概述
- 单点HDFS
服务挂了,不能对外提供服务 - HA HDFS
两个NN(namenode)节点一个挂了,另外一个从standby切换到active状态,实时对外提供服务(读写)
- 架构
- 架构图阐述
- 如图,在HA HDFS集群中部署两台NameNode节点,正常情况下一个active(活动状态)对外提供服务,另一个standby(备用状态)当备用,实时同步状态信息;当active NameNode节点挂掉之后,standby Node切换到Active状态,开始对外提供服务
- NameNode active节点和standby 节点是通过JounalNode集群实时同步数据的.JounalNode是一个日志集群.active 的NameNode里的所有操作都会写入editlog日志,然后同步到JounlNode中,然后standby NameNode实时读取JounalNode里的操作日志,并同步到自己的节点中,使自己的元数据和active NameNode保持一致.这样,当active挂掉之后,standby节点可以理解切换成active状态,并对外提供服
JounalNode一般是2n+1台(一般3-5台) - DataNode节点在Ha架构中,会向NameNode的两个节点发送心跳和block 报告
- zkfc(zookeperFailoverController)通过选举来指定那个NameNode为active状态.它是单线程,负者监控NameNode的状态.NameNode会定期想zookeeper发送心跳,使自己被选择,当其中一个被zk选择为主及诶单的时候,zkfc进程通过RPC调用是的被选择的NameNode状态切换为active,对外提供服务
- 架构简述
|名词 |介绍 | 作用
|–|--|–
|NN(active)| 活动的NameNode |1.接收客户端的请求;2.元数据管理;3.操作日志写入edit log,同时也写入JN;4.接收DN的心跳和block report
|NN(standby) |备用的NameNode节点|1.接收JN集群日志,先读取后操作(log重演),保证和active NameNode 元数据保持一致|
|DN|DataNode|1.负责数据存储2.定时给NN(active和standby)报告健康状态