HA背景
嘉定ssl適用于網(wǎng)站、小程序/APP、API接口等需要進(jìn)行數(shù)據(jù)傳輸應(yīng)用場(chǎng)景,ssl證書未來(lái)市場(chǎng)廣闊!成為創(chuàng)新互聯(lián)的ssl證書銷售渠道,可以享受市場(chǎng)價(jià)格4-6折優(yōu)惠!如果有意向歡迎電話聯(lián)系或者加微信:13518219792(備注:SSL證書合作)期待與您的合作!對(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的讀寫請(qǐng)求都是先經(jīng)過(guò)NN節(jié)點(diǎn)。(但是hbase的讀寫請(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)自客戶端的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腳本里,寫了:hdfs dfs -ls hdfs://ip1:9000/? ?,那么如果NN1掛了,NN2切換到active狀態(tài)了,但是在腳本里還是ip1,這個(gè)時(shí)候不可能手動(dòng)去修改??隙ㄓ袉?wèn)題。那么該怎么解決?
用命名空間來(lái)解決。命名空間不是進(jìn)程。比如:命名空間的名稱為:ruozeclusterg7
腳本里可以這樣寫: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(讀和寫請(qǐng)求的記錄)兩個(gè)文件,有專門的進(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)了,那么買機(jī)器的時(shí)候,可以單獨(dú)給zk買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)題了。
關(guān)于HA 架構(gòu)的官方文檔https://hadoop.apache.org/docs/stable/hadoop-project-dist/hadoop-hdfs/HDFSHighAvailabilityWithQJM.html
Architecture
翻譯:
一個(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)集群中所有的客戶端,備份狀態(tài)的NameNode只是作為一個(gè)副本,保證在必要的時(shí)候提供一個(gè)快速的轉(zhuǎn)移。
為了讓Standby Node與Active Node保持同步,這兩個(gè)Node都與一組稱為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)異常,這種情況通常稱為“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寫入日志記錄,這就阻止了其他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ù)量,或者小文件很多,讀寫請(qǐng)求很頻繁,那么journalnode就部署多一點(diǎn),如果HDFS很悠閑,那就部署少一點(diǎn),比如7個(gè)、9個(gè)這樣,可以大致和zk部署的保持一致(見(jiàn)上面)。具體要看實(shí)際情況。(也是2n+1,可以看官網(wǎng)上介紹)
ZKFC:zookeeperfailovercontrol
客戶端或者程序代碼在提交的時(shí)候,去namespace找,找NN節(jié)點(diǎn),如果第一次找的NN節(jié)點(diǎn)就是active,那么就用這個(gè)節(jié)點(diǎn),如果發(fā)現(xiàn)它是standby,就到另外一臺(tái)機(jī)器。
比如說(shuō)客戶端現(xiàn)在執(zhí)行put、get、ls、cat命令,這些操作命令的記錄,active NN節(jié)點(diǎn)會(huì)寫到自己的edit log日志里面。這些操作記錄,NN自己會(huì)寫一份,同時(shí),它會(huì)把這些操作記錄,寫給journalnode的node集群。
而另外的,standby NN節(jié)點(diǎn),會(huì)實(shí)時(shí)的讀journalnode的node集群,讀了之后會(huì)把這些記錄應(yīng)用到自己的本身。這個(gè)大數(shù)據(jù)的專業(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ú)論讀和寫,我們是通過(guò)命名空間RUOZEG6,去找誰(shuí)是active狀態(tài),找到了就在那臺(tái)機(jī)器上面,提交請(qǐng)求,然后就是HDFS的讀寫流程,讀和寫的操作記錄,edit log,它自己會(huì)寫一份,同時(shí)會(huì)把讀寫請(qǐng)求的操作記錄,寫一份到j(luò)ournalnode集群日志,進(jìn)行同步之后,另外一個(gè)節(jié)點(diǎn),standby 節(jié)點(diǎn)會(huì)把它拿過(guò)來(lái)實(shí)時(shí)的應(yīng)用到自己的本身。專業(yè)的名稱叫重演。同時(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讀和寫的操作記錄。
通過(guò)ZKFC集群選舉誰(shuí)是active。
監(jiān)控狀態(tài),自動(dòng)備援。
DN: 同時(shí)向NN1 NN2發(fā)送心跳和塊報(bào)告。
ACTIVE NN: 讀寫的操作記錄寫到自己的editlog
? ? ? ? ? ? ? ? ?同時(shí)寫一份到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ú)感知的,用戶是感覺(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寫一份,也向JN的共享存儲(chǔ)上的editlog寫一份。
也同時(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ù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。
分享標(biāo)題:HDFSHA架構(gòu)-創(chuàng)新互聯(lián)
分享URL:http://aaarwkj.com/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)容(圖片、視頻和文字)以用戶投稿、用戶轉(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)
猜你還喜歡下面的內(nèi)容