HDFS高可用集群原理及搭建
如何实现HDFS高可用?
HDFS的高可用是HDFS持续对客户端提供读、写服务的能力,因为客户端对HDFS的读写操作之前要访问namenode服务器,客户端需要从namenode端获取元数据之后才能继续进行读、写。HDFS的高可用的关键在于nodename元数据持续可用,之前的完全分布式中的secondaryNamenode是把namenode的fsimage和edit log做定期融合,融合后传给namenode, 以确保备份到的元数据是最新的,这一点类似于做了一个元数据的快照。在高可用中存在两个namenode,高可用完全分布主要包括下图所示部分:
Namenode节点
集群中存在2个namenode,二者之中只能有一个namenode处于活跃状态(active),另一个是待命状态(standby),只有active的NN节点才能对外提供读写HDFS服务,也只有active态的namenode才能向JN写入编辑日志;standby状态的namenode负责从JN小集群中拷贝数据到本地。另外,各个datanode也要同时向两个名称节点报告状态(心跳信息、块信息)。
Journal Node集群(简称JN)
同时在高可用完全分布式配置下,edit log不再存放在名称节点,而是存放在一个共享存储的地方,这个共享存储由奇数个J4组成,一般是3个节点(JN小集群), 每个JN专门用于存放来自namenode的编辑日志,编辑日志由活跃状态的名称节点写入JN小集群。2个namenode与3个JN构成的组保持通信,活跃的名称节点负责往JN集群写入编辑日志,待命的名称节点负责观察JN集群中的编辑日志,并且把日志拉取到待命节点,再加上两个namenode各自的fsimage镜像文件,这样一来就能确保两个namenode的元数据保持同步。
主备切换控制器 (ZKFailoverController 简称ZKFC)
ZKFC作为独立的进程运行,对 NameNode 的主备切换进行总体控制。ZKFC 能及时检测到 NameNode 的健康状况,在主 NameNode 故障时借助 Zookeepe