本文共 2512 字,大约阅读时间需要 8 分钟。
hdfs namenode HA高可用方案
1、hadoop-ha 集群运作机制介绍所谓HA,即高可用(7*24 小时不中断服务) //hadoop 2.x 内置了 HA 方案实现高可用最关键的是消除单点故障hadoop-ha 严格来说应该分成各个组件的HA 机制提示:
在之前没有HA机制的时候,secondary namenode 和standay namenode 有很大的区别secondary namenode 不可以替代namenode;而standay namenode 可以完全的替代namenodeHA技术要点 :元数据管理 2个namenode的状态管理 如何防止脑裂
HDFS 的HA 机制
通过双namenode 消除单点故障
双namenode 协调工作的要点:A、元数据管理方式需要改变:内存中各自保存一份元数据Edits 日志只能有一份,只有Active 状态的namenode 节点可以做写操作两个namenode 都可以读取edits共享的edits 放在一个共享存储中管理(qjournal 和NFS 两个主流实现)1、客户端访问active namenode //双namenode中的fsimages一开始初始化的时候,都是完全一样,都是空的2、写数据的时候,写入数据写到active namenode中内存元数据的时候,也会实时的更新到qjonal集群edits日志文件系统中3、standay 会没隔一段时间去读取edits文件,并更新到自己的元数据内存中,保持和active最小差异4、每隔一段时间,standay中的fsimage会和edits更新一次,保持在本地备注:edits既不属于active也不属于standay 依靠第三方qjonal集群 完全独立假设 active namenode 宕机了,此时 standay 和active有点差异,但是差异很小,standay迅速从edits日志系统中更新最新一次老的active的操作,完全和老active一样的元数据,那么就要可以迅速的对外来提供服务。B、需要一个状态管理功能模块
实现了一个zkfailover,常驻在每一个namenode 所在的节点每一个zkfailover 负责监控自己所在的namenode 节点,利用zk 进行状态标识当需要进行状态切换时,由zkfailover 来负责切换切换时需要防止brain split 现象的发生1、active上的zkfc实时监控自己namenode的状态健康信息2、如果发生了异常之后会控制standay的zkfc3、standay的zkfc收到异常之后会去kill -9 active namenode4、如果standay的zkfc没有成功得到kill -9 之后的返回值的话,那么就启动脚本去杀死active namenode 脚本位置为/bin/true5、杀死active namenode之后,就成功得到访问值6、standay的zkfc通知standay namenode称为active 对外服务。什么是zkfc:就是基于zookeeper实现的失败切换控制器
如何在状态切换时避免brain split(脑裂)?
脑裂:active namenode工作不正常后,zkfc在zookeeper中写入一些数据,表明异常,这时standby namenode中的zkfc读到异常信息,并将standby节点置为active。但是,如果之前的active namenode并没有真的死掉,出现了假死(死了一会儿后又正常了),这样,就有两台namenode同时工作了。这种现象称为脑裂。 解决方案:standby namenode感知到主用节点出现异常后并不会立即切换状态,zkfc会首先通过ssh远程杀死active节点的 namenode进程(kill -9 进程号)。如果在一段时间内standby的namenode节点没有收到kill执行成功的回执,standby节点会执行一个自定义脚本,尽量保证不会出现脑裂问题!这个机制在hadoop中称为fencing(包括ssh发送kill指令,执行自定义脚本两道保障)。
从解决方案中可知;当发生active节点崩坏时;hadoop会进行以下两个操作:
1)通过ssh kill掉active节点的namenode进程
2)执行自定义脚本
原文:如何没有及时得到kill的成功返回信息,在调用一个用户指定的shell脚本程序。
[root@hadoop-node01 bin]# ls -l /bin/true //脚本位置在bin下面-rwxr-xr-x. 1 root root 21112 10月 15 2014 /bin/true在cdh中这个程序在
HDFS High Availability 防御方法dfs.ha.fencing.methods用于服务防御的防御方法列表。shell(./cloudera_manager_agent_fencer.py) 是一种设计为使用 Cloudera Manager Agent 的防御机制。sshfence 方法使用 SSH。如果使用自定义防御程序(可能与共享存储、电源装置或网络交换机通信),则使用 shell 调用它们。Cloudera Manager 防御策略的超时时限dfs.ha.fencing.cloudera_manager.timeout_millis 10000基于 Cloudera Manager 代理的防御程序使用的超时时限(毫秒)zookeeper在HA机制中的作用
1、QJN集群需要zk实现协调服务2、namenode中谁是active谁是standay记录在zk中3、zkfc基于zookeeper实现失败切换控制器转载于:https://blog.51cto.com/12445535/2351355