在HA的集群里头,两台独立的机器会被个配置成为一个NameNode。在任什么时候刻,只能有一个namenode是active的,另一个是standby状态。active的namenode是负责来自client的全部请求操做,而standby则在待命随时准备成为active的namenode。node
为了保持namenode active和namenode standby 之间的同步,两个namenode之间经过一个叫作JournalNodes的守护进程来保持同步的。当namenode active的namespace有被修改的时候,namenode active会把这些操做日志记录在journalnodes上。而后namenode standby就会从journalnodes的edits上读取这些操做日志。当namenode拿到edits操做日志以后,它就会把日志的操做应用到本身的namespace里头。一旦namenode active出现问题,namenode standby就能够确保本身在成为namenode active以前,本身已经读取了全部的edits操做日志。spa
为了提供一个快速的热备切换,就须要namenode standby时刻知道block的位置信息,要实现这一点,datanode节点配置了namenode的信息,而后datanode主动把block的位置信息和心跳数据发送给两个namenode。日志
确保任什么时候候只有一个active的namenode是相当重要的,不然,可能致使数据丢失和一些严重后果。journalnodes会保证同一时刻只有一个namenode active。在热备切换的时候,即将成为active的namenode standby会接管writer的角色。进程