2.2 架构

架构概述

在一个典型的 HA 集群中, 会在 2 个独立设备上分别配置 1 个 NameNode, 这个这个集群中就有了 2 个 NameNode. 避免单点失效的第一步.

在任何的时间点上, 严格的按照其中一个 NameNode 是活动状态(Active state), 另外一个 NameNode 是备用状态(Standby state). 在集群中, 活动的 NameNode 负责所有的客户端操作, 而备用 NameNode 仅仅是简单作为一个备份, 一旦出现问题, 可以进行一个快速的切换.


为了使备用 NameNode 的数据与活动 NameNode 的数据同步, 这两个 NameNode 节点通过一组独立的称作JournalNodes(JNs)守护进程进行通讯.
当活动 NameNode 修改了任何数据, 都会把修改记录日志提交给JNs. 备份 NameNode 就会收到来自JNsedits, 他就会把这些这些修改写到自己的命名空间中.

在备灾发生的时候, 备份 NameNode 会确保自己已经从JNs读到了所有的edits, 然后把自己变成活动状态(Active state). 这些操作可以确保命名空间的状态可以完全与备灾发生前保持一致.

为了具有快速备灾的能力, 备份 NameNode 也必须有集群中所有数据块位置的最新信息. 为了实现这个需求, 所有的DataNode会被配置 2 个 NameNode 的位置信息, 并且会发送数据块的位置信息和心跳给 2 NameNode.


对正确的操作 HA 集群来说, 同一时间只能有一个活动状态的 NameNode是至关重要的. 否则的话, 两个NameNode的命名空间会迅速的变的有差异, 导致数据丢失和其他一些错误结果的风险.

为了确保数据不丢失和阻止所谓的脑裂情况(split-brain scenario)发生, JournalNodes(JNs) 甚至同一时间只允许单独一个 NameNode 可以被写入数据.

在备灾期间, 即将变成活动状态的 NameNode 会负责向 JournalNodes 写数据, 这将有效的阻止其他 NameNode 继续处于活动状态, 然后新的活动 NameNode 能够安全的处理备灾.

脑裂: 如果同时有两个活动的 NameNode, 这种情况就叫脑裂.


Copyright © 尚硅谷大数据 & 2019 all right reserved,powered by Gitbook
该文件最后修订时间: 2018-11-11 09:38:54

results matching ""

    No results matching ""