高可用HA的namenode執行機制

2021-08-23 14:22:54 字數 2116 閱讀 3354

那麼下面我再詳細介紹一下:

hdfs 是乙個分布式檔案系統,有namenode和datanode,我們都知道,一旦namenode蕩機,整個集群就會癱瘓,那麼這個問題怎麼處理:

一般我們都會有兩個namenode,我們知道有乙個secondary namenode,但是我們知道這個namenode並不能執行namenode的功能,他只是幫namenode做操作日誌的合併,所以我們需要另一種部署模式,即ha部署模式

ha部署模式,是一種高可用部署模式,也就是一天24小時都在工作,他有兩個namenode。namenode記錄的是元資料,這個元資料放在記憶體中, 在磁碟上有乙個映象檔案,這個映象檔案是fsimage+編號,還有大量的操作日誌叫做edits+編號,兩個編號都是對應起來的,而且記憶體裡面的元資料都是齊全的,兩個namenode只有乙個是對客戶端服務的,另外乙個用來備份,對外服務的狀態成為active,備份的是standby,如果有一天active namenode蕩機了,standby要接管對外服務,但是它還沒有元資料,那麼這個問題怎麼解決的。

如果active namenode蕩機,standby要立馬接管,意味著這兩個的元資料必須要時刻同步,如果是standby namenode經常性的去active拷貝元資料資訊,那麼這樣對active namenode的壓力是很大的,所以首先,一開始格式化的時候,生成乙個最初的元資料,先給standby拷貝乙份,在執行的過程中,日誌不僅在自己的磁碟上,還放在乙個 日誌儲存 系統中,standby定期的去從日誌儲存系統中拿取日誌檔案,並且和最初的元資料fsimage進行合併,生成乙個新的映象,如果差下那麼一點日誌沒有合併到,就在這一瞬間,active namenode蕩機了,然後standby namenode會從日誌儲存系統拿取缺少的那一塊日誌,與原來的元資料進行合併,進行更新,這樣狀態就和active namenode的狀態是一致的,這樣就可以很快的接手對外服務。

日誌儲存系統:

這是個很重要的,這個系統是不能掛掉的,這個系統不是乙個單節點,這個系統也是乙個集群,裡面有很多臺機器,這個集群也是基數臺,而且每台之間會同步日誌,這樣一來,日誌儲存系統的可用性就會很高了,資料同步的演算法和zookeeper是一樣的,即資料在多個節點之間同步,採用的是paxos演算法,多數成立則成立,所以這個日誌儲存系統最多可以掛掉半數以下的機器,這個系統叫做qjournal,底層的功能依賴zookeeper集群,這兩個集群在業務上沒關係,只是利用zookeeper,就像hbase依賴zookeeper一樣。

但是現在有乙個問題,就是active namenode這台機器掛掉之後,standby namenode這台機器是怎麼知道的,active namenode 可以在zookeeper上記載東西,然後standby去監聽,一旦這個active namenode不見了,那麼就說明掛了,這是一種方法。

官方是這麼做的,提供了乙個額外的程式,叫做zkfc,就是基於zookeeper實現的failover controller,故障控制器,執行在namenode機器上監控namenode的程序並且把監控資訊記錄在zookeeper中,standby 機器也會執行zkfc,監控自己機器上的程序,也會監聽zookeeper裡面的另乙個zkfc寫的東西,一旦發生變化,得到zookeeper的通知,就可以呼叫方法,將自己的狀態從standby切換成active狀態,然後開始對外服務,但是問題沒有那麼簡單,有時候jvm會凍結這個namenode,zkfc以為namenode掛掉了,其實只是清理以及維護,但是這樣的話,zkfc將將狀態提交給zookeeper,然後standby namenode會收到zookeeper的通知,那就切換狀態了,這就完了,就將存在兩個active namenode,這樣系統會錯亂。

這裡還有乙個機制,就是當standby namenode收到通知切換狀態的時候,先不著急切換,而是先採取措施確保防止這種系統的紊亂,首先會做兩件事。

1.通過ssh遠端指令,殺掉active namenode 的程序,但是如果不僅僅是namenode掛了,而是整個機器掛了,那傳送的指令

就不會有反應,也不會有反饋資訊,

2.那麼如果ssh沒有響應,則幫使用者呼叫乙個使用者所指定的指令碼,指令碼執行成功,則切換狀態

做完這兩件事,狀態就切換成功了,這就是ha高可用集群執行機制。

希望我講清楚了......

高可用HA配置

注意 在此之前zookeeper要配置好 1.首先我們修改core site.xml檔案 1 指定hdfs的nameservice為mycluster fs.defaultfs hdfs mycluster 2 指定hadoop臨時目錄 hadoop.tmp.dir home master hado...

HDFS的HA 高可用

問題 namenode是單節點的,容易發生單點故障。在hadoop2.x之後,可以部署兩個namenode,乙個active 活躍的 另外乙個是standby 備份的 如果要實現這種高可用,需要解決兩個問題 1.資料的同步 資料的同步包括兩部分 靜態資料和動態資料,靜態資料是指元資料資訊 塊名稱,大...

NameNode中的高可用方案

nn中元資料的可靠性是可以保證的,但是其可用性並不高,因為namenode是單節點的,所以一旦這個節點不能工作,那麼整個hdfs都不能工作,但是由於secondarynamenode的機制,所以,即便namenode不能工作,元資料也不會丟失,人為介入之後是可以恢復的,不會導致資料丟失。因此可靠性高...