先达到极限,而后再冲破它
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状态。