hadoop HA、Federation(联邦)

高可用性HA:尽量缩短因日常维护操作(计划)、突发的系统奔溃(非计划)所导致的停机时间,提高系统和应用的可用性

一、背景:

只有一个namenode 的HDFS集群存在单点故障:

1、namenode机器宕机(非计划内),导致集群不可用,需要重启。

2、namenode节点软件或硬件升级(计划内),导致集群不可用

解决上述问题,hadoop HDFS高可用HA方案,HDFS通常由两个namenode组成,一个active状态,另一个standby状态,active namenode对外提供服务,处理来自客户端的RPC请求,standby namenode不对外提供服务,仅同步active namenode的最新的edits,以便active namenode在宕机时切换成active namenode

二、HA架构

namenode会被分配到两台独立的机器上,任何时间上,一个处于active,另一个处于standby

两个namenode元数据必须时刻保持元素据一致

1、通过journal nodes 使standby NN与active NN的元数据保持一致:

qjournal

journel node

hadoop提供了分布式集群应用:qjournal,专门管理元素据edits,依赖于zookeeper实现。qjournal的具体进程是journal node,分布在不同的机器上。active namenode把最新修改的edits保存到journal node中,过半策略

为了使active NN和standby NN保持同步,它们都会与一组互相独立的进程journal nodes保持通信,当active NN更新元素据,将记录修改日志并发送给journal nodes 的多数(过半策略),standby NN会关注对日志的变更,并从journal nodes读取这些edits,将edits更新在自己的namespace中,当active发生故障,standby NN会在自己提升为active NN之前,与journal nodes的edits保持一致,即active NN和standby NN持有的namespace是一致的

2、在active NN宕机后,如何切换到standby NN?

ZKFC:依赖于zookeeper实现

会在namenode上会运行一个监控进程ZKFC,管理监控namenode状态,ZKFC进程会和zookeeper建立连接,报告namenode的状态信息。当发现active NN不正常,通过ZKFC和zookeeper的连接将不正常状态报告给zookeeper,standby NN上的ZKFC通过连接就会感知到active NN状态不正常,自己就进行状态切换。此时之前的active NN可能又恢复正常了。就会出现两个active NN,出现脑裂问题。

如何避免standby NN切换到active NN发生脑裂?

防止脑裂机制:fencing

ssh 发送 kill指令

执行自定义shell脚本

①、通过指令杀掉对方namenode

当standby NN发现active NN状态不正常,并不会立马做切换,会先通过网络ssh发送一条指令杀掉对方namonode进程,执行成功会返回一个成功的信息。然后再执行状态切换。

但是这条指令可能不会返回成功的信息,通过网络传输不稳定或者对方namenode关机等等一些其他因素。此时standby NN就无法确定对方namenode是否真的死了。

②、发送指令后过了一定的时间还没有返回值执行自定义shell脚本程序

通过自定义shell程序关闭对方namenode进程

3、namenode中关于datanode中block的信息应保持一致

standby NN持有集群datanodes中的block最新信息也是很重要的,datanodes需要和这两个namenode建立心跳连接,并把自己最新的block信息发送给他们。

4、脑裂问题:

只允许有一个active NN

对于journal nodes来说,任何时候只允许一个namenode在上面更新edtis。

只有一个namenode能相应客户端的请求(active namenode)

三、Federation(联邦)

集群中可以存在多对namenode(active NN、standby NN)

例如active NN1和standby NN1组成一对namenode,此时可以通过hdfs://ns1/aa 访问这对namenode中数据,ns1指的就是这对namenode 对应的namenode服务。还可以存在其他的ns2,ns3

 

之前自己写的,可能存在不对信息。

三、HDFS的自动故障转移

主要由zookeeper和ZKFC两个组件完成,

1、zookeeper集群主要作用:

①、故障监控:每个namenode会和zookeeper建立一个持久session,如果namenode失效,此session将会过期失效,zookeeper将会通知两个namenode,然后出发failover(故障转移)

②、namenode选举:zookeeper提供了简单的机制来实现active NN选举,如果当前active NN失效,standby NN会获取一个排他锁,获取排他锁的namenode会成为active

2、ZKFC是zookeeper的一个客户端,namenode机器上会运行一个ZKFC程序,检测和管理namenode的状态:
①、健康监控:ZKFC间歇性的ping namenode,得到namenode的返回状态,如果namenode失效或者不健康,ZKFC会将其标记为不健康。

②、zookeeper会话管理:namenode运行正常,ZKFC也会拥有一个zookeeper session,如果本地的namenode是active,ZKFC也会拥有一个排他锁,如果session过期,ZKFC拥有的排他锁也将被删除

③、选举:

 


 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值