1、HDFS回顾
1.1 HDFS产出背景及定义
1.2 HDFS的优缺点
1.3 HDFS的架构组成
1.4 文件块的大小
2、高可用HA(High Available)
2.1 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很快的切换到另外一台机器。
2.2 实现机制
2.2.1 基本原理和问题
- 通过双 NameNode 消除单点故障
- 会带来几个个问题:
- 元数据管理方式需要改变,内存中各自保存一份元数据;Edits 日志只有 Active 状态的 NameNode 节点可以做写操作;两个 NameNode 都可以读取 Edits;共享的 Edits 放在一个共享存储中管理(qjournal 和 NFS 两个主流实现)。
- 需要一个状态管理功能模块,实现了一个 zkfailover,常驻在每一个 namenode 所在的节点,每一个 zkfailover 负责监,控自己所在 NameNode 节点,利用 zk 进行状态标识,当需要进行状态切换时,由 zkfailover,来负责切换,切换时需要防止 brain split 现象的发生。
- 必须保证两个 NameNode 之间能够 ssh 无密码登录
- 隔离(Fence),即同一时刻仅仅有一个 NameNode 对外提供服务
2.2.2 新增组件
- 自动故障转移为 HDFS 部署增加了两个新组件:
ZooKeeper 和 ZKFailoverController(ZKFC)进程,ZooKeeper 是维护少量
协调数据,通知客户端这些数据的改变和监视客户端故障的高可用服务。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 状态。