双namenode保证高可用,
随之而来带来很多问题:
1、2台namenode之间的数据同步问题,edits的数据。
如果实时的同步,会造成client访问缓慢。如果批同步,会造成很多数据丢失。
采取将数据edits抽取出来的方式。
2、抽取出edits到第3方,也得考虑第3方的高可用,用edits集群的方式解决。底层依赖zookeeper。qjournal进程。
3、2台namenode,只能一台active,一台standby,否则就会造成数据的同步复杂度大量提高。
4、如何保证2台namenode之间的无缝切换?
每个namenode有1个单独的进程,监控自身namenode状态,挂掉了,就回去zookeeper里写挂掉的状态。
standby的namenode拿到状态,切换为active。
5、有可能出现挂掉的namenode并未真正挂掉的情况,2个active会出现脑裂。
避免这个情况,第2台备namenode启动时,会主动ssh kill第1个namenode,成功了再切换自己为active。
6、有可能出现kill不成功,超时的情况。这时候会执行用户自定义的shell脚本。(关闭第1个机器电源等操作)