大数据-----Hadoop High Availability

1.High Availability:简称HA,高可用。为了保证业务可用的持续性,一般会有两个或者两个以上的节点,活动节点(Active)以及备用节点 (Standby),目的是当活动节点发生了问题不能工作的时候,备用节点会检测到并且代替活动节点来继续保持业务的进行。

Namenode(简称NN)就是HDFS集群的单点故障点,一个集群中在运行的NN只能有一个,但是如果这个NN挂掉了整个集群就不可用了,解决这个问题出现了一堆针对 HDFS HA 的解决方案(如:Linux HA, VMware FT, shared NAS+NFS,BookKeeper, QJM/Quorum Journal Manager, BackupNode 等)。HA的框架流程是一致的,不一致的就是如何存储、管理、同步edits编辑日志文件,HA的模式下有且只有一个NN运行提供服务。

 

2.以QJM/Quorum Journal Manager举例:QJM的工作机制

FC(Failover Controller)用来监控NN的状态,当两个NN启动的时候,每一个FC会去ZK(zookeeper)集群指定的目录创建临时节点,谁成功了谁就是active,当active的NN发生故障,它的FC就可以感知到,并且断开与ZK集群的连接,触发ZK集群的watch监听机制,standby的FC接收到通知,去指定目录创建节点,并把自己变成active。

在状态切换的时候,为了避免fencing(脑裂)的情况发生,standby去替换active的时候还会在补上一刀发送命令 kell -9 ***(进程名字)杀死active的进程。

fencing(脑裂):简单理解就是同时会有多个NN处于运行活跃的情况。

 

3.活动节点(Active)以及备用节点 (Standby)如何实现数据同步

基本原理就是用 2N+1 台 JournalNode 存储 EditLog,Active每次写数据操作有>=N+1 返回成功时即认为该次写成功,Standby会去JournalNode集群中同步EditLog,数据不会丢失了

 

4.Datanode是如何知道Namenode切换了呢

在 HA 模式下,datanode 需要确保同一时间有且只有一个 NN 能命令 DN。为此:每个 NN 改变状态的时候,向 DN 发送自己的状态和一个序列号。DN 在运行过程中维护此序列号,当 failover 时,新的 NN 在返回 DN 心跳时会返回自己的 active 状态和一个更大的序列号。DN 接收到这个返回则认为该 NN 为新的 active。如果这时原来的 active NN 恢复,返回给 DN 的心跳信息包含 active 状态和原来的序列号,这时 DN 就会拒绝这个 NN 的命令。

 

5.FC(Failover Controller)

每个 NameNode 的节点上都会部署一个FC,用来监视NN的健康状态,FC主要包扣三个组件:

HealthMonitor: 监控 NameNode 是否处于 unavailable 或 unhealthy 状态。当前通过RPC 调用 NN 相应的方法完成。

ActiveStandbyElector: 监控 NN 在 ZK 中的状态。

ZKFailoverControlle:订阅 HealthMonitor 和 ActiveStandbyElector 的事件,并管理 NN 的状态,另外 zkfc 还负责解决 fencing(也就是脑裂问题)。

你可能感兴趣的:(大数据-----Hadoop High Availability)