Hadoop集群 HDFS HA
1.我们为什么使用hadoop集群
一般在生产中,机器出现故障是难以避免的,那么如果nn节点宕机了,这个时候就不能对外提供服务
当时如果我们采用hadoop集群,那么一个nn节点挂了,我们另外的一个nn节点就会从standby切换到active状态,对外去提供服务
2.HDFS HA
Hadoop NameNode 高可用 (High Availability) ,也就是说在我们的生产中,一个挂了另外一个还能够继续使用,继续提供服务
HDFS NameNode 高可用整体架构
从上图中,我们可以看出 NameNode 的高可用架构主要分为下面几个部分:
Active NameNode 和 Standby NameNode:两台 NameNode 形成互备,一台处于 Active 状态,为主 NameNode,另外一台处于 Standby 状态,为备 NameNode,只有主 NameNode 才能对外提供读写服务。
主备切换控制器 ZKFailoverController:ZKFailoverController 作为独立的进程运行,对 NameNode 的主备切换进行总体控制。ZKFailoverController 能及时检测到 NameNode 的健康状况,在主 NameNode 故障时借助 Zookeeper 实现自动的主备选举和切换,当然 NameNode 目前也支持不依赖于 Zookeeper 的手动主备切换。
Zookeeper 集群:为主备切换控制器提供主备选举支持。
JounalNode:共享存储系统是实现 NameNode 的高可用最为关键的部分,共享存储系统保存了 NameNode 在运行过程中所产生的 HDFS 的元数据。主 NameNode 和NameNode 通过共享存储系统实现元数据同步。在进行主备切换的时候,新的主 NameNode 在确认元数据完全同步之后才能继续对外提供服务。
DataNode 节点:除了通过共享存储系统共享 HDFS 的元数据信息之外,主 NameNode 和备 NameNode 还需要共享 HDFS 的数据块和 DataNode 之间的映射关系。DataNode 会同时向主 NameNode 和备 NameNode 上报数据块的位置信息
HA是为了解决单点问题,
通过JN集群共享状态,
通过ZKFC 选举active,
监控状态,自动备援。
DN会同时向active standby nn发送心跳。
ActiveNN:操作记录写到自己的editlog,
同时JN集群也会写一份;
接收 DN的心跳和blockreport
StandbyNN: 接收JN集群的日志,
先是读取执行log操作(重演),使得自己的元数据和activenn节点保持一致;
接收 DN的心跳和blockreport;
JounalNode: 用于 active standby nn节点的同步数据,
部署是2n+1个(3个/5个–>7个)
ZKFC: 单独的进程
监控NN的健康状态
向ZK定期发送心跳,使自己可以被选举;当自己被ZK选举为主的时候,
zkfc进程通过RPC调用使NN的状态变为active,对外提供实时服务,无感知。