核心设计思路:分而治之的思路,实现分散存储 + 冗余存储
元数据管理核心问题:
HA 高可用架构的四个问题及解决方案:
1. 同时启动的两个 NameNode 到底谁成为真正的 active ? —— zookeeper 分布式锁
2. 如果 active 死掉,那么 standby 怎么知道,并且切换状态呢? —— zookeeper 分布式锁
3. 既然 standby 能切换自己的状态成为 active 对外提供服务,必须要保证 standby 和 active 的状态是一致的?—— JournalNode 分布式事务
4. active namenode 假死导致脑裂?隔离机制,确保 active 一定要死掉
HDFS 架构复杂的原因 —— namenode 是有状态的
HA HDFS 集群的瓶颈 —— 单 NameNode 维护和管理的 DataNode 必然负载过重
HA HDFS 集群瓶颈解决方案 —— 通过增加 namenode 的个数,来分担原来单 NameNode 的压力。
关于上图中的一些解释:
DanceNN:这是 字节跳动用 C++ 重写的 NameNode,完全兼容 NameNode 的通信协议。
NNProxy:即 NameNode Proxy,为 Federation 功能提供统一的 Namespace,类似于 mysql 中间件 mycat。
BookKeeper:即 Apache BookKeeper,其作用是跟社区的 JournaNode 是一样的,就是为 Active 和 Standby NameNode 提供一个共享的 editlog 存储方案,这是实现 NameNode 的 HA 方法的基础。
关于多机房架构,事实上,是多机架的联邦集群的升级版本:
这个设计的好处就是存储层对上层应用屏蔽了集群细节,计算资源可以直接无感分配。该设计结合离线数据一写多读的特点,充分考虑跨机房带宽的合理使用。