Hadoop HA架構詳解

2021-09-17 19:31:07 字數 1871 閱讀 4667

hdfs集群中的namenode存在單點故障因素。對於只有乙個namenode工作的集群來說,一旦namenode出現意外情況,會導致整個集群無法工作,直到namenode重新啟動。

為了解決上述問題,hadoop給出了高容錯,高可用的ha方案:乙個hdfs集群至少存在兩個namenode,乙個namenode處在active(主)狀態,其他namenode處在standby(備)狀態。一旦處於activate狀態的namenode發生意外,其他處於standby狀態的namenode立即搶占activate的臨時節點,代替發生意外的namenode繼續對外提供服務,從而保證了整個hdfs集群處在正常工作狀態。

想要備namenode接替主namenode工作,那麼必須保證備namenode和主namenode擁有相同的記憶體資料。

主namenode主要有以下資料需要進行頻繁同步:edits log(日誌)、block列表資訊以及datanode心跳檢測

2.1首先說日誌的同步:

同步edits log資料是借助第三方jnn( journal nodes )提供的服務。客戶端對主namenode操作,主namenode將edits log寫到jnn集群,備namenode從jnn集群上讀取資料,同步記憶體資料。可是主namenode發生意外,導致jnn集群上各伺服器上的資料不一致怎麼辦呢?jnn集群最少有三颱伺服器,一旦jnn伺服器上的資料不一致,立即進行投票選舉,通過過半機制保證資料的一致性(即以多數為準),捨掉與多數不一致的資料,然後在將資料同步給捨掉資料的伺服器,保證了資料的一致性。

2.2、介紹一下jnn

jnn的過半機制:

如果主namenode向三颱jnn寫資料,只要保證過半jnn寫成功,就返回成功, jnn根據過半機制,進行資料在三颱jnn上同步。

最終一致性:最終三颱jnn上的edits資訊是一致的。

jnn上的edits只能有一台namenode寫資訊,防止腦裂。

2.3、block列表的同步:

datanode主動向各台namenode傳送block列表資訊和心跳。從而保證了主備之間block的一致性。

2.4、合併檔案

原來hdfs上的secondarynamenode的合併fsimages(映象)與edits(日誌) 檔案的工作,現在交給備namenode進行,備用namenode一小時合併一次並推送給主namenode,在不滿一小時的情況下,如果edits檔案的操作達到100w,也要進行合併。

主namenode和備namenode的切換時自動切換的,通過zookeeper集群來完成!

首先新增zookeeper集群,在每個namenode上執行乙個zkfc程序(zkfc是zookeeper的客戶端)。zkfc要和zookeeper集群保持長連線和心跳。

在集群啟動的時候,兩個namenode都處於standby狀態, 兩個namenode的各自的zkfc要向zookeeper集群搶占建立乙個臨時節點,該臨時節點儲存了主namenode的資訊,哪個zkfc建立成功,則哪個zkfc所在主機上的namenode為主namenode。

namenode上的zkfc要監控主namenode建立的臨時節點,一旦主namenode出現故障,zkfc將刪除該臨時節點(實際上是因為主namenode上的zkfc不能和zookeeper集群保持心跳連線,臨時節點消失),臨時節點消失,則備namenode上的zkfc要向zookeeper集群搶占建立臨時節點,如果建立成功,備namenode公升級為主namenode。

在備份namenode公升級為主namenode之前,要和原來的namenode通訊,確保原來的namenode已經不能提供服務。如果原來的namenode是由於網路延遲等原因導致的臨時節點消失(也就是說還能提供服務),則殺死原來的namenode。

大資料之hadoopHA配置

前提 環境配置好了zookeeper環境 first step 開啟hadoopha的初始化 1.在各個節點上啟動journalnode sbin hadoop daemon.sh start journalnode在 nn1 上,對其進行格式化,並啟動bin hdfs namenode forma...

OpenStack架構詳解

目錄 一.openstack架構圖簡析 二.openstack四大節點 控制節點架構 計算節點架構 網路節點架構 儲存節點架構 三.openstack各大元件詳解 元件關係 nova keystone glance cidenr neutron swift horizon 注 具體服務名稱 mysq...

docker之hadoop HA高可用配置

搭建hadoop的高可用性,hadoop版本為2.6.5。hadoop的高可用配置有兩種方法,以下是我選擇配置的quorum journal manager qjm 的方法。quorum的高可用需要啟動奇數個 3 5 7等 journalnodes節點進行日誌的處理,活動namenode節點負責進行...