實現NN和RM的HA

2021-09-29 07:14:51 字數 1580 閱讀 8854

一、hdfs namenode ha

1、概述

​ 在hadoop1.0的時候,hdfs集群中namenode存在單點故障的問題,當namenode不可用的時候,就會導致整個hdfs集群服務不可用。另外如果需要臨時對namenode進行設計或者其他操作時,停掉namenode之後,hdfs集群也無法使用了。

​ 通過ha的方式,可以一定程度上解決單點故障問題。

2、namenode ha工作要點

1)元資料管理方式需要改變:

記憶體中各自儲存乙份元資料;

edits日誌只有active狀態的namenode節點可以做寫操作;

兩個namenode都可以讀取edits;

共享的edits放在乙個共享儲存中管理(**ournal和nfs兩個主流實現);

2)需要乙個狀態管理功能模組

hadoop實現了乙個zkfailover,常駐在每乙個namenode所在的節點,每乙個zkfailover負責監控自己所在namenode節點,利用zk進行狀態標識,當需要進行狀態切換時,由zkfailover來負責切換,切換時需要防止brain split現象的發生。

3)必須保證兩個namenode之間能夠ssh無密碼登入。用於後面的隔離。通過ssh方式到另外的namenode節點上,將namenode程序徹底殺死。防止腦裂。

4)隔離(fence),即同一時刻僅僅有乙個namenode對外提供服務

3、namenode ha自動故障轉移工作機制

namenode ha自動故障轉移除了要兩個namenode之外,還需要增加兩個元件:zookeeper集群服務,zkfailovercontroller(zkfc)。

zkfc會在zookeeper上建立乙個 /hadoop-ha/namenodeha集群名稱/ 這樣乙個節點,

該節點上有兩個子節點:

activebreadcrumb:

持久節點,節點的值中記錄了 ha集群名稱 active節點別名 active節點位址

主要用於其他想訪問namenode服務的client用於獲取active狀態的namenode位址,所以必須得是持久節點。

activestandbyelectorlock:

臨時節點,節點的值中記錄了 ha集群名稱 active節點別名 active節點位址。

起到互斥鎖的作用,只有獲取到該節點的使用權,才能修改上面activebreadcrumb節點的值。

因為是臨時節點,所以當active namenode和zk保持連線,該節點就會一直存在,而standby的namenode也是和zk保持連線,但是發現該臨時節點已存在,就明白已經有人占用了,所以它不會做任何事。當上面的active namenode發生問題,不正常了,zkfc就會斷開和zk的連線,那麼臨時節點就會消失。此時standby namenode就會重新建立該臨時節點,相當於獲得了鎖,可以修改activebreadcrumb的值。此時它自己也就順理成章變成新的active namenode。

3)基於zookeeper的選擇:

如果本地namenode是健康的,且zkfc發現沒有其它的節點當前持有znode鎖,它將為自己獲取該鎖。如果成功,則它已經贏得了選擇,並負責執行故障轉移程序以使它的本地namenode為active。

ZK實現HA和負載均衡

思路 zk做路由,client從zk那裡拿到可用的server位址 最好這裡做個快取 通過自己的負載均衡演算法得到要連線的位址,client去連線指定server,server要做的是,當server啟動後去zk註冊自己 建立臨時檔案 子節點變化 當某台server宕機,server與zk的鏈結會斷...

ORACLE RAC和HA的區別

ha,僅只是在作業系統層面進行資料庫的監控和管理,一般只針對單例項資料庫使用。優點是管理方便,應用開發方便 方便了開發商 工程投入較小。缺點是,具有所有單例項資料庫的缺點 如 容錯能力差,續航能力差,使用者容量小等等問題。rac,資料庫本身提供的一種單資料庫多例項的應用方式,優點是 1 使用靈活,即...

git rm 和 rm 的區別

用 git rm 來刪除檔案,同時還會將這個刪除操作記錄下來 用 rm 來刪除檔案,僅僅是刪除了物理檔案,沒有將其從 git 的記錄中剔除。直觀的來講,git rm 刪除過的檔案,執行 git commit m abc 提交時,會自動將刪除該檔案的操作提交上去。而對於用 rm 命令直接刪除的檔案,執...