HDFS高可用机制HA
hadoop中NameNode非常重要,影响整个集群
在实际应用中,一般有两个NameNode,一个处于Active状态(负责所有客户端的操作),一个Standby状态(等待Active挂掉,实现快速故障切换(如果需要))
他们的元数据肯定要同步一致,Zookeeper实现
其中的组件:
ZKFailoverController:基于Zookeeper的故障转移控制器,负责NameNode的主备切换
通过监听NameNode健康状态,当Active出现异常会通过Zookeeper进行一次新的选举,完成standby切换
HealthMonitor:周期性调用NameNode的HAServiceProtocol RPC接口(monitor和getServiceStatus)
监控NameNode的监控状态并向ZKF反馈
ActiveStandbyElector:接收ZKFC的选举请求,通过zk自动完成主备选举,选举完成后调ZKF的主备切换方法对NameNode进行Active与Standby转态切换
DataNode:NameNode的数据块信息通过DataNode主动向Active NameNode和Standby NameNode上报
共享文件存储系统:NameNode负责向这个系统(由JournalNode组成)写日志edits文件,StandbyNameNode负责读保持同步
我们这里搭建的是非高可用的,实际生成环境中要高可用
高可用搭建方法这里不多介绍
HDFS联邦机制Federation
处理NameNode内存不够的问题,当集群达到一定规模后,内存可能达到上百G
进行横向扩展就是联邦机制
就是允许有多个NameNode,意味着有多个namespace
不同的DataNode归不同的namespace管,用户感觉不出来其中的切换
只解决了HDFS Federation问题,没解决单点故障问题,一般集群很大时一般采用:HA+Federation部署方案,也就是每个联合的namespace都是HA(高可用)的