HDFS的HA(高可用)
问题:NameNode是单节点的,容易发生单点故障。
在hadoop2.x之后,可以部署两个NameNode,一个Active(活跃的),另外一个是StandBy(备份的),如果要实现这种高可用,需要解决两个问题:
1.数据的同步
数据的同步包括两部分:静态数据和动态数据,静态数据是指元数据信息(块名称,大小,偏移量,权限),动态数据是指datanode定时上送的块信息。
动态数据可以让datanode连接两个namenode,上送给两个namenode;静态数据可以采用Journal node进行日志的读取和写入,完成元数据(静态数据)的同步。
2.同一个时间段,只有一个namenode工作,防止两个同时在,发生脑裂
使用zookeeper协调系统,每个namenode都有zkfc的进程。
1)健康监控
health montor监控namenode的健康状况,如果不舒服,则需要调用2)
2)状态变化回调函数
zkfailercontroller
3)进行选举
activeStandyElector
选举成功的,调用方法变成了active
否则选择失败,调用方法变成standy by
爱人不亲,反其仁;治人不治,反其智;礼人不答,反其敬;行有不得,反求诸己