一、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 命令直接刪除的檔案,執...