HDFSHA架構(gòu)-創(chuàng)新互聯(lián)

HA背景

嘉定ssl適用于網(wǎng)站、小程序/APP、API接口等需要進(jìn)行數(shù)據(jù)傳輸應(yīng)用場(chǎng)景,ssl證書(shū)未來(lái)市場(chǎng)廣闊!成為創(chuàng)新互聯(lián)的ssl證書(shū)銷(xiāo)售渠道,可以享受市場(chǎng)價(jià)格4-6折優(yōu)惠!如果有意向歡迎電話聯(lián)系或者加微信:13518219792(備注:SSL證書(shū)合作)期待與您的合作!

對(duì)于HDFS、YARN的每個(gè)角色都是一個(gè)進(jìn)程,

比如HDFS:NN/SNN/DN? ?老大是NN

YARN:RM/NM? ?老大是RM

對(duì)于上面,都會(huì)存在單點(diǎn)故障的問(wèn)題,假如老大NN或者RM掛了,那么就不能提供對(duì)外服務(wù)了,會(huì)導(dǎo)致整個(gè)集群都不能使用。

大數(shù)據(jù)幾乎所有的組建都是主從架構(gòu)(master-slave)。比如hdfs的讀寫(xiě)請(qǐng)求都是先經(jīng)過(guò)NN節(jié)點(diǎn)。(但是hbase的讀寫(xiě)請(qǐng)求不是經(jīng)過(guò)老大的master)。

hdfs:由NN/SNN/DN組成,SNN每小時(shí)會(huì)做一次checkpoint的操作,如果NN掛了,只能恢復(fù)到上次checkpoint的那一刻,不能實(shí)時(shí)?,F(xiàn)在如果把SNN的角色再提升一個(gè)等級(jí),讓它和NN一樣,如果NN掛了,SNN能立即切換過(guò)來(lái)就好了。

HDFS HA 架構(gòu) 有兩個(gè)NN節(jié)點(diǎn),一個(gè)是active活躍狀態(tài),一個(gè)是standby準(zhǔn)備狀態(tài),Active NameNode對(duì)外提供服務(wù),比如處理來(lái)自客戶(hù)端的RPC請(qǐng)求,而Standby NameNode則不對(duì)外提供服務(wù),僅同步Active NameNode的狀態(tài),對(duì)Active NameNode進(jìn)行實(shí)時(shí)備份,以便能夠在它失敗時(shí)快速進(jìn)行切換。

HA介紹

HDFS High Availability (HA)?

假定:

NN1 active? ? ? ?ip1

NN2 standby? ? ip2

假如說(shuō)在我們代碼或者shell腳本里,寫(xiě)了:hdfs dfs -ls hdfs://ip1:9000/? ?,那么如果NN1掛了,NN2切換到active狀態(tài)了,但是在腳本里還是ip1,這個(gè)時(shí)候不可能手動(dòng)去修改??隙ㄓ袉?wèn)題。那么該怎么解決?

用命名空間來(lái)解決。命名空間不是進(jìn)程。比如:命名空間的名稱(chēng)為:ruozeclusterg7

腳本里可以這樣寫(xiě):hdfs dfs -ls hdfs://ruozeclusterg7/

當(dāng)代碼執(zhí)行到這一行時(shí),它會(huì)去core-site.xml、hdfs-site.xml里面查找。在這兩個(gè)配置文件里面,配置了ruozeclusterg7命名空間下掛了NN1和NN2。當(dāng)它找到NN1,它會(huì)嘗試著連接第一個(gè)機(jī)器NN1,如果發(fā)現(xiàn)它不是active狀態(tài),它會(huì)嘗試著連接第二個(gè)機(jī)器NN2,如果發(fā)現(xiàn)NN1是active狀態(tài),就直接用了。

HA 進(jìn)程:(假定我們現(xiàn)在有三臺(tái)機(jī)器)

hadoop001:ZK? ? NN? ZKFC? JN? ? DN

hadoop002:ZK? ? NN? ZKFC? JN? ? DN

hadoop003:ZK? ? ? ? ? ? ? ? ? ? ? ?JN? ? DN

NN節(jié)點(diǎn)有fsimage、editlog(讀和寫(xiě)請(qǐng)求的記錄)兩個(gè)文件,有專(zhuān)門(mén)的進(jìn)程去管理的,這個(gè)進(jìn)程是JN(journalnode)日志節(jié)點(diǎn),要保證NN1和NN2能實(shí)時(shí)同步,需要JN這個(gè)角色。

如果NN1掛了,需要把NN2從standby狀態(tài)切換到active狀態(tài),那它是怎么切換的呢?需要ZKFC。

ZKFC: 是單獨(dú)的進(jìn)程,它監(jiān)控NN健康狀態(tài),向zk集群定期發(fā)送心跳,使得自己可以被選舉;當(dāng)自己被zk選舉為active的時(shí)候,zkfc進(jìn)程通過(guò)RPC協(xié)議調(diào)用使NN節(jié)點(diǎn)的狀態(tài)變?yōu)閍ctive。對(duì)外提供實(shí)時(shí)服務(wù),是無(wú)感知的。

所以在上面,需要在三臺(tái)機(jī)器上都部署一下zookeeper,作為一個(gè)集群,ZK集群,是用于做選舉的。選舉誰(shuí)來(lái)做老大(active),誰(shuí)做standby。集群中ZK的個(gè)數(shù)是2n+1,這樣能投票保證最后有一個(gè)勝出。

生產(chǎn)上zookeeper部署的個(gè)數(shù)經(jīng)驗(yàn):如果集群中有20臺(tái)節(jié)點(diǎn),那么可以在5臺(tái)上部署zk。如果總共有七八臺(tái),也部署5臺(tái)zk。如果總共有20~100臺(tái)節(jié)點(diǎn),可以部署7臺(tái)/9臺(tái)/11臺(tái) zk。如果大于100臺(tái),可以部署11臺(tái)zk。如果有很多,比如上萬(wàn)臺(tái)那看情況可以多部署幾臺(tái)。但是,不是說(shuō)zk節(jié)點(diǎn)越多越好。因?yàn)樽鐾镀边x舉動(dòng)作的時(shí)候,投票誰(shuí)做active,誰(shuí)做standby是需要時(shí)間的,時(shí)間間隔太長(zhǎng)會(huì)影響對(duì)外服務(wù),對(duì)外服務(wù)會(huì)很慢,對(duì)于即時(shí)性 的服務(wù)來(lái)說(shuō),這是不允許的。

他們的集群有很多臺(tái),比如幾百臺(tái)幾千臺(tái),zk部署的機(jī)器上就它一個(gè)進(jìn)程,不部署其它進(jìn)程了。在這里是學(xué)習(xí)或者機(jī)器很少,所以一臺(tái)機(jī)器上部署多個(gè)進(jìn)程。如果幾百臺(tái)節(jié)點(diǎn),任務(wù)很重,如果部署zk的機(jī)器上有其它進(jìn)程,那么它會(huì)消耗很多機(jī)器上的資源(無(wú)外乎cpu、內(nèi)存、文件數(shù)、進(jìn)程數(shù)),這都會(huì)影響zk響應(yīng)的速度,所以一般都會(huì)把它獨(dú)立出來(lái)。但是如果機(jī)器是256G內(nèi)存,但是zk只用到32G,那其他的就浪費(fèi)了,那么買(mǎi)機(jī)器的時(shí)候,可以單獨(dú)給zk買(mǎi)32G內(nèi)存的機(jī)器就可以了。

zk是最底層的,如果zk太繁忙,就可能導(dǎo)致standby狀態(tài)不能切換到active狀態(tài),這個(gè)時(shí)候機(jī)器可能就會(huì)夯住。所以當(dāng)機(jī)器夯住,standby不能切換到active的時(shí)候,有可能就是zk出問(wèn)題了。

HDFS HA 架構(gòu)圖

HDFS HA架構(gòu)

關(guān)于HA 架構(gòu)的官方文檔https://hadoop.apache.org/docs/stable/hadoop-project-dist/hadoop-hdfs/HDFSHighAvailabilityWithQJM.html


Architecture
In a typical HA cluster, two or more separate machines are configured as NameNodes. At any point in time, exactly one of the NameNodes is in an Active state, and the others are in a Standby state. The Active NameNode is responsible for all client operations in the cluster, while the Standbys are simply acting as workers, maintaining enough state to provide a fast failover if necessary.
In order for the Standby node to keep its state synchronized with the Active node, both nodes communicate with a group of separate daemons called “JournalNodes” (JNs). When any namespace modification is performed by the Active node, it durably logs a record of the modification to a majority of these JNs. The Standby node is capable of reading the edits from the JNs, and is constantly watching them for changes to the edit log. As the Standby Node sees the edits, it applies them to its own namespace. In the event of a failover, the Standby will ensure that it has read all of the edits from the JournalNodes before promoting itself to the Active state. This ensures that the namespace state is fully synchronized before a failover occurs.
In order to provide a fast failover, it is also necessary that the Standby node have up-to-date information regarding the location of blocks in the cluster. In order to achieve this, the DataNodes are configured with the location of all NameNodes, and send block location information and heartbeats to all.
It is vital for the correct operation of an HA cluster that only one of the NameNodes be Active at a time. Otherwise, the namespace state would quickly diverge between the two, risking data loss or other incorrect results. In order to ensure this property and prevent the so-called “split-brain scenario,” the JournalNodes will only ever allow a single NameNode to be a writer at a time. During a failover, the NameNode which is to become active will simply take over the role of writing to the JournalNodes, which will effectively prevent the other NameNode from continuing in the Active state, allowing the new Active to safely proceed with failover.

翻譯:

一個(gè)典型的HA集群,NameNode會(huì)被配置在2臺(tái)或更多 獨(dú)立的機(jī)器上,在任何時(shí)間上,一個(gè)NameNode處于活動(dòng)狀態(tài),而另一個(gè)NameNode處于備份狀態(tài),活動(dòng)狀態(tài)的NameNode會(huì)響應(yīng)集群中所有的客戶(hù)端,備份狀態(tài)的NameNode只是作為一個(gè)副本,保證在必要的時(shí)候提供一個(gè)快速的轉(zhuǎn)移。

為了讓Standby Node與Active Node保持同步,這兩個(gè)Node都與一組稱(chēng)為JNS的互相獨(dú)立的進(jìn)程保持通信(Journal Nodes)。當(dāng)Active Node上更新了namespace,它將記錄修改日志發(fā)送給JNS的多數(shù)派。Standby noes將會(huì)從JNS中讀取這些edits,并持續(xù)關(guān)注它們對(duì)日志的變更。Standby Node將日志變更應(yīng)用在自己的namespace中,當(dāng)failover發(fā)生時(shí),Standby將會(huì)在提升自己為Active之前,確保能夠從JNS中讀取所有的edits,即在failover發(fā)生之前Standy持有的namespace應(yīng)該與Active保持完全同步。

為了支持快速failover,Standby node持有集群中blocks的最新位置是非常必要的。為了達(dá)到這一目的,DataNodes上需要同時(shí)配置這兩個(gè)Namenode的地址,同時(shí)和它們都建立心跳鏈接,并把block位置發(fā)送給它們。

任何時(shí)刻,只有一個(gè)Active NameNode是非常重要的,否則將會(huì)導(dǎo)致集群操作的混亂,那么兩個(gè)NameNode將會(huì)分別有兩種不同的數(shù)據(jù)狀態(tài),可能會(huì)導(dǎo)致數(shù)據(jù)丟失,或者狀態(tài)異常,這種情況通常稱(chēng)為“split-brain”(腦裂,三節(jié)點(diǎn)通訊阻斷,即集群中不同的Datanodes卻看到了兩個(gè)Active NameNodes)。對(duì)于JNS而言,任何時(shí)候只允許一個(gè)NameNode作為writer;在failover期間,原來(lái)的Standby Node將會(huì)接管Active的所有職能,并負(fù)責(zé)向JNS寫(xiě)入日志記錄,這就阻止了其他NameNode基于處于Active狀態(tài)的問(wèn)題。

首先要部署三臺(tái)zk,然后要兩臺(tái)NN節(jié)點(diǎn),然后三臺(tái)DN節(jié)點(diǎn)。兩個(gè)NN節(jié)點(diǎn)之間的編輯日志需要jn來(lái)維護(hù),做共享數(shù)據(jù)存儲(chǔ)。

journalnode(jn): 部署多少合適?取決于HDFS請(qǐng)求量及數(shù)據(jù)量,比如說(shuō)BT級(jí)的數(shù)據(jù)量,或者小文件很多,讀寫(xiě)請(qǐng)求很頻繁,那么journalnode就部署多一點(diǎn),如果HDFS很悠閑,那就部署少一點(diǎn),比如7個(gè)、9個(gè)這樣,可以大致和zk部署的保持一致(見(jiàn)上面)。具體要看實(shí)際情況。(也是2n+1,可以看官網(wǎng)上介紹)

ZKFC:zookeeperfailovercontrol

客戶(hù)端或者程序代碼在提交的時(shí)候,去namespace找,找NN節(jié)點(diǎn),如果第一次找的NN節(jié)點(diǎn)就是active,那么就用這個(gè)節(jié)點(diǎn),如果發(fā)現(xiàn)它是standby,就到另外一臺(tái)機(jī)器。

比如說(shuō)客戶(hù)端現(xiàn)在執(zhí)行put、get、ls、cat命令,這些操作命令的記錄,active NN節(jié)點(diǎn)會(huì)寫(xiě)到自己的edit log日志里面。這些操作記錄,NN自己會(huì)寫(xiě)一份,同時(shí),它會(huì)把這些操作記錄,寫(xiě)給journalnode的node集群。

而另外的,standby NN節(jié)點(diǎn),會(huì)實(shí)時(shí)的讀journalnode的node集群,讀了之后會(huì)把這些記錄應(yīng)用到自己的本身。這個(gè)大數(shù)據(jù)的專(zhuān)業(yè)名詞叫做:重演。 相當(dāng)于standby NN節(jié)點(diǎn)把a(bǔ)ctive NN節(jié)點(diǎn)的active狀態(tài)的操作記錄在自己身上重演一遍。

journalnode:它是一個(gè)集群,就是用于active NN節(jié)點(diǎn)和standby NN節(jié)點(diǎn)之間同步數(shù)據(jù)的。它是單獨(dú)的進(jìn)程。

NN和ZKFC在同一臺(tái)機(jī)器上面。

整個(gè)過(guò)程描述:當(dāng)通過(guò)client端提交請(qǐng)求的時(shí)候,無(wú)論讀和寫(xiě),我們是通過(guò)命名空間RUOZEG6,去找誰(shuí)是active狀態(tài),找到了就在那臺(tái)機(jī)器上面,提交請(qǐng)求,然后就是HDFS的讀寫(xiě)流程,讀和寫(xiě)的操作記錄,edit log,它自己會(huì)寫(xiě)一份,同時(shí)會(huì)把讀寫(xiě)請(qǐng)求的操作記錄,寫(xiě)一份到j(luò)ournalnode集群日志,進(jìn)行同步之后,另外一個(gè)節(jié)點(diǎn),standby 節(jié)點(diǎn)會(huì)把它拿過(guò)來(lái)實(shí)時(shí)的應(yīng)用到自己的本身。專(zhuān)業(yè)的名稱(chēng)叫重演。同時(shí)每個(gè)DataNode會(huì)向NameNode節(jié)點(diǎn)發(fā)送心跳的塊報(bào)告(心跳的間隔時(shí)間3600s,就是1小時(shí),參數(shù)是什么(面試))。當(dāng)active NN節(jié)點(diǎn)掛了,通過(guò)zk集群選舉(它存儲(chǔ)了NN節(jié)點(diǎn)的狀態(tài)),通知ZKFC,把standby NN節(jié)點(diǎn)切換到active狀態(tài)。ZKFC會(huì)定期的發(fā)送心跳。

ps:

HA是為了解決單點(diǎn)故障問(wèn)題。

通過(guò)journalnode集群共享狀態(tài),也就是共享hdfs讀和寫(xiě)的操作記錄。

通過(guò)ZKFC集群選舉誰(shuí)是active。

監(jiān)控狀態(tài),自動(dòng)備援。

DN: 同時(shí)向NN1 NN2發(fā)送心跳和塊報(bào)告。

ACTIVE NN: 讀寫(xiě)的操作記錄寫(xiě)到自己的editlog

? ? ? ? ? ? ? ? ?同時(shí)寫(xiě)一份到JN集群

? ? ? ? ? ? ? ? ?接收DN的心跳和塊報(bào)告

STANDBY NN: 同時(shí)接收J(rèn)N集群的日志,顯示讀取執(zhí)行l(wèi)og操作(重演),使得自己的元數(shù)據(jù)和active nn節(jié)點(diǎn)保持一致。

? ? ? ? ? ? ? ? ? ? 接收DN的心跳和塊報(bào)告

JounalNode: 用于active nn和 standby nn節(jié)點(diǎn)的數(shù)據(jù)同步, 一般部署2n+1

ZKFC: 單獨(dú)的進(jìn)程

? ? ? ?監(jiān)控NN監(jiān)控健康狀態(tài)

? ? ? ?向zk集群定期發(fā)送心跳,使得自己可以被選舉;

? ? ? ?當(dāng)自己被zk選舉為active的時(shí)候,zkfc進(jìn)程通過(guò)RPC協(xié)議調(diào)用使NN節(jié)點(diǎn)的狀態(tài)變?yōu)閍ctive,只有是

active狀態(tài)才能對(duì)外提供服務(wù)。

? ? ? ?對(duì)外提供實(shí)時(shí)服務(wù),是無(wú)感知的,用戶(hù)是感覺(jué)不到的。

總結(jié)

HDFS HA架構(gòu)圖 以三臺(tái)機(jī)器 為例

HA使用active NN,standby NN兩個(gè)節(jié)點(diǎn)解決單點(diǎn)問(wèn)題。

兩個(gè)NN節(jié)點(diǎn)通過(guò)JN集群,共享狀態(tài),

通過(guò)ZKFC選舉active,監(jiān)控狀態(tài),自動(dòng)備援。

DN會(huì)同時(shí)向兩個(gè)NN節(jié)點(diǎn)發(fā)送心跳

active nn:

接收client的rpc請(qǐng)求并處理,同時(shí)自己editlog寫(xiě)一份,也向JN的共享存儲(chǔ)上的editlog寫(xiě)一份。

也同時(shí)接收DN的block report,block location updates 和 heartbeat

standby nn:

同樣會(huì)接受到從JN的editlog上讀取并執(zhí)行這些log操作,使自己的NN的元數(shù)據(jù)和activenn的元數(shù)據(jù)是同步的,

使用說(shuō)standby是active nn的一個(gè)熱備。一旦切換為active狀態(tài),就能夠立即馬上對(duì)外提供NN角色的服務(wù)。

也同時(shí)接收DN的block report,block location updates 和 heartbeat

jn:

用于active nn,standby nn 的同步數(shù)據(jù),本身由一組JN節(jié)點(diǎn)組成的集群,奇數(shù),CDH3臺(tái)起步,是支持Paxos協(xié)議。

保證高可用

ZKFC作用:

1.監(jiān)控NameNode狀態(tài),ZKFC會(huì)定期向ZK發(fā)送心跳,使自己被選舉,當(dāng)自己被ZK選舉為主時(shí),我們的ZKFC進(jìn)程通過(guò)rpc調(diào)用,讓nn轉(zhuǎn)換為active狀態(tài)。

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無(wú)理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性?xún)r(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專(zhuān)為企業(yè)上云打造定制,能夠滿足用戶(hù)豐富、多元化的應(yīng)用場(chǎng)景需求。

分享標(biāo)題:HDFSHA架構(gòu)-創(chuàng)新互聯(lián)
分享URL:http://muchs.cn/article48/ddosep.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供自適應(yīng)網(wǎng)站、網(wǎng)站內(nèi)鏈、動(dòng)態(tài)網(wǎng)站、外貿(mào)建站定制網(wǎng)站、服務(wù)器托管

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

成都網(wǎng)站建設(shè)