原来namenode只有一个,所以存在单点风险
后来改用主从namenode,主挂了,自动切换到被namenode
一个高可用系统中,所有组件都要是高可用的,下面这个系统里面 zk,zkfc和journalnode都是高可用的
怎么做到自动切换?
通过zookeeper和zkfc(zookeeper failure controller)
每个nn都有一个zkfc进程,一方面监控所在机器的nn是否监控,另一方面,监控zk
有个总的manager负责总的逻辑:
nn监控,那么就在zk上创建一个顺序临时节点,多个nn通过这个方式来选举出主nn,比如顺序第一个临时节点选作主nn
如果nn出现故障,那么就删除临时节点,如果当前为主nn,那么就重新选主
当然出故障 的nn本身,需要人工来修复
备nn,实现了之前secondarynamenode的检查点功能
datanode会想所有nn,来report自身的文件对应情况
但是namenode里的editlog,则只有主nn才会写,备nn都是通过journalnode来同步主nn的editlog
只有主nn才能将editlog写到journalnode里面,
journalnode本身也是要高可用的