单点故障
为了解决单点故障,采用两个 NN 进行管理,但是两个 NN 不能同时处于活跃状态。
一个 active 一个 standby (相当于 班长(active) 副班长(standby))。
集群信息
- 动态信息:DN 向 NN 发送的 心跳信息 ---- DN 会向两个 NN 同时发送信息。
- 静态信息:客户端产生的信息,即 元数据(block数,块大小,偏移量等等)。
静态信息同步(client 只会服务于一个 NN)
需要一个第三者来同步 两个 NN 的信息:
三种方式:
- NFS ----- network file system 单点问题
- QJM ----- journalnode
- BOOKKEEPER
QJM状态:只是说 NN(standby)掌握了信息,当我们这个 NN(active)挂掉之后,需要我们手动去启用 standby 状态这个节点。
当 active 挂掉之后重新修复启动之,为 standby 状态。
standby 和 active 是完全一样的配置。
全自动 ZOOKEEPER:提供分布式的协调服务。
zookeeper
HealthMonitor
:,起监控作用,定期的监控 NN 的状态,并有异常时,将一场返回给failovercontroller
failovercontroller
:在中间启转化作用activeStrandbyElector
:会将当前的信息 写入到 zookeeper 中,也会将其他的信息拿过来。
开始时,选择谁为 active状态。
当 active 挂掉之后,会将 standby 改为 active。
当 standby 状态改为 active 状态之后,会将信息返回到 zookeeper 中,当挂掉的节点恢复通信之后,回去拉取 zookeeper 中的信息,将自己的状态转化为 standby。