Quorum Journal Manager原理

Quorum Journal Manager原理

    在一个典型的HA集群,两个独立的物理节点配置为NameNodes。在任何时间点,其中之一NameNodes是处于Active状态,另一种是在Standby状态。 Active NameNode负责所有的客户端的操作,而Standby NameNode尽用来保存好足够多的状态,以提供快速的故障恢复能力。

    为了保证Active NN与Standby NN节点状态同步,即元数据保持一致。除了DataNode需要向两个NN发送block位置信息外,还构建了一组独立的守护进程”JournalNodes”,用来FsEdits信息。当Active NN执行任何有关命名空间的修改,它需要持久化到一半以上的JournalNodes上。而Standby NN负责观察JNs的变化,读取从Active NN发送过来的FsEdits信息,并更新其内部的命名空间。一旦ActiveNN遇到错误,Standby NN需要保证从JNs中读出了全部的FsEdits,然后切换成Active状态。


    如下图所示:

    

    预防脑裂现象”Brain Split”。HA需要保证在任何一个时间点,最多只有一个NameNode处于Active状态。否则的话,在两个NN的NameSpace下的状态会出现分歧,从而引起数据丢失、或者其它不可预见的错误。为了预防该问题的发送,在任何时间点内JNs仅允许一个NN向其写FsEdits信息,保证故障迁移的正常执行,通过互斥机制来保证。



### Hadoop NameNode 高可用性实现方法 为了提高 Hadoop 文件系统的可靠性,HDFS 提供了多种机制来确保 NameNode 的高可用性 (HA)[^3]。具体来说,在 HA 架构下有两个 NameNode 实例——一个处于活动状态(active),另一个作为备用(standby)。当活跃节点发生故障时,备用节点能够迅速接管其职责。 #### 使用 Quorum Journal Manager(QJM) 一种常见的配置方案是通过Quorum Journal Manager 来同步元数据编辑日志。在这种模式下: - 所有 DataNodes 同时向两个 NameNodes 报告心跳并上传块报告; - 活动的 NameNode 负责处理所有的客户端请求,并将更改记录到共享的日志存储中; - 备用 NameNode 不断读取这些日志条目以保持与活动实例的一致性;一旦检测到主节点失败,则自动切换角色成为新的领导者[^1]。 ```xml <property> <name>dfs.nameservices</name> <value>mycluster</value> </property> <!-- Other properties --> <property> <name>dfs.ha.namenodes.mycluster</name> <value>nn1,nn2</value> </property> <property> <name>dfs.journalnode.edits.dir</name> <value>/path/to/journal/node/directory</value> </property> ``` #### 客户端 Failover 代理类设置 为了让应用程序能够在不同名称节点之间无缝迁移,还需要指定 `dfs.client.failover.proxy.provider` 参数指向合适的 Java 类,该类定义了如何定位当前正在运行的服务提供者[^2]。 ```properties dfs.client.failover.proxy.provider.mycluster=org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值