Hadoop高可用架构
设计思想
Hadoop2.x启用了主备节点切换模式
当主节点出现异常的时候,集群直接将备用节点切换成主节点
- 要求备用节点马上就要工作
- 主备节点内存几乎同步
有独立的线程对主备节点进行监控健康状态
需要有一定的选举机制,帮助我们确定主从关系
我们需要实时存储日志的中间件
ANN(Active NameNode)
记录信息
- 元数据
- block块与文件映射信息
- DataNode与块映射信息
运行时保持心跳
数据存储在内存中
SNN(Standby NameNode)
基本与ANN一致,但不能发出任何指令
记录元数据
保持心跳
数据存储在内存中
合并edits和fsimage,代替了SecondaryNameNode
主备节点的界限没有那么明确,所以主备节点机器配置一般相同
DN
DataNode
- 存储数据文件和校验文件
- 与主备节点NN保持心跳
- 用硬盘存储
- 存储文件的block数据块,启动时同时向两个NN报告block信息
QJM
1.Quorum JournalNode Manager 共享存储系统,NameNode通过共享存储系统实现日志数据同步。集群运用到最终一致性
2.Hadoop 1.x时,日志存放在NameNode中,NameNode数据是存放在内存中的,若NameNode发生故障,日志信息岌岌可危,
3.Hadoop 2.x 的时候,日志是由ANN生成,同步到SNN中
4.但是ANN不能每一次都能友好通信
5.创建已个日志日志一致性集群,将日志存在QJM中,每次主节点做任何操作时,先生成日志并将日志传输到三个JN节点
6.当JN节点存储后会返回确认信息,超过半数日志即生效
7.当QJM存储成功后,ANN开始执行对应的操作
8.SNN 不会实时的去获取最新的日志,它每间隔一段时间去获取一次 9.FailoverControler(Active|Standby)
10.主要用于监控NameNode的健康状况
11.单独的启动一个进程可以很好的防止一些NN无法发送心跳的情况
12.如果NN出现一些异常,他可以负责主备切换
13.每次启动的时候可以发动主备节点的选举
Zookeeper
分布式协调框架
- 启动的时候协助选举
- 记录主节点的状态信息
主备切换的流程
阻止脑裂
- 主节点选举后,ZKFC会创建两个节点在Zookeper中,一个临时节点,一个正常节点。
- 1.若主节点主动下线时,两个在zookeeper的节点都会被删除,然后SNN发现主正常节点都没有了,就转为主节点,
- 2.若主节点被动下线时,只会删除一个临时节点,正常节点会留下来,主节点会将自己的进程信息保存在正常节点中,可通过ssh登入到目标机器中杀死ANN,转而让SNN上台