目录
一、HA(high availability)的使⽤原因
1.
问题所在:
- 计划外的事件,⽐如:单点故障
(SPOF)
- 计划内的事件,⽐如:
namenode
上的硬件或软件升级
2.
解决办法:
- 使⽤两个
Namenode
:
⼀个是正在⼯作的namenode,可以称之为
Active
节点
;
另外⼀个
namenode 充当备份节点,
称之为
Standby 节点;当
Active
节点不能使⽤了,
Standby
节点会⽴即转为
Active
状态,来 接管集群,使之正常⼯作,这 就是现在的HDFS
的⾼可⽤性,简称
HA
。这种状态的切换,对⽤户来说是透明 的。
- 注意:
standby
节点会执⾏检查点机制,因此不需要配置
secondarynamenode.
二、两个Namenode的缺点
网络动荡易丢失数据
三、JournalNode集群的功能介绍
3.1每个journalnode节点都存储编辑⽇志
为了使备⽤节点保持其状态与活动节点同步,两个节点都与⼀组称为“ JournalNodes” (JN
)的单独守护程序进⾏通信。当活动节点执⾏任何命名空间的修改时,它会持久地 将修改记录记录到⼤多数这些JN
中。
Standby
节点会⼀直监视
JN
,以查看编辑⽇志的更 改。当“
备⽤节点
”
看到编辑内容更改后,会将其应⽤于⾃⼰的命名空间。发⽣故障转移 时,备⽤节点将确保在将⾃身升级为活动状态之前,已从JounalNodes
读取所有编辑内 容。这样可确保在发⽣故障转移之前,名称空间状态已完全同步。
3.2 防⽌脑裂的发生
-怎么理解脑裂?
就是Active
节点处于⽹络震荡状态,假死状态,
Standby
就转为
Active
。等⽹络 震荡过后,就有两个Active
了,这就是脑裂。
对于HA群集的正确操作⾄关重要,⼀次只能有⼀个NameNode处于Active状态。否 则,名称空间状态将在两者之间迅速分散,从⽽有数据丢失或其他不正确结果的⻛险。
为了确保该属性并防⽌所谓的“ 裂脑情况 ” , JournalNode 将⼀次仅允许单个 NameNode成为作者。在故障转移期间,变为活动状态的NameNode 将仅承担写⼊ JournalNodes 的 ⻆⾊,这将有效地防⽌另⼀个NameNode 继续处于活动状态,从⽽使新的 Active 可以安 全地进⾏故障转移。
3.3 journalnode集群正常⼯作的条件
1)
⾄少
3
个
Journalnode
节点
2)
运⾏个数建议奇数个
(3,5,7
等
)
3)
满⾜(
n+1
)
/2
个以上,才能正常服务。即能容忍(
n-1
)
/2
个故障。
3.4 datanode同时向两个namenode⼼跳反馈
为了提供快速的故障转移,备⽤节点还必须具有集群中块位置的最新信息。为了实现这一点,DataNodes
被配置了两个
NameNodes
的位置,并向两者发送块位置信息和⼼跳信 号。
3.5 journalnode的缺点
在这种模式下,即使活动节点发⽣故障,系统也不会⾃动触发从活动NameNode
到备⽤NameNode
的故障转移,必须需要⼈为的操作才⾏。要是有⼀个能监视
Active
节 点的服务功能就好了。
这个时候,我们就可以使⽤
zookeeper
集群服务,来帮助我们进⾏⾃动容灾了。