基于本文回答
0
评论

为什么JournalNode的数量通常是奇数个?

知识点图片

在Hadoop HDFS的高可用(HA)架构中,JournalNode(简称JN)的数量通常被要求或建议配置为奇数个(如3、5、7个)。这主要是由其底层的Quorum(多数派/过半)共识机制决定的。

具体原因可以从以下几个核心维度来理解:

1. Quorum(多数派)机制的数学逻辑

JournalNode集群在工作时,Active NameNode 必须成功将 EditLog(元数据修改日志)写入到 半数以上(> N/2) 的 JournalNode 中,这次写操作才算成功。

我们来对比一下奇数和偶数节点在容错能力上的数学差异:

  • 公式:多数派要求的最少存活节点数 = (N / 2) + 1 (向下取整)
  • 允许宕机的节点数 = 总节点数 - 多数派最少节点数
总节点数 (N) 多数派需要存活的最少节点数 最大允许宕机/故障的节点数
3 (3/2)+1 = 2 3 - 2 = 1
4 (4/2)+1 = 3 4 - 3 = 1
5 (5/2)+1 = 3 5 - 3 = 2
6 (6/2)+1 = 4 6 - 4 = 2

结论

  • 3个节点和4个节点,都只能容忍1个节点故障。
  • 5个节点和6个节点,都只能容忍2个节点故障。
  • 规律:偶数个节点(2N)相比于比它少一个的奇数个节点(2N-1),完全没有增加任何容错能力

2. 避免资源浪费与性能损耗

既然4个节点和3个节点的容错能力完全一样(都只能坏1个),那么配置第4个节点就带来了以下劣势:

  • 硬件浪费:白白多消耗了一台机器的计算、存储和网络资源。
  • 性能开销:NameNode向JournalNode写入数据时,节点越多,网络通信的开销越大,集群达成共识的延迟可能会微弱增加。

3. 防范“脑裂”(Split-Brain)问题

在分布式系统中,如果发生网络故障导致集群被分割成两部分,Quorum机制可以完美防止“脑裂”(即两个NameNode都认为自己是Active并同时写数据):

  • 如果是3个节点:网络断开变成 2个节点1个节点 的两部分。拥有2个节点的那边依然占大多数(2 > 3/2),可以继续工作;另一边则停止工作。
  • 如果是4个节点:如果网络断开变成 2个节点2个节点 的两部分(对等分割)。因为2不大于4的一半(2不满足 > 4/2),两边都无法凑齐多数派(都需要3个),导致整个HDFS集群直接瘫痪

可以看出,在某些特定的网络分区故障下,偶数节点反而比奇数节点更脆弱。

总结

配置奇数个JournalNode(通常是3个或5个)是基于性价比最高的容错设计。偶数个节点不仅不能提升系统的可用性,反而会浪费硬件资源,甚至在网络分区时增加集群完全不可用的风险。这也是为什么不仅是JournalNode,像ZooKeeper(Zookeeper集群)、HBase(RegionServer的主节点选举)等基于Paxos/Raft等共识算法的分布式系统,都强烈建议部署奇数个节点的原因。

右滑查看面试常问