1. 程式人生 > >【2019春招準備:103. HA】

【2019春招準備:103. HA】

高可用叢集搭建:hdfs的HA + yarn的HA

1.HDFS的HA

prototype原型
問題:fsiamge很大,每次都需要傳輸,效能大幅度下降

在這裡插入圖片描述

改進1

【keepAlived】:解決靜態路由的單點故障問題

  • Keepalived的作用是檢測伺服器的狀態,如果有一臺web伺服器宕機,或工作出現故障,Keepalived將檢測到,並將有故障的伺服器從系統中剔除,同時使用其他伺服器代替該伺服器的工作,當伺服器工作正常後Keepalived自動將伺服器加入到伺服器群中
  • 起初專為LVS:配置管理、健康監測、高可用

【VRRP】(virtual router Redundancy Protocol 虛擬路由器冗餘協議):
幾臺路由器聯合成一個虛擬路由裝置,當網關出現故障,能夠選舉出一個新的閘道器保證可靠通訊。(master-backup)根據優先順序和ip進行選舉。

  • 問題:如果只是切換ip保證某一個NN和虛擬IP相對應,但是元資料同步是個大問題。Keepalived常見用在web伺服器上面,因為兩個完全相等,沒有資料差異(無狀態切換)。

改進2:

補充【RPC】remote procedure call
允許不同機器上的程序相互呼叫:A呼叫B的程序,A上面的掛起,B執行
dubbo也是基於rpc的實現
add例子:
在這裡插入圖片描述


一般說來是客戶端將呼叫類的名稱傳遞給服務端
引入第三方目標機器:伺服器向其註冊服務,客戶端向其獲取服務列表。
有同步rpc,也有非同步rpc(超時重試需要服務冪等性處理)
相同作用還有訊息佇列可以實現,不要求兩端同時執行,效能會高一些
在這裡插入圖片描述

在這裡插入圖片描述
1.每當一次更新操作來了之後,多執行緒(執行緒池)同步操作,namenode的edits和editscluster的每一個JournalNode節點。不用保證全部寫入成功,只要cluster上面多數臺寫入成功就可以了
2. Standby通過edits cluster進行讀取
3. Active和Standby兩者的狀態管理:需要一個東西來感知狀態,keepalived太low了,是通過指令碼的方式感知的。
4. RPC介面呼叫
5. 如果檢測到active節點沒有心跳了,將A(表示當前的左邊節點)刪除,A同時還被右邊的zkFC監控,一旦檢測到原來的沒有了 建立一個屬於右邊namenode的節點B(見Zookeeper分散式鎖


6. PRC呼叫,將原來standby(右邊的節點)變成active
7. 防止詐屍,強行將原來的namenode殺死:kill -9;如果還不行就呼叫使用者自定義的指令碼

2. YARN的HA

掛掉之後沒有影響,下次直接接著啟動就可以了,沒有儲存元資料
在這裡插入圖片描述