雙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個機器電源等操作)