共计 1591 个字符,预计需要花费 4 分钟才能阅读完成。
先达到极限,而后再冲破它
HA 高可用
HA 概述
- 所谓 HA(High Available),即高可用(7*24 小时不中断服务)。
- 实现高可用最要害的策略是 打消单点故障。HA 严格来说应该分成各个组件的 HA 机制:HDFS 的 HA 和 YARN 的 HA。
- Hadoop2.0 之前,在 HDFS 集群中 NameNode 存在单点故障(SPOF)。
NameNode 次要在以下两个方面影响 HDFS 集群
NameNode 机器发生意外,如宕机,集群将无奈应用,直到管理员重启
NameNode 机器须要降级,包含软件、硬件降级,此时集群也将无奈应用
HDFS HA 性能通过 配置 Active/Standby 两个 NameNodes实现在集群中对 NameNode 的热备来解决上述问题。如果呈现故障,如机器解体或机器须要降级保护,这时可通过此种形式将 NameNode 很快的切换到另外一台机器。
HDFS-HA 工作要点
1. 元数据管理形式须要扭转
内存中各自保留一份元数据;Edits 日志只有 Active 状态的 NameNode 节点能够做写操作;两个 NameNode 都能够读取 Edits;共享的 Edits 放在一个共享存储中治理(qjournal 和 NFS 两个支流实现);
2. 须要一个状态治理功能模块
实现了一个 zkfailover,常驻在每一个 namenode 所在的节点,每一个 zkfailover 负责监控本人所在 NameNode 节点,利用 zk 进行状态标识,当须要进行状态切换时,由 zkfailover 来负责切换,切换时须要避免 brain split 景象的产生。
3. 必须保障两个 NameNode 之间可能 ssh 无明码登录
4. 隔离(Fence),即同一时刻仅仅有一个 NameNode 对外提供服务
HDFS-HA 主动故障转移工作机制
手动转移命令
hdfs haadmin -failover
然而手动转移不够不便,咱们须要配置主动故障转移,主动故障转移为 HDFS 部署减少了两个新组件 ZooKeeper 和 ZKFailoverController(ZKFC)过程
HA 的主动故障转移依赖于 ZooKeeper 的以下性能:
- 故障检测:集群中的每个 NameNode 在 ZooKeeper 中 保护了一个长久会话,如果机器解体,ZooKeeper 中的会话将终止,ZooKeeper 告诉另一个 NameNode 须要触发故障转移。
- 现役 NameNode 抉择:ZooKeeper 提供了一个简略的机制用于 惟一的抉择一个节点为 active 状态。如果目前现役 NameNode 解体,另一个节点可能从 ZooKeeper 取得非凡的排外锁以表明它应该成为现役 NameNode。
ZKFC 是主动故障转移中的另一个新组件,是 ZooKeeper 的客户端,也 监督和治理 NameNode 的状态。每个运行 NameNode 的主机也运行了一个 ZKFC 过程,ZKFC 负责;
- 衰弱监测:ZKFC 应用一个 健康检查命令定期地 ping 与之在雷同主机的 NameNode,只有该 NameNode 及时地回复衰弱状态,ZKFC 认为该节点是衰弱的。如果该节点解体,解冻或进入不衰弱状态,衰弱监测器标识该节点为非衰弱的。
- ZooKeeper 会话治理:当本地 NameNode 是衰弱的,ZKFC 放弃一个在 ZooKeeper 中关上的会话。如果本地 NameNode 处于 active 状态,ZKFC 也放弃一个非凡的 znode 锁,该锁应用了 ZooKeeper 对短暂节点的反对,如果会话终止,锁节点将主动删除。
- 基于 ZooKeeper 的抉择:如果本地 NameNode 是衰弱的,且 ZKFC 发现没有其它的节点以后持有 znode 锁,它将为本人获取该锁。如果胜利,则它曾经博得了抉择,并负责运行故障转移过程以使它的本地 NameNode 为 Active。故障转移过程与后面形容的手动故障转移类似,首先如果必要爱护之前的现役 NameNode,而后本地 NameNode 转换为 Active 状态。