無單點(diǎn)故障高性能LAMP集群的構(gòu)建_第1頁
無單點(diǎn)故障高性能LAMP集群的構(gòu)建_第2頁
無單點(diǎn)故障高性能LAMP集群的構(gòu)建_第3頁
無單點(diǎn)故障高性能LAMP集群的構(gòu)建_第4頁
無單點(diǎn)故障高性能LAMP集群的構(gòu)建_第5頁
已閱讀5頁,還剩64頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

無單點(diǎn)故障高性能LAMP集群的構(gòu)建PAGE6無單點(diǎn)故障高性能LAMP集群的構(gòu)建摘要隨著計(jì)算機(jī)技術(shù)的泛的應(yīng)用,人們對(duì)其的依賴程度越來越高,計(jì)算機(jī)的可靠性和可用性便顯得由為重要。盡管單臺(tái)計(jì)算機(jī)的性能和可靠性在不斷提升,但還是有許多現(xiàn)實(shí)要求是單臺(tái)計(jì)算機(jī)難以完成的。自從1994年首次采用Beowulf集群以來,集群技術(shù)被廣泛應(yīng)用。集群系統(tǒng)在用戶面前表現(xiàn)為單一系統(tǒng)映像。連接在網(wǎng)絡(luò)上的一組PC不具有集群計(jì)算機(jī)資格,為了構(gòu)成集群計(jì)算機(jī),這些獨(dú)立PC必須運(yùn)行可以利用其他計(jì)算機(jī)的軟件,使它們像一個(gè)團(tuán)隊(duì)那樣為了共同的目標(biāo)協(xié)同工作。本文以目前最流行的web框架LAMP(Linux-Apache-MySQL-PHP)為研究對(duì)象,提出了一套高可用并且高性能的集群架構(gòu)。整個(gè)架構(gòu)分為5層,既分發(fā)層,web層,共享存儲(chǔ)層,代理層和數(shù)據(jù)庫層。層與層之間相互關(guān)聯(lián),共同對(duì)外提供唯一的服務(wù)訪問入口。論文首先對(duì)各層使用到的技術(shù)做了概括性的介紹,隨后依次進(jìn)行了展開,分別給出了每層工作原理和實(shí)現(xiàn)過程。此后在整個(gè)系統(tǒng)上安裝PHP論壇,驗(yàn)證了系統(tǒng)能夠正常工作,然后與單一架構(gòu)進(jìn)行了分析對(duì)比,給出了性能測(cè)試,測(cè)試出其性能有了顯著提高。最后,論文提供無單點(diǎn)故障的測(cè)試視頻,從而驗(yàn)證整個(gè)集群的高可用得以實(shí)現(xiàn)。關(guān)鍵字:集群,代理,共享存儲(chǔ),數(shù)據(jù)庫

TheConstructionofhighavailabilityandhighperformanceLAMPclusterabstractWiththedevelopmentofcomputertechnologyanditswideapplication,ourdependencyonthecomputertechnologybecomesmoreandmorehigh.Computer’sreliabilityandavailabilityarebecomingmoreimportant.Thoughasinglecomputer’scapabilityandreliabilityisbecomingbetter,Butasinglecomputercan’tcompletesomerequeststill.Since1994,thefirstuseofBeowulfclusters,clustertechnologyhasbeenwidelyapplied.Clustersystembehavesasasinglesystemimageinfrontoftheuser.AgroupofPCconnectionsinthenetworkdoesnothavethequalificationofcluster.Inordertoconstituteaclustercomputer,thePCofeachstationmustrunasoftware,whichcanuseothercomputerandmakethemasateam,toacommongoalofmutualsupport.ThepapertakesLAMPwebframework(Linux-Apache-MySQL-PHP)astheresearchobject,putforwardasetofhighavailabilityandhighperformanceclusterarchitecture.Thewholestructureisdividedinto5layers.thedistributionlayer,weblayer,sharedstoragelayer,agentlayer,anddatabaselayer.Thereisacloserelationshipbetweeneachlayer,andtheyprovidesauniqueserviceentrance。Thepaperhasmakeageneralintroductiontothesystem.Thenitintroducestheworkingprincipleofeachlayerandtherealizationoftheprocess.IalsoinstallthePHPforuminthewholesystem,toverifywhetheritcanworknormally,andthengivestestreportoftheperformance,andcomparedwiththesinglearchitecture,testingitsperformanceimprovedsignificantly.Finally,Thispaperprovidesnosinglepointoffailuretestscreen,thusverifyingthewholeclusterhighavailabilityisachieved.Keywords:cluster,proxy,sharestorage,database

目錄1.緒論 11.1研究背景 11.2研究現(xiàn)狀 11.3研究意義 21.4研究內(nèi)容 21.5論文結(jié)構(gòu) 41.6本章小結(jié) 42.負(fù)載均衡集群組成的web應(yīng)用 52.1負(fù)載均衡集群技術(shù) 52.1.1什么是負(fù)載均衡 52.1.2以LVS作為負(fù)載均衡器 52.2理解LVS的原理 62.2.1LVSweb應(yīng)用的體系結(jié)構(gòu) 62.2.2LVS的負(fù)載調(diào)度算法 82.3LVS的DR路由方式 92.3.1LVS的地址概念 92.3.1VS-DR直接路由方式 102.4關(guān)于LVS的一些補(bǔ)充 132.4.1LVS調(diào)度算法對(duì)服務(wù)器的加權(quán) 132.42LVS調(diào)度持續(xù)性和防火墻標(biāo)記…………….132.5LVS負(fù)載均衡集群實(shí)現(xiàn)概述 152.6本章小結(jié) 173.基于iscsi的共享存儲(chǔ)存儲(chǔ)層 183.1NAS和SAN 183.2iscsi技術(shù)研究 193.2.1iscsi的報(bào)文格式 193.2.2iscsi協(xié)議棧模型 203.2.3發(fā)起端-目標(biāo)器模型 213.2.4iscsi命名規(guī)范 213.2.5Initiator端導(dǎo)入設(shè)備 223.3LVM實(shí)現(xiàn)存儲(chǔ)的動(dòng)態(tài)擴(kuò)展和冗余 243.3.1LVM技術(shù)簡(jiǎn)介 253.3.2LVM的組成 253.3.3基于集群的LVM技術(shù) 263.4GFS2集群文件系統(tǒng) 264.高可用的mysql-proxy代理 304.1mysql-proxy 304.1.1為什么要實(shí)現(xiàn)讀寫分離 304.1.2mysql-proxy簡(jiǎn)介 304.2高可用的mysql-proxy集群 334.2.1HA集群的概念 334.2.2Linux高可用性集群的相關(guān)技術(shù)概念 344.2.3readhat高可用集群的所需的相關(guān)組件 344.2.4高可用mysql-proxy集群的簡(jiǎn)單說明 374.3本章小結(jié) 405.高可用的mysql集群 415.1mysql的replication 425.1.1復(fù)制的概述 425.1.2主主復(fù)制和主從復(fù)制 445.2mysql-mmm架構(gòu) 465.2.1mysql-mmm簡(jiǎn)介 465.2.2VIP和角色的分配 475.2.3各成員的狀態(tài) 495.3本章小結(jié) 516.性能測(cè)試 526.1測(cè)試工具介紹 526.2測(cè)試環(huán)境 526.3測(cè)試方法 546.4主要性能指標(biāo)說明 546.5數(shù)據(jù)采集結(jié)果 586.6.測(cè)試結(jié)果總結(jié) 607.總結(jié)與展望 617.1總結(jié) 617.2展望 61參考文獻(xiàn) 62致謝 63PAGE631.緒論1.1研究背景作為目前企業(yè)服務(wù)器市場(chǎng)的主流操作系統(tǒng),linux在最近幾年得到了快速發(fā)展。由linux,apache,mysql,php、perl或者python組成的lamp網(wǎng)站架構(gòu),也逐步受到更多流行商業(yè)應(yīng)用的青睞,成為國際流行的web框架。相較于Java/J2EE,lamp具有資源豐富、快速開發(fā)和輕量等特點(diǎn)。和微軟的net架構(gòu)相比,lamp的跨平臺(tái)、低價(jià)格、通用性強(qiáng)的優(yōu)勢(shì)又顯現(xiàn)出來。因此,無論從質(zhì)量、性能,或是價(jià)格等各方面的因素考慮,lamp都成為企業(yè)網(wǎng)站的首選架構(gòu)。隨著企業(yè)信息系統(tǒng)的快速發(fā)展,用戶的核心應(yīng)用數(shù)量越來越多,此時(shí)企業(yè)自然會(huì)對(duì)其業(yè)務(wù)系統(tǒng)有著更高要求,而高穩(wěn)定性,高可靠性就成了重要的評(píng)判標(biāo)準(zhǔn)。單一的lamp架構(gòu)自然無法適應(yīng)企業(yè)日益增長的業(yè)務(wù)需求,在這種趨勢(shì)下,分布式應(yīng)用系統(tǒng)逐步走進(jìn)人們的視野,多節(jié)點(diǎn)高性能的集群系統(tǒng)被廣泛接受,企業(yè)的應(yīng)用進(jìn)入了高性能時(shí)代。截止到目前,主要IT廠商如IBM,HP已經(jīng)在對(duì)基于linux的開源集群產(chǎn)品進(jìn)行研發(fā),集群軟件也逐步從之前高端的UNIX平臺(tái)逐步走向linux平臺(tái),linux由此邁入企業(yè)應(yīng)用的高端市場(chǎng)。1.2研究現(xiàn)狀上世紀(jì)90年代末,linux操作系統(tǒng)逐步趨于成熟,除了提供標(biāo)準(zhǔn)化的PVM、MPI消息傳遞機(jī)制,其健壯性也得到不斷增強(qiáng),而在普通的PC機(jī)上,linux也提供了對(duì)高新能網(wǎng)絡(luò)的支持,這些都成為推動(dòng)linux集群技術(shù)發(fā)展的重要因素。早在90年代,包括中國科學(xué)院在內(nèi)的科研機(jī)構(gòu)與大學(xué)就開始了基于linux集群的研究,很多大公司,如聯(lián)想等都有自己的linux產(chǎn)品和解決方案,淘寶,百度,谷歌其后臺(tái)也都在采用linux集群技術(shù),其中谷歌在05年的時(shí)候就已經(jīng)達(dá)到了200萬臺(tái),與此同時(shí),在保險(xiǎn),金融、電信等企業(yè),linux集群技術(shù)也得到了廣泛使用。集群技術(shù)隨著開放源代碼的迅猛發(fā)展,有了更好的技術(shù)平臺(tái)。目前的集群解決方案種類繁多,有基于純軟件的,也有基于硬件的,每種解決方案都有其自身的優(yōu)勢(shì),而如何選擇適合自己,并且性價(jià)比相對(duì)較高的集群解決方案,是每個(gè)系統(tǒng)架構(gòu)師需要考慮的問題。1.3研究意義在這個(gè)以網(wǎng)絡(luò)為中心的計(jì)算機(jī)時(shí)代,客戶/服務(wù)器模型得益于其簡(jiǎn)單、易管理等特點(diǎn)在互聯(lián)網(wǎng)上被廣泛使用。上世紀(jì)90年代中期,萬維網(wǎng)的出現(xiàn)將互聯(lián)網(wǎng)的信息生動(dòng)地傳遞給普通大眾,web正從一種發(fā)送機(jī)制向一種服務(wù)平臺(tái)進(jìn)行轉(zhuǎn)變。目前大部分的服務(wù)和應(yīng)用都是圍繞web進(jìn)行,這促使互聯(lián)網(wǎng)用戶數(shù)量在最近幾年得到爆炸性增長。目前,大量的CPU密集型應(yīng)用運(yùn)行于web服務(wù)中,如動(dòng)態(tài)主頁等。同時(shí),用戶對(duì)交互性、安全性需求的不斷提高對(duì)服務(wù)器的I/0和CPU性能都是不小的考驗(yàn)。比如目前被電子商務(wù)網(wǎng)站廣泛使用的https,通過其調(diào)取一個(gè)靜態(tài)頁面所需的處理性能要高于http一個(gè)數(shù)量級(jí)。所以不單單是網(wǎng)絡(luò)流量的增加,應(yīng)用本身的發(fā)展也對(duì)服務(wù)器的處理性能要求越來越高。于此同時(shí),大部分網(wǎng)站需要提供7*24小時(shí)的服務(wù),特別是一些電子商務(wù)網(wǎng)站、銀行、金融等部門對(duì)意外宕機(jī)時(shí)間要求更加苛刻。以戴爾為例,一小時(shí)的服務(wù)中斷會(huì)對(duì)其造成58萬美元的損失,這就對(duì)服務(wù)的可靠性提出了更高要求。1.4研究內(nèi)容本課題主要的內(nèi)容是構(gòu)建一個(gè)無單點(diǎn)故障且高性能的lamp環(huán)境。整體架構(gòu)如下圖所示:圖1-1總體架構(gòu)圖整個(gè)集群架構(gòu)分為5層,分別是:分發(fā)層,web層,共享存儲(chǔ)層,代理層,和最后的數(shù)據(jù)庫層。分發(fā)層和web層構(gòu)成一個(gè)LVS集群環(huán)境,實(shí)現(xiàn)高可用的同時(shí)也提供更高性能的web服務(wù)。共享存儲(chǔ)層用作為存放網(wǎng)站軟件的文件服務(wù)器,同時(shí)也保證了網(wǎng)站視頻、圖片的一致性。代理層使用mysql-proxy來實(shí)現(xiàn)讀寫分離,從而提高數(shù)據(jù)庫的訪問速度。與此同時(shí),為了保證整個(gè)架構(gòu)的無單點(diǎn)故障,會(huì)在mysql-proxy上使用紅帽提供的HA套件,從而實(shí)現(xiàn)代理服務(wù)的高可用。數(shù)據(jù)庫則使用mysql,通過mysql-mmm架構(gòu)來實(shí)現(xiàn)數(shù)據(jù)庫的主主同步和主從同步,并同時(shí)保證數(shù)據(jù)庫層的無單點(diǎn)故障。具體說明可見上圖。1.5論文結(jié)構(gòu)本文分為五部分,由上至下依次對(duì)集群中各個(gè)部分進(jìn)行了詳細(xì)講解,最后得出性能測(cè)試報(bào)告,各部分內(nèi)容依次如下::對(duì)負(fù)載均衡組成web應(yīng)用進(jìn)行了討論,對(duì)lvs工作原理進(jìn)行研究分析,最后給出lvs集群的運(yùn)行狀態(tài)。:對(duì)共享存儲(chǔ)層進(jìn)行研究,其中會(huì)涉及iscsi技術(shù)、CLVM、GFS2文件系統(tǒng),對(duì)以上技術(shù)盡心講解的同時(shí),給出整個(gè)共享存儲(chǔ)層的導(dǎo)入與掛載情況。:重點(diǎn)放在mysql-proxy的原理和高可用HA-proxy集群的研究,討論了proxy和redhat高可用集群的相關(guān)組件以及工作原理。最后給出HA-proxy集群的運(yùn)行狀態(tài)。:對(duì)數(shù)據(jù)庫層進(jìn)行討論研究,內(nèi)容涉及mysql的主主復(fù)制,主從復(fù)制,以及mysql-mmm集群架構(gòu),在對(duì)其原理進(jìn)行研究的同時(shí),給出整個(gè)mysql集群相關(guān)角色,IP分配,以及節(jié)點(diǎn)成員的運(yùn)行狀態(tài)。:通過和單一架構(gòu)系統(tǒng)進(jìn)行比較,得出性能測(cè)試報(bào)告。1.6本章小結(jié)本章主要介紹了本文的選題背景及意義,對(duì)整個(gè)項(xiàng)目的研究內(nèi)容及本文的大致結(jié)構(gòu)進(jìn)行了概覽。

2.負(fù)載均衡集群組成的web應(yīng)用2.1負(fù)載均衡集群技術(shù)2.1.1什么是負(fù)載均衡在開始負(fù)載均衡的原理之前,先舉一個(gè)例子幫助理解。現(xiàn)在有一個(gè)BBS論壇,最多只允許200人同時(shí)在線。初期,由于網(wǎng)站知名度較小,一般只有幾十個(gè)用戶同時(shí)在線。經(jīng)過一段時(shí)間的發(fā)展,其知名度開始提高,百度公司也收錄了該網(wǎng)站,注冊(cè)用戶數(shù)直線上升,很快同時(shí)在線人數(shù)就達(dá)到了千人,超過了原本的最大在線人數(shù)。于是網(wǎng)站訪問開始變的遲鈍,不少用戶開始抱怨。通常一個(gè)網(wǎng)頁如果8s內(nèi)沒有打開,用戶基本上不會(huì)有耐心繼續(xù)等待了,為了不影響用戶對(duì)網(wǎng)站的信心,一定要想到有效的解決辦法。如果在前方放置一個(gè)轉(zhuǎn)發(fā)器,后端放置多臺(tái)性能相同的服務(wù)器,由轉(zhuǎn)發(fā)器將用戶的請(qǐng)求分配給后端的服務(wù)器,使得每臺(tái)機(jī)器的用戶數(shù)控制在150個(gè)左右,那么網(wǎng)站的訪問速度無疑會(huì)得到大幅度提升,即使有一臺(tái)服務(wù)器宕機(jī),也不會(huì)對(duì)用戶的訪問造成影響。而這個(gè)轉(zhuǎn)發(fā)器就稱之為負(fù)載均衡器(分發(fā)機(jī))。負(fù)載均衡能夠提供廉價(jià)、透明的方來提高網(wǎng)絡(luò)的吞吐量,加強(qiáng)網(wǎng)絡(luò)數(shù)據(jù)的處理能力,通過負(fù)載均衡器可以實(shí)現(xiàn)讓多臺(tái)廉價(jià)的linux服務(wù)器并行處理用戶請(qǐng)求,從而使其達(dá)到大型計(jì)算機(jī)的能力,這也是為何負(fù)載均衡如此流行的主要原因。2.1.2以LVS作為負(fù)載均衡器lvs是由中國人發(fā)起的最著名的linux項(xiàng)目。它由章文嵩博士創(chuàng)立,在98年5月發(fā)布了第一個(gè)版本,其全稱為linuxvirtualserver,高可用性和高伸縮性是lvs具備的重要特征,其可兼容目前絕大多數(shù)的網(wǎng)絡(luò)服務(wù),并且易于管理。lvs應(yīng)用廣泛,很多高訪問量的網(wǎng)站,如淘寶,都采用了lvs的架構(gòu)。lvs建立在一個(gè)由主控服務(wù)器及若干個(gè)真實(shí)服務(wù)器組成的系統(tǒng)之上。主控服務(wù)器主要負(fù)責(zé)按照預(yù)先制定的調(diào)度算法對(duì)前方的用戶請(qǐng)求進(jìn)行分發(fā),后端的真實(shí)服務(wù)器則負(fù)責(zé)處理用戶請(qǐng)求,對(duì)外提供服務(wù)。相對(duì)于用戶而言,集群的結(jié)構(gòu)完全透明,用戶只通過綁定在主控服務(wù)器上虛擬IP與集群進(jìn)行通信,從用戶的角度,這其實(shí)就是一臺(tái)單獨(dú)的服務(wù)器。真實(shí)服務(wù)器(real-server)可提供的服務(wù)有很多,常用的有web服務(wù),ftp,以及DNS,讓多臺(tái)real-server來提供web服務(wù),就可以輕松的實(shí)現(xiàn)web層的高并發(fā)和高可用。2.2理解LVS的原理2.2.1LVSweb應(yīng)用的體系結(jié)構(gòu)使用lvs架設(shè)的web應(yīng)用集群主要有三個(gè)部分組成:主控服務(wù)器所在的位置稱為負(fù)載均衡層(LoadBalance),中間的web服務(wù)器組成了一個(gè)服務(wù)池(serverpool),最底端的是共享存儲(chǔ)層,用SharedStorage表示。負(fù)載均衡層一般由2臺(tái)負(fù)載調(diào)度器組成,但同一時(shí)刻只有一臺(tái)負(fù)載調(diào)度器在執(zhí)行請(qǐng)求的分發(fā)工作,而另一臺(tái)則作為backup,當(dāng)提供分發(fā)服務(wù)的調(diào)度器宕機(jī),另一臺(tái)會(huì)頂上來,接管分發(fā)服務(wù),lvs的模塊就安裝在其上。調(diào)度器在整個(gè)集群中主要起一個(gè)類似于路由器的作用,它含有完成分發(fā)任務(wù)所需的路由表,并能夠根據(jù)事先制定的算法,將用戶的請(qǐng)求分發(fā)給服務(wù)池中的某臺(tái)web服務(wù)器。服務(wù)池由一組真正執(zhí)行客戶端請(qǐng)求的服務(wù)器組成。在這個(gè)項(xiàng)目中,服務(wù)池由2臺(tái)web服務(wù)器組成。共享存儲(chǔ)層在這里并不放置網(wǎng)站的信息數(shù)據(jù),網(wǎng)站的信息數(shù)據(jù)是存放在mysql數(shù)據(jù)庫當(dāng)中,這里所說的共享存儲(chǔ),其實(shí)是放置網(wǎng)站本身的軟件和用戶上傳的視頻、圖片(視頻、圖片會(huì)存放在web服務(wù)器的圖片視頻目錄中,而數(shù)據(jù)庫中一般存放的是這些圖片、視頻名字對(duì)應(yīng)的地址)。拓?fù)鋱D如下所示:圖2-1lvs拓?fù)鋱D關(guān)于上圖,有幾點(diǎn)需要進(jìn)行說明:調(diào)度器作為集群的唯一入口,上面綁定了對(duì)外提供服務(wù)的虛擬IP,并且在同一時(shí)刻,這個(gè)虛擬IP只會(huì)在一臺(tái)調(diào)度器上,當(dāng)這臺(tái)調(diào)度器宕機(jī),包括虛擬IP在內(nèi)的所有資源會(huì)自動(dòng)漂移到backup上,此時(shí)backup接管分發(fā)服務(wù)。在這個(gè)項(xiàng)目中,筆者采用了基于IP的負(fù)載均衡技術(shù),這就要求服務(wù)池中的服務(wù)器必須具有相同的內(nèi)容,也就是說要提供相同的服務(wù),這里所有服務(wù)器都作為web-server,運(yùn)行apache服務(wù)。當(dāng)用戶請(qǐng)求到達(dá)時(shí),調(diào)度器會(huì)根據(jù)每臺(tái)服務(wù)器的負(fù)載情況,結(jié)合預(yù)先指定的調(diào)度算法,從服務(wù)池中挑選出一臺(tái)服務(wù)器處理用戶請(qǐng)求。與之相對(duì)應(yīng)的是基于內(nèi)容的請(qǐng)求分發(fā)技術(shù),這種分發(fā)技術(shù)允許服務(wù)池中的服務(wù)器提供不同的服務(wù),當(dāng)用戶的請(qǐng)求到達(dá)時(shí),服務(wù)器會(huì)根據(jù)內(nèi)容篩選出相應(yīng)的服務(wù)器去處理用戶請(qǐng)求。本文主要討論前者,但無論是哪一種技術(shù),服務(wù)池中的節(jié)點(diǎn)數(shù)目都是可變的,當(dāng)用戶請(qǐng)求不斷增長,可以通過在服務(wù)池中增加節(jié)點(diǎn)來滿足負(fù)載,整個(gè)系統(tǒng)的性能基本上可以隨著serverpool中節(jié)點(diǎn)成員的增加而線性增長。2.2.2LVS的負(fù)載調(diào)度算法LVS提供10種負(fù)載調(diào)度算法來分發(fā)用戶的請(qǐng)求,本項(xiàng)目使用加權(quán)最少鏈接算法。在服務(wù)池中的服務(wù)器性能相差較大時(shí)使用加權(quán)最少鏈接算法能夠有效優(yōu)化負(fù)載均衡的性能。系統(tǒng)管理員可對(duì)性能較高的服務(wù)器設(shè)置較大的權(quán)值。舉個(gè)例子,當(dāng)一臺(tái)服務(wù)器的權(quán)值被設(shè)置為2,另一臺(tái)為1,那么權(quán)值為2的服務(wù)器將會(huì)承受2倍于權(quán)值為1的服務(wù)器的活動(dòng)鏈接。調(diào)度器會(huì)了解當(dāng)前真實(shí)服務(wù)器的負(fù)載情況,盡可能的使服務(wù)器上已建立的連接數(shù)和其權(quán)值成比例?,F(xiàn)在用S0,S1,Sn-1表示一組后端服務(wù)器,W(Si)表示Si的權(quán)值,Si當(dāng)前的連接數(shù)用C(Si)表示。當(dāng)前服務(wù)器的連接總和為Csum,其值等于C(S0)+C(Si)+C(Sn-1)。假設(shè)現(xiàn)在新的連接請(qǐng)求被發(fā)送給Sm,此時(shí)Sm必須滿足以下條件:(C(Sm)/Csum)/W(Sm)=min{(C(Si)/Csum)/W(Si)}(i=0,1,….,n-1),其中Csum為常數(shù),W(Si)不為0,所以之前的條件可等價(jià)于C(Sm)/W(Sm)=min{C(Si)/W(Si)}(i=0,1,….,n-1),由于linux內(nèi)核不允許浮點(diǎn)除法,且W(Si)均大于0,所以用于判斷的條件可以最終轉(zhuǎn)化為C(Sm)*W(Si)>C(Si)*W(Sm)。當(dāng)服務(wù)器權(quán)值等于0時(shí),要保證其不被調(diào)度。算法執(zhí)行如下:for(m=0;m<n;m++){if(W(Sm)>0)then{for(i=m+1,i<n;i++){ifC(Sm)*W(Si)>C(Si)*W(Sm)m=i;}returnSm;}}returnNULL;2.3LVS的DR路由方式目前的IP負(fù)載均衡技術(shù)大都是通過網(wǎng)絡(luò)地址轉(zhuǎn)換將一組服務(wù)器構(gòu)成高性、能高可用的服務(wù)集群,其稱為VS/NAT(VirtualServerviaNetworkAddressTranslation)技術(shù)。在VS/NAT技術(shù)的基礎(chǔ)上,又提出了通過直接路由實(shí)現(xiàn)虛擬服務(wù)器的方法VS/DR(VirtualServerviaDirectRouting)和通過IP隧道實(shí)現(xiàn)虛擬服務(wù)器的方法VS/TUN(VirtualServerviaIPTunneling),這些方法都極大的提高了整個(gè)系統(tǒng)的伸縮性。目前,lvs實(shí)現(xiàn)IP負(fù)載均衡主要是通過VS/NAT、VS/TUN和VS/DR是這三種技術(shù),本項(xiàng)目使用的是DR模式,由于篇幅所限,本文只對(duì)DR模式的工作原理進(jìn)行描述。2.3.1LVS的地址概念要了解LVS的路由模式,關(guān)于地址的概念必不可少。在此先給大家一一列出,等到下面跟大家講解的時(shí)候,會(huì)在圖上標(biāo)出,方便大家理解。1.ClientIPAddress(CIP)2.DirectorGateway(DGW)3.VirtualIP(VIP)4.PrimaryIP(PIP)5.SlaveIP(SIP)6.RealServerIP(RIP)CIP:客戶端IP。DGW:默認(rèn)網(wǎng)關(guān)。VIP:虛擬IP,用于客戶端訪問服務(wù)PIP:主分發(fā)機(jī)的私有IPSIP:從分發(fā)機(jī)的私有IPRIP:真實(shí)服務(wù)器IP2.3.1VS-DR直接路由方式LVS-DR是基于IBM的NetDispatcher設(shè)計(jì),他的數(shù)據(jù)包流向?yàn)镃IP-DGW-VIP-RIP-DGW-CIP,DR模式能夠同時(shí)處理大量客戶端請(qǐng)求,多用于真實(shí)服務(wù)器數(shù)量較多或頻繁更新的服務(wù)。大致原理如下圖所示:圖2-2DR方式原理圖下面舉一個(gè)例子對(duì)上圖進(jìn)行說明。有一個(gè)client,它的IP就是上面提到的CIP,現(xiàn)在它要通過來訪問論壇,URL在DNS解析后,client會(huì)拿到一個(gè)VIP,這個(gè)VIP就是訪問論壇網(wǎng)站的唯一入口,首先client會(huì)對(duì)數(shù)據(jù)包進(jìn)行分裝,數(shù)據(jù)包頭部會(huì)包含目標(biāo)地址VIP和源地址CIP。數(shù)據(jù)包經(jīng)過Internet,到達(dá)機(jī)房網(wǎng)關(guān)。網(wǎng)關(guān)收下數(shù)據(jù)包后發(fā)現(xiàn)目標(biāo)IP是VIP,便會(huì)將其轉(zhuǎn)發(fā)給后端的分發(fā)機(jī),分發(fā)機(jī)收到數(shù)據(jù)包后發(fā)現(xiàn)這是一個(gè)lvs的數(shù)據(jù)包,原mac地址是網(wǎng)關(guān)的mac,目標(biāo)mac是自己的mac,原IP是client的IP,目標(biāo)IP是VIP?,F(xiàn)在要將這個(gè)數(shù)據(jù)包轉(zhuǎn)發(fā)給后端的real-server。分發(fā)機(jī)現(xiàn)在會(huì)通過2層交換機(jī)將數(shù)據(jù)包進(jìn)行轉(zhuǎn)發(fā),所以其不需要對(duì)網(wǎng)絡(luò)層的IP地址進(jìn)行更改,只需要將目標(biāo)mac改成real-server的mac,改完后發(fā)給交換機(jī),交換機(jī)那里會(huì)有mac地址綁定列表,它會(huì)去查找目標(biāo)mac究竟是綁定在哪個(gè)接口上,然后將數(shù)據(jù)包從相應(yīng)的接口轉(zhuǎn)發(fā)出去。real-server收到了數(shù)據(jù)包之后,看一下目標(biāo)mac地址,發(fā)現(xiàn)是自己,然后再看一下目標(biāo)IP是不是自己,目標(biāo)IP如果不是自己,會(huì)將數(shù)據(jù)包丟棄。這時(shí)發(fā)現(xiàn)目標(biāo)IP是個(gè)VIP,現(xiàn)在怎么告訴real-server這個(gè)VIP其實(shí)就是自己,這就需要在real-server綁定一個(gè)VIP,如果real-server發(fā)現(xiàn)本地有這個(gè)IP,就會(huì)收下數(shù)據(jù)包。處理完成之后,就拿這個(gè)VIP作為源地址,返回?cái)?shù)據(jù)包,在返回?cái)?shù)據(jù)包時(shí)會(huì)不經(jīng)過分發(fā)機(jī)直接將其交給機(jī)房網(wǎng)關(guān)?,F(xiàn)在就面臨IP地址沖突的問題,在一個(gè)局域網(wǎng)中,大量的real-server都會(huì)去綁定一個(gè)VIP,每個(gè)real-server也會(huì)有自己的RIP,RIP是肯定不一樣的。要解決這個(gè)問題,就需要關(guān)閉arp廣播,Linux在綁定IP地址時(shí),一般會(huì)默認(rèn)使用arp廣播來探測(cè)是否IP沖突?,F(xiàn)在要使所有的real-server在發(fā)送arp廣播時(shí),所有關(guān)于VIP的廣播都不發(fā),而關(guān)于RIP的廣播要允許,這里使用arptables防火墻來實(shí)現(xiàn)。其次分發(fā)機(jī)也會(huì)綁定VIP,它在綁定的過程中也會(huì)發(fā)送arp廣播進(jìn)行詢問,real-server會(huì)對(duì)這個(gè)廣播進(jìn)行回應(yīng),所以還需要讓real-server丟棄掉詢問VIP的arp廣播,前者是不要發(fā)送有關(guān)于VIP的廣播,后者是要丟棄有關(guān)于VIP的ARP詢問。arptables的設(shè)置腳本如下圖所示:圖2-3arptables配置腳本2.4關(guān)于LVS的一些補(bǔ)充2.4.1LVS調(diào)度算法對(duì)服務(wù)器的加權(quán)前面在介紹算法時(shí)提到過權(quán)值的概念,在架構(gòu)LVS集群時(shí)會(huì)根據(jù)每臺(tái)服務(wù)器自身的硬件條件為每個(gè)節(jié)點(diǎn)分配一個(gè)權(quán)值,這樣能夠幫助分發(fā)機(jī)在能力各不相同的硬件環(huán)境中更加有效的去均衡分配負(fù)載?!睓?quán)“是一種相對(duì)比率,假設(shè)一臺(tái)服務(wù)器的權(quán)值為3,另一臺(tái)的權(quán)值為1,那么權(quán)值為1的服務(wù)器每得到1個(gè)鏈接,權(quán)值為3的服務(wù)器就將得到3個(gè)鏈接。雖然這種方法能夠有效的均衡集群負(fù)載,但當(dāng)某個(gè)真正的服務(wù)器剛被添加入serverpool,并且此時(shí)分發(fā)機(jī)使用的是加權(quán)最少鏈接算法時(shí),這個(gè)新加入的服務(wù)器在被調(diào)度時(shí)會(huì)造成暫時(shí)的不平衡。舉個(gè)例子,現(xiàn)在serverpool中有三臺(tái)服務(wù)器,分別是A、B、C。A和B的權(quán)值均為1,C的權(quán)值為2,如果C由于某種原因發(fā)生宕機(jī),此時(shí)A和B就會(huì)將會(huì)平分被放棄的載量。當(dāng)C恢復(fù)后重新加入到serverpool當(dāng)中,分發(fā)機(jī)發(fā)現(xiàn)它的連接數(shù)為0,就會(huì)將所有的請(qǐng)求都轉(zhuǎn)發(fā)給它,直到它的A、B、C三臺(tái)機(jī)器的載量重新回到同一級(jí)別為止。2.4.2LVS調(diào)度持續(xù)性和防火墻標(biāo)記大多數(shù)情況下,客戶端其實(shí)并不希望分發(fā)機(jī)按照負(fù)載均衡方式輪循的分發(fā)請(qǐng)求,他們希望能夠重復(fù)的訪問同一臺(tái)服務(wù)器,這樣的例子很多,比如FTP連接、多屏幕的網(wǎng)頁表格、SSL等等。在類似于這樣的情況下,除非事物被同一臺(tái)服務(wù)器處理從而保留內(nèi)容銜接,否則客戶有肯能無法正常操作。LVS中提供了兩種方式來解決這一問題:防火墻標(biāo)記和持續(xù)性連接。持續(xù)性連接的原理比較簡(jiǎn)單,說白了它就像一個(gè)計(jì)時(shí)器,當(dāng)客戶連接到某個(gè)服務(wù),分發(fā)機(jī)會(huì)記住在某一指定時(shí)間段內(nèi)的前一次連接。在這段時(shí)間內(nèi),如果這個(gè)IP地址又來連接,請(qǐng)求就會(huì)發(fā)送到前一次被連接的服務(wù)器上,當(dāng)然,如果超過了之前設(shè)定好的時(shí)間,分發(fā)機(jī)依舊會(huì)按照分發(fā)規(guī)則進(jìn)行處理。持續(xù)性連接不是用來處理合并不同目標(biāo)端口連接最有效的方法,一般會(huì)使用防火墻標(biāo)記,本項(xiàng)目就是采用的這種方法。防火墻標(biāo)記主要是用來合并一個(gè)協(xié)議或者一組相關(guān)協(xié)議端口,可以通過為每個(gè)協(xié)議在分發(fā)機(jī)上分配相同的防火墻標(biāo)記,使得事物的狀態(tài)信息得以保留,在連接被打開后,分發(fā)機(jī)會(huì)將所有請(qǐng)求都轉(zhuǎn)發(fā)給serverpool中某臺(tái)定的服務(wù)器。如果說這個(gè)項(xiàng)目中的LVS群集被用來運(yùn)行電子商務(wù)網(wǎng)站,防火墻標(biāo)記可以把HTTP的80端口和HTTPS的443端口捆綁在一起,當(dāng)和持續(xù)性綜合使用時(shí),防火墻標(biāo)記會(huì)確保只要來自客戶端的請(qǐng)求發(fā)生在持續(xù)性參數(shù)所指定的范圍內(nèi)便會(huì)被分配到同一真實(shí)服務(wù)器上。但分發(fā)機(jī)本身并不能分配防火墻標(biāo)記,一般需借助iptables完成該任務(wù)。iptables的配置如下圖所示,主要作用是在路由前將訪問VIP的80端口和443端口全部打上防火墻標(biāo)記100,這樣它們就會(huì)被分發(fā)機(jī)識(shí)別,然后進(jìn)行轉(zhuǎn)發(fā)。圖2-4iptables配置腳本在設(shè)置完成之后,可以使用iptables–L–n來查看mangle表。如下圖所示。圖2-5iptables的mangle表2.5LVS負(fù)載均衡集群實(shí)現(xiàn)概述拓?fù)鋱D如下所示:圖2-6web層和分發(fā)層概覽如上圖所示,LVS1和LVS2作為分發(fā)機(jī),構(gòu)成一個(gè)HA集群,每次只有一臺(tái)分發(fā)機(jī)對(duì)外提供分發(fā)服務(wù),會(huì)有一個(gè)浮動(dòng)IP綁定在LVS1或者LVS2上(當(dāng)然,在DR模式下,后端的node也要綁定VIP),這取決于現(xiàn)在正在對(duì)外提供分發(fā)服務(wù)的機(jī)器是哪臺(tái)。該浮動(dòng)IP作為整個(gè)集群架構(gòu)的唯一入口,用戶通過訪問浮動(dòng)IP來訪問網(wǎng)站。浮動(dòng)IP作為分發(fā)機(jī)的一種資源存在,同樣作為資源的還有分發(fā)策略(按照什么算法進(jìn)行分發(fā))、已經(jīng)分發(fā)的條目記錄(原來已經(jīng)分發(fā)了多少次,已經(jīng)分配到第幾臺(tái)機(jī)器)和路由表。當(dāng)正在提供服務(wù)的分發(fā)機(jī)發(fā)生宕機(jī),包括VIP在內(nèi)的所有資源會(huì)遷移到另一臺(tái)LVS上,從而使整個(gè)分發(fā)層做到無單點(diǎn)故障。后面的兩臺(tái)node作為web服務(wù)的真實(shí)提供者,他們的IP對(duì)于用戶來說是隱藏的,用戶可見的IP只有VIP,也就是綁定在分發(fā)機(jī)上的IP。兩臺(tái)node構(gòu)成了LB負(fù)載均衡,同時(shí)對(duì)外提供服務(wù),分發(fā)機(jī)會(huì)根據(jù)路由表和相應(yīng)的算法向后分發(fā)用戶請(qǐng)求到相應(yīng)的node。前方的分發(fā)機(jī)會(huì)定期進(jìn)行連接測(cè)試,如果其中一臺(tái)node發(fā)生宕機(jī)或服務(wù)運(yùn)行異常,則連接測(cè)試失敗,分發(fā)機(jī)會(huì)將該node從自己的路由表中剔除,最后所有的用戶請(qǐng)求都將有由健康的節(jié)點(diǎn)處理。分發(fā)機(jī)通過一個(gè)腳本實(shí)時(shí)了解server-pool中哪臺(tái)服務(wù)器發(fā)生異常,其內(nèi)容如下所示:具體腳本如何加載,會(huì)在實(shí)施文檔中給出。圖2-7探測(cè)腳本內(nèi)容整個(gè)集群的運(yùn)行狀態(tài)如下圖所示:具體步驟在實(shí)施手冊(cè)中給出。圖2-7lvs集群運(yùn)行狀態(tài)2.6本章小結(jié)本章對(duì)LVS實(shí)現(xiàn)的負(fù)載均衡集群原理做了簡(jiǎn)單介紹,LVS內(nèi)容繁多,這里只對(duì)該項(xiàng)目中使用到的關(guān)鍵技術(shù)原理做介紹,還有很多地方?jīng)]有涉及到,關(guān)于具體如何去實(shí)現(xiàn),實(shí)施文檔中會(huì)給出詳細(xì)步驟。

基于iscsi的共享存儲(chǔ)存儲(chǔ)層截止到目前,已把緒論里提到的負(fù)載均衡層、web層介紹完畢。接下來會(huì)對(duì)共享存儲(chǔ)層做相應(yīng)的介紹。在開始存儲(chǔ)層之前,先了解一下共享存儲(chǔ)在整個(gè)集群中起到的作用。在第一章提到過,共享存儲(chǔ)在這里作為存放網(wǎng)站軟件的文件服務(wù)器,同時(shí)也保存用戶上傳的圖片或視頻。舉個(gè)例子,用戶A上傳了一張JPG格式的照片,保存在web-server1上,現(xiàn)在B用戶想瀏覽這張圖片,如果每個(gè)web-server均使用自己獨(dú)立的存儲(chǔ),那么當(dāng)分發(fā)機(jī)將用戶B的請(qǐng)求隨機(jī)分發(fā)到web-server2上時(shí)就無法瀏覽到剛才A用戶上傳的圖片(視頻、圖片會(huì)存放在web服務(wù)器的圖片視頻目錄中,而數(shù)據(jù)庫中一般存放的是這些圖片、視頻名字對(duì)應(yīng)的地址)。解決這一問題可以采用sync進(jìn)行實(shí)時(shí)同步,也可使用這節(jié)介紹的共享存儲(chǔ)方案。另外再看看現(xiàn)在面臨的主要問題有哪些,這樣可以方便后面追個(gè)擊破。首先,所謂存儲(chǔ)層,必定是由若干臺(tái)存儲(chǔ)服務(wù)器構(gòu)成,那么web服務(wù)器作為客戶端要如何使用存儲(chǔ)服務(wù)器的磁盤呢?其次,再大的空間都會(huì)有用完的一天,如何能在不影響服務(wù)的前提下實(shí)現(xiàn)存儲(chǔ)的動(dòng)態(tài)擴(kuò)展,必定是在實(shí)施項(xiàng)目時(shí)需要考慮的因素。最后,如果有一臺(tái)存儲(chǔ)服務(wù)器壞了,如何能保證數(shù)據(jù)不丟失,也就是對(duì)數(shù)據(jù)的冗余。接下來的內(nèi)容對(duì)這些問題都進(jìn)行了逐一解答。3.1NAS和SAN本章開始提到了關(guān)于web服務(wù)器是如何共使用存儲(chǔ)服務(wù)器磁盤的問題,筆者在這里選擇了iscsi方案,為了更好的理解,這里就目前企業(yè)上流行的2種存儲(chǔ)模式做簡(jiǎn)單介紹,為后面對(duì)iscsi的介紹做鋪墊。NAS(Network-AttachedStorage)的全稱為網(wǎng)絡(luò)接入存儲(chǔ),它通過交換機(jī)把服務(wù)器和存儲(chǔ)系統(tǒng)連接起來,從而建立專門用來提供數(shù)據(jù)存儲(chǔ)的存儲(chǔ)網(wǎng)絡(luò)。早期的網(wǎng)絡(luò)接入存儲(chǔ)性能受到網(wǎng)絡(luò)帶寬影響,但快速以太網(wǎng)的出現(xiàn)使得其讀寫性能有了很大提高。目前,NAS基本上具備了磁盤陣列的所有優(yōu)點(diǎn),與市面上一些大型磁帶庫和磁盤柜相比,其還具有很強(qiáng)的價(jià)格優(yōu)勢(shì),在一些中小企業(yè)中被廣泛使用。NAS通常被用來提供高速的文件共享任務(wù),比如NFS,CIFS等。SAN(Storage-AreaNetwork)全稱為存儲(chǔ)區(qū)域網(wǎng)絡(luò),它采用光纖技術(shù),通過光纖交換機(jī)連接存儲(chǔ)系統(tǒng)和服務(wù)器,目前比較流行的有FCSAN和ISCSISAN兩種方案,其部署價(jià)格較高,一般小公司很少會(huì)使用。ISCSI(InternetSCSI)全稱為互聯(lián)網(wǎng)小型計(jì)算機(jī)系統(tǒng)接口,它基于IP協(xié)議的技術(shù)標(biāo)準(zhǔn),能夠?qū)⒋鎯?chǔ)行業(yè)廣泛使用的SCSI接口技術(shù)和IP技術(shù)進(jìn)行結(jié)合,實(shí)現(xiàn)了SCSI和TCP/IP協(xié)議的連接,從而允許用戶能夠通過TCP/IP網(wǎng)絡(luò)來構(gòu)建SAN。目前在IP網(wǎng)絡(luò)上已經(jīng)部署的大量DAS存儲(chǔ)設(shè)備是推動(dòng)ISCSI協(xié)議不斷發(fā)展的主要?jiǎng)恿Γ@些存儲(chǔ)設(shè)備可以通過ISCSI協(xié)議被更多的用戶使用,同時(shí)也使得DAS設(shè)備支持了那些只有高級(jí)存儲(chǔ)才支持的鏡像、容災(zāi)等應(yīng)用。3.2iscsi技術(shù)研究3.2.1iscsi的報(bào)文格式得益于IP網(wǎng)絡(luò)的廣泛應(yīng)用,iscsi使得數(shù)據(jù)的存儲(chǔ)不再受到地域限制。無論是WAN、LAN甚至Internet,iscsi均能在其上進(jìn)行數(shù)據(jù)傳送。其核心技術(shù)是對(duì)scsi報(bào)文進(jìn)行封裝,從而使scsi命令和數(shù)據(jù)可以在普通以太網(wǎng)上傳輸。iscsi的報(bào)文格式下圖所示:圖3-1iscsi報(bào)文格式千兆以太網(wǎng):提供連接尋址、大型幀長度、以及流量控制信息。IP頭:包含路由信息,因此報(bào)文能找到通過網(wǎng)絡(luò)的路徑。TCP頭:提供必要信息保證交付。iscsi頭:解釋如何提取scsi命令和數(shù)據(jù)。iscsi的工作過程大致如下:操作系統(tǒng)會(huì)在iscsi主機(jī)應(yīng)用程序發(fā)出讀寫請(qǐng)求后生成相應(yīng)的scsi命令,該命令首先會(huì)在iscsiinitiator層進(jìn)行封裝,封裝后的iscsi消息包通過TCP/IP被傳送到設(shè)備側(cè),設(shè)備側(cè)的iscsiTarget層會(huì)對(duì)其進(jìn)行解封裝,然后把得到的iscsi命令內(nèi)容傳送給scsi設(shè)備執(zhí)行。命令執(zhí)行后的響應(yīng)在經(jīng)過設(shè)備側(cè)的iscsiTarget層時(shí)被封裝成iscsi響應(yīng)PDU(ProtocolDataUnit),然后通過TCP/IP傳送給主機(jī)的iscsiinitiator層,iscsi響應(yīng)PDU會(huì)在這里被進(jìn)行解析,得到scsi響應(yīng)后傳送給操作系統(tǒng),最后由操作系統(tǒng)響應(yīng)給應(yīng)用程序。3.2.2iscsi協(xié)議棧模型iscsi使用TCP/IP協(xié)議在不穩(wěn)定的網(wǎng)絡(luò)上進(jìn)行可靠的數(shù)據(jù)傳輸。其協(xié)議棧模型如下圖所示:圖3-2iscsi協(xié)議棧模型如上圖所示:initiator會(huì)將scsi命令和數(shù)據(jù)進(jìn)行封裝,使其變成iscsi協(xié)議數(shù)據(jù)單元,然后向下提交給IP層繼續(xù)進(jìn)行封裝,變成IP數(shù)據(jù)報(bào)后在現(xiàn)有的IP網(wǎng)絡(luò)中進(jìn)行傳輸。到達(dá)target后,對(duì)數(shù)據(jù)包進(jìn)行解封裝,最后還原成之前的scsi命令和數(shù)據(jù),然后再由存儲(chǔ)控制器將其發(fā)送給指定的驅(qū)動(dòng)器。最終實(shí)現(xiàn)數(shù)據(jù)和scsi命令在IP網(wǎng)絡(luò)上的透明傳輸。3.2.3發(fā)起端-目標(biāo)器模型Target與Initiator是iscsi體系結(jié)構(gòu)模式中兩個(gè)重要角色。其結(jié)構(gòu)如下圖所示:圖3-3發(fā)起端-目標(biāo)器模型scsi通道將scsiPort連接起來(比如scsiinitiatorport和scsitargetport),其不但被Initiator用來向target發(fā)送請(qǐng)求,也被target用來向Initiator發(fā)送響應(yīng)。Initiator至少需要有一個(gè)發(fā)送請(qǐng)求的客戶端和一個(gè)scsiport,target不但需要有一個(gè)scsiport,還要有邏輯單元和任務(wù)分發(fā)器。其中任務(wù)分發(fā)器用來把用戶的請(qǐng)求分給適當(dāng)?shù)倪壿媶卧?,scsiport被用來連接scsi通道,而真正用來處理任務(wù)的實(shí)體是邏輯單元,由于一個(gè)邏輯單元一般都會(huì)支持多任務(wù)環(huán)境,所以還需要真正響應(yīng)請(qǐng)求的服務(wù)器和任務(wù)管理器。3.2.4iscsi命名規(guī)范為了方便大家理解iscsi的配置,這里介紹一下iscsi的命名規(guī)范,在此之前先說一下什么是邏輯單元號(hào)。scsi總線上一般可掛的設(shè)備數(shù)量為6個(gè)或者15個(gè),用TargetID對(duì)這些設(shè)備進(jìn)行描述,每個(gè)設(shè)備在加入系統(tǒng)時(shí)會(huì)取得一個(gè)代號(hào),但實(shí)際上需要描述的設(shè)備數(shù)量一般都會(huì)超過這個(gè)數(shù)字,于是就有了邏輯單元號(hào)(LUN)的概念,它的作用就是為了對(duì)Target進(jìn)行擴(kuò)展。Target主機(jī)由“iscsiQualifiedNam(iqn)”來標(biāo)記,Target的名字一定要以qin后面加上一個(gè)點(diǎn)號(hào)開頭,形如qin.,在點(diǎn)號(hào)后面是日期,日期后面是一個(gè)唯一的點(diǎn)號(hào)加上域名的反轉(zhuǎn),在被反轉(zhuǎn)的域名后面跟一個(gè)冒號(hào),最后加上任意的字符串,其格式如下:iqn.<yyyy-mm>.<tld.domain.some.host>[:<identifier>],在本項(xiàng)目中的名字起法如圖所示:圖3-4命名示例在iscsi命名規(guī)范中,iqn必須唯一的標(biāo)記出目標(biāo)設(shè)備(Target),LUNID由iscsi目標(biāo)設(shè)備(Target)分配。3.2.5Initiator端導(dǎo)入設(shè)備首先查看在target端共享出的磁盤:圖3-5磁盤導(dǎo)出情況在targrt共享出設(shè)備后,可以在Initiator中使用如下命令發(fā)現(xiàn)target導(dǎo)出的磁盤:圖3-6發(fā)現(xiàn)導(dǎo)出磁盤然后將其導(dǎo)入本地:圖3-7對(duì)磁盤導(dǎo)入最后會(huì)在/dev目錄下發(fā)現(xiàn)兩個(gè)設(shè)備文件名,通過查看UUID可知這兩個(gè)設(shè)備文件名分別對(duì)應(yīng)著兩個(gè)存儲(chǔ)服務(wù)器上的sda6和sda8,如下圖所示。由于筆者在做的時(shí)候是在虛擬機(jī)上進(jìn)行設(shè)備發(fā)現(xiàn)和導(dǎo)入,所以設(shè)備文件名為sda和sdb,如果使用真機(jī)的話,應(yīng)該會(huì)得到sdb和sdc。圖3-8查看導(dǎo)入磁盤關(guān)于iscsi的配置,會(huì)在實(shí)施手冊(cè)中詳細(xì)給出,由于篇幅限制,關(guān)于iscsi的介紹只能到此為止,感興趣的話可以參考一本叫《大話存儲(chǔ)》的書,寫的很像武俠小書,里面有關(guān)于存儲(chǔ)更加詳細(xì)的介紹。3.3LVM實(shí)現(xiàn)存儲(chǔ)的動(dòng)態(tài)擴(kuò)展和冗余剛才向大家介紹了iscsi技術(shù),目的是為了使webserver能夠使用存儲(chǔ)柜導(dǎo)出的磁盤,大致結(jié)構(gòu)如下圖,這個(gè)項(xiàng)目中使用兩臺(tái)服務(wù)器作為iscsi的target端,分別導(dǎo)出各自的一個(gè)分區(qū),兩臺(tái)webserver則作為iscsi的initiator端,對(duì)來自不同服務(wù)器的兩塊存儲(chǔ)進(jìn)行導(dǎo)入,這時(shí)在本地的/dev目錄下會(huì)看到相應(yīng)的設(shè)備文件名,查看uuid便可知這兩塊磁盤自兩臺(tái)存儲(chǔ)服務(wù)器。圖3-9存儲(chǔ)層概覽為什么要使用兩臺(tái)相互獨(dú)立了存儲(chǔ)服務(wù)器,一臺(tái)不行么?當(dāng)然可以,但萬一這一臺(tái)服務(wù)器發(fā)生宕機(jī),webserver本地發(fā)現(xiàn)的磁盤設(shè)備不是也就沒了么,宕機(jī)也就算了,如果一臺(tái)服務(wù)器導(dǎo)出的磁盤損壞怎么辦,軟件家目錄存放的圖片、視頻之類的數(shù)據(jù)不就丟失了么,為了防止這樣的情況產(chǎn)生,本項(xiàng)目使用兩臺(tái)存儲(chǔ)服務(wù)器并將其做成鏡像關(guān)系(類似于raid1),這樣就相當(dāng)于數(shù)據(jù)是完整保存在兩臺(tái)存儲(chǔ)服務(wù)器中,兩臺(tái)存儲(chǔ)服務(wù)器互為對(duì)方的備份,那么就算其中任意一臺(tái)宕機(jī)或發(fā)生磁盤損壞,數(shù)據(jù)不但不會(huì)丟失,集群也可以正常工作。3.3.1LVM技術(shù)簡(jiǎn)介LVM(LogicalVolumeManager)全稱為邏輯卷管理,它是Linux環(huán)境下對(duì)磁盤分區(qū)進(jìn)行管理的一種機(jī)制,相較于普通的磁盤分區(qū),LVM提供了更高等級(jí)的磁盤存儲(chǔ)。舉個(gè)例子,現(xiàn)在本地有一塊硬盤sda,并對(duì)其進(jìn)行了分區(qū)劃分,最后得到sda1、sda2、sda3,后面還有剩余空間沒有使用?,F(xiàn)將sda1掛載到boot目錄,sda2掛載到根目錄,sda3掛載到home目錄,如果home目錄的空間不夠了怎么辦,一般的做法是再劃分出一個(gè)分區(qū)sda4,先將sda4暫時(shí)掛在mnt目錄下,接著把home目錄下(sda3)的文件cp過去,最后用sda4替換下sda3,也就是實(shí)現(xiàn)了用更大的分區(qū)替換掉不夠用的sda3。這種方法不但麻煩,而且浪費(fèi)了sda3,并且如果后面的分區(qū)容量小于sda3怎么辦?lvm針對(duì)這種情況提供了完美的解決方案,它可以實(shí)現(xiàn)在不對(duì)分區(qū)進(jìn)行卸載的前提下,自如調(diào)整分區(qū)大小。前提是系統(tǒng)要支持lvm,并且需要?jiǎng)討B(tài)擴(kuò)展的對(duì)象是邏輯卷。3.3.2LVM的組成如圖所示:圖3-10LVM組成圖PV(physicalvolume):位于LVM的最底層,一般為物理盤上的分區(qū),比如上面提到的sda1,sda2,sda3。VG(volumegroup):一個(gè)VG至少由一個(gè)PV組成,如上圖所示。LV(logicalvolume):LV建立在VG上,VG中沒有使用的空間可以用來對(duì)已有的LV進(jìn)行擴(kuò)展,也可以用于建立新的LV。PE(physicalextent):PE是組成PV的基本單元,默認(rèn)情況下為4MB。LE(logicalextent):LE是LV的基本組成單位,在同一個(gè)VG中,LE和PE一一對(duì)應(yīng),并且大小相同。對(duì)于LV的擴(kuò)展時(shí)只需把VG上空閑的PE搬到LV里即可。VG最多能夠支持65534個(gè)PE,因此LV不能無限擴(kuò)大。3.3.3基于集群的LVM技術(shù)集群邏輯卷管理簡(jiǎn)稱CLVM(ClusterLogicalVolumeManager),作為LVM的擴(kuò)展,其允許集群中的各節(jié)點(diǎn)使用LVM管理共享存儲(chǔ)。要在集群狀態(tài)下使用lvm,需要在每個(gè)webserver服務(wù)節(jié)點(diǎn)上安裝lvm2-cluster軟件包(RHEL6的操作系統(tǒng)),接著在任意一臺(tái)執(zhí)行如下命令即可:,,再建好vg后,接下來的操作比較重要,還記得之前提到的對(duì)磁盤進(jìn)行冗余么,現(xiàn)在要將/dev/sdb和/dev/sdc做成鏡像關(guān)系,lvm本身具有這個(gè)功能,但因?yàn)樵诩涵h(huán)境下,兩臺(tái)webserver上還需要裝上cmirror的軟件包,并啟動(dòng)cmirror服務(wù)。完成上述兩步后,使用lvcreate–m1–L10G–nclvm_mirrorclvm_vg即可,-m后跟的是mirror的個(gè)數(shù),–L后跟的是mirror的大小,-n后的是做成mirror的名字(隨便起),最后是表示在哪個(gè)vg上做mirror。做好后的cmirror如圖:Clvm_mirror是由/dev/sdb和/dev/sdc組成的,當(dāng)往clvm_mirror上寫數(shù)據(jù)時(shí),其實(shí)是往storage1和storage2同時(shí)寫數(shù)據(jù),當(dāng)一個(gè)storage發(fā)生損壞,相同的數(shù)據(jù)在storage2上也有一份,這樣就避免了由于存儲(chǔ)單點(diǎn)故障而引起的數(shù)據(jù)丟失,mirror在這里的作用非常類似于raid1。做好的mirror還沒有文件系統(tǒng),尚不能掛載使用,下一節(jié)介紹了存儲(chǔ)層的最后一個(gè)環(huán)節(jié),GFS集群文件系統(tǒng)。3.4GFS2集群文件系統(tǒng)截止到目前,磁盤導(dǎo)出了,鏡像做好了,但是現(xiàn)在的鏡像還不能掛載,因?yàn)檫€沒有在其上建立文件系統(tǒng)。普通的文件系統(tǒng)當(dāng)然不行,因?yàn)樯婕暗絻膳_(tái)不同的機(jī)器對(duì)同一塊區(qū)域進(jìn)行讀寫操作。集群文件系統(tǒng)采用并行控制機(jī)制解決兩臺(tái)機(jī)器同時(shí)讀寫可能產(chǎn)生的沖突,具體有兩種方法實(shí)現(xiàn),一種是使用集中式元數(shù)據(jù)服務(wù)器來保存元數(shù)據(jù),另一種將元數(shù)據(jù)保存在共享設(shè)備的一個(gè)分區(qū)里。無論使用哪一種方案,所有集群中的節(jié)點(diǎn)都能夠看到文件系統(tǒng)的狀態(tài),從而保證安全并行訪問。這里使用GFS2集群文件系統(tǒng),它包含在RedHatEnterpriseLinux4以上發(fā)行版內(nèi)核中的,是固有文件系統(tǒng),其可直接和Linux內(nèi)核虛擬文件系統(tǒng)層交互。在使用之前,先介紹幾個(gè)概念:GFS2節(jié)點(diǎn):在集群中可掛接GFS2文件系統(tǒng)服務(wù)器。文件系統(tǒng)數(shù)(可掛接節(jié)點(diǎn)個(gè)數(shù)):其決定了在GFS2文件系統(tǒng)在創(chuàng)建之初最多能夠被多少個(gè)集群節(jié)點(diǎn)掛載。文件系統(tǒng)名稱:在創(chuàng)建GFS2文件系統(tǒng)時(shí)為其起的唯一名字,為了區(qū)別一個(gè)集群中多個(gè)GFS2文件系統(tǒng)。接著上一節(jié),現(xiàn)在webserver上有了clvm_mirror,使用命令:mkfs.gfs2–j2–plock_dlm–tcluster185:gfs_1/dev/mapper/clvm_mirror,-j后面跟的是掛接點(diǎn)個(gè)數(shù),筆者在這里創(chuàng)建了兩個(gè)掛接點(diǎn)。因此被各式化后的clvm_mirror只能在2個(gè)node上進(jìn)行掛接。如果node3也是集群中的節(jié)點(diǎn),會(huì)發(fā)現(xiàn)node3是無法掛接使用共享磁盤的,可使用gfs2_jadd–j1/opt來動(dòng)態(tài)增加掛接點(diǎn)(假設(shè)現(xiàn)在clvm_mirror已經(jīng)掛接在/opt下)。-p后面跟的是鎖的名字,指定DML鎖方式,如果不加這個(gè)參數(shù),當(dāng)兩個(gè)node同時(shí)掛載此分區(qū)時(shí),就會(huì)像掛載ext文件系統(tǒng)一樣。-t后面跟的是集群的名字,筆者創(chuàng)立的集群叫cluster185。集群名稱后面的是筆者創(chuàng)建的gfs文件系統(tǒng)的名字(隨意起),最后的參數(shù)指定在什么設(shè)備上創(chuàng)建集群文件系統(tǒng)(完整的路徑)。最后把clvm_mirror掛載到/var/www/html目錄下即可:圖3-11存儲(chǔ)掛載情況即可使用。

3.5本章小結(jié)本章主要介紹了共享存儲(chǔ)層的實(shí)現(xiàn)原理和所用到的相關(guān)技術(shù),針對(duì)于開篇提出的問題進(jìn)行了逐個(gè)解答:使用iscsi技術(shù)導(dǎo)入磁盤,使用clvm技術(shù)實(shí)現(xiàn)冗余和動(dòng)態(tài)擴(kuò)展,使用GFS2集群文件系統(tǒng)實(shí)現(xiàn)兩個(gè)節(jié)點(diǎn)的安全并行訪問。

4.高可用的mysql-proxy代理本章主要介紹代理層的解決方案。mysql-proxy主要有兩個(gè)作用,首先就是實(shí)現(xiàn)讀寫分離,加快用戶對(duì)數(shù)據(jù)庫的訪問。其次,實(shí)現(xiàn)讀的負(fù)載均衡,因?yàn)橐话愕腟NS網(wǎng)站或者論壇都是讀多寫少,讀的壓力相對(duì)較大,這里會(huì)有兩臺(tái)mysql數(shù)據(jù)庫對(duì)外提供讀服務(wù),而代理的作用就是輪循的分發(fā)讀請(qǐng)求,從而達(dá)到分擔(dān)讀壓力、增加讀速度的目的。4.1mysql-proxy4.1.1為什么要實(shí)現(xiàn)讀寫分離眾所周知,影響數(shù)據(jù)庫讀寫速度的因素有很多,而加速數(shù)據(jù)庫的讀通常采取的辦法是對(duì)前臺(tái)的sql語句進(jìn)行優(yōu)化,通過看它的執(zhí)行計(jì)劃診斷出影響讀速度的原因。DBA都有過類似這樣的經(jīng)驗(yàn),當(dāng)在查看一條sql語句的執(zhí)行計(jì)劃時(shí),最害怕看到的便是fulltablescan(全表掃描),當(dāng)然有些特殊情況的確有走全表掃描的必要,這里不做討論,作為DBA最經(jīng)常使用的調(diào)優(yōu)方法無非是在合適的列上建立索引并或者重寫sql語句使查詢走索引,從而返回rowid,直接定位表里的某一行,這會(huì)使查詢速度得到大幅度提升(當(dāng)然,在oracle中,建立固態(tài)視圖也是個(gè)很好的選擇)。索引固然有它的好處,但其最致命的缺點(diǎn)是會(huì)影響DML操作,設(shè)想如果在一張經(jīng)常被updata,insert,delete的表上建立索引,那么每次對(duì)表里的數(shù)據(jù)進(jìn)行修改時(shí),同時(shí)還要維護(hù)索引段,而索引段的維護(hù)相對(duì)復(fù)雜,它需要在合適的地方進(jìn)行修改,這無形中增加了磁盤I/O,降低了寫操作的速度。但如果在前方使用mysql-proxy實(shí)現(xiàn)讀寫分離,后方使用mysql的AB復(fù)制實(shí)現(xiàn)主從同步,master專門用來負(fù)責(zé)寫(update,delete,insert),slave專門用來執(zhí)行讀(select),并在slave上建立索引,這樣不僅可以加快讀的速度,同時(shí)也不會(huì)影響寫操作的效率,一舉兩得。4.1.2mysql-proxy工作原理mysql-proxy處于mysql-client和mysql-server之間,是一個(gè)主要是用來檢測(cè)、分析或改變client和server通信的工具。可以實(shí)現(xiàn)包括負(fù)載均衡,查詢過濾在內(nèi)的多種功能。作為一個(gè)中間代理層,其就像一個(gè)連接池負(fù),責(zé)轉(zhuǎn)發(fā)前臺(tái)應(yīng)用的請(qǐng)求給后臺(tái)的數(shù)據(jù)庫,并通過加載lua腳本實(shí)現(xiàn)讀寫分離和負(fù)載均衡。對(duì)于用戶而言,mysql-proxy完全透明,應(yīng)用只需鏈接到mysql-proxy的監(jiān)聽端口即可。當(dāng)然,這樣的代理服務(wù)器會(huì)成為單點(diǎn)故障,本項(xiàng)目使用redhat提供的HA集群技術(shù)對(duì)其進(jìn)行冗余。這個(gè)項(xiàng)目中采用proxy的讀寫分離和負(fù)載均衡功能,其原理是讓主數(shù)據(jù)庫負(fù)責(zé)處理DML語句,讓兩臺(tái)從數(shù)據(jù)庫負(fù)責(zé)select查詢。而兩臺(tái)從庫會(huì)通過AB復(fù)制同步主庫數(shù)據(jù),代理在實(shí)現(xiàn)讀寫分離的同時(shí)也會(huì)將讀請(qǐng)求以通過輪詢的方式分發(fā)給兩臺(tái)讀數(shù)據(jù)庫,從而減小讀數(shù)據(jù)庫的壓力。這里其實(shí)是存在單點(diǎn)故障的,試想如果寫庫發(fā)生宕機(jī),整個(gè)系統(tǒng)便不能對(duì)外提供服務(wù),所以會(huì)使用到mysql-mmm架構(gòu),里面提供的浮動(dòng)IP技術(shù)能很好的解決這一問題,這里先提一下,后面有詳細(xì)的介紹。這里要特別指出的,建議將mysql-proxy用于中小型網(wǎng)站,特別是讀查詢多的網(wǎng)站。如果是大型網(wǎng)站或者門戶型的網(wǎng)站,最好還是從開發(fā)層面實(shí)現(xiàn)讀寫分離。具體它是如何工作的,如下圖所示:一個(gè)完整的讀寫分離應(yīng)該包括如下幾個(gè)部分:1.應(yīng)用程序client2.databaseproxy3.mysql數(shù)據(jù)庫圖4-1proxy原理圖如圖所示,proxy就是一個(gè)連接池,負(fù)責(zé)將前臺(tái)應(yīng)用的鏈接請(qǐng)求轉(zhuǎn)發(fā)給后臺(tái)的數(shù)據(jù)庫,并且通過Lua腳本實(shí)現(xiàn)復(fù)雜的鏈接控制和過濾,從而可以實(shí)現(xiàn)讀寫分離和負(fù)載均衡。在linux操作系統(tǒng)下是通過編輯/etc/sysconfig/mysql-proxy文件并加載lua腳本實(shí)現(xiàn)讀寫分離和輪循讀請(qǐng)求的,如下圖所示:圖4-2proxy配置文件-r后所跟的IP表示只讀數(shù)據(jù)庫的IP,3306是代理監(jiān)聽讀數(shù)據(jù)庫的端口,可以看到這里有兩個(gè)-r,意味著有兩臺(tái)用來讀的數(shù)據(jù)庫,正常情況下代理會(huì)將讀請(qǐng)求以輪循的方式進(jìn)行分配,一旦發(fā)現(xiàn)自己無法監(jiān)聽某臺(tái)機(jī)器的3306端口,會(huì)認(rèn)為它沒有在正常工作,此時(shí)會(huì)將所有的讀請(qǐng)求都分配到另一臺(tái)機(jī)器上(本項(xiàng)目實(shí)際上不需要用到proxy的這項(xiàng)功能,因?yàn)閙ysql-mmm集群中的monitor會(huì)對(duì)VIP進(jìn)行遷移,遷移后,兩個(gè)VIP會(huì)綁定在同一臺(tái)讀數(shù)據(jù)庫上)。在這個(gè)配置文件中還加載了lua腳本:/tmp/mysql-proxy-0.8.3/lib/rw-splitting.lua,這個(gè)腳本需要自己手動(dòng)安裝,該腳本是實(shí)現(xiàn)代理所有功能的關(guān)鍵,所以路徑名稱必須寫對(duì)。-P后面的地址是在配置HA集群后的浮動(dòng)IP,代理需要對(duì)其進(jìn)行監(jiān)聽,否則web層的應(yīng)用無法通過浮動(dòng)IP訪問代理,進(jìn)而無法訪問后端的數(shù)據(jù)庫。配置文件中出現(xiàn)的第一個(gè)地址就是用來處理寫請(qǐng)求的數(shù)據(jù)庫地址(注意:這里所有的地址都是浮動(dòng)IP),一旦寫讀數(shù)據(jù)庫宕機(jī),該浮動(dòng)IP會(huì)漂移到備份的那一臺(tái)上,從而實(shí)現(xiàn)整個(gè)集群的無單點(diǎn)故障。代理無需關(guān)心后端的mysql-mmm如何工作,它所做的就是根據(jù)浮動(dòng)IP轉(zhuǎn)發(fā)請(qǐng)求,浮動(dòng)IP漂移到哪臺(tái),代理就分配請(qǐng)求到哪臺(tái)。4.2高可用的mysql-proxy集群4.2.1HA集群的概念高可用集群通過特殊軟件把獨(dú)立的系統(tǒng)(node)連接起來,組成一個(gè)能夠提供故障切換功能的集群。它可保證在多種故障中,關(guān)鍵服務(wù)的可用性、可靠性及數(shù)據(jù)完整性。主要用于文件服務(wù),WEB服務(wù),數(shù)據(jù)庫服務(wù)等關(guān)鍵應(yīng)用中,這里使用的是HA-proxy??捎眯酝ǔV赶到y(tǒng)的uptime,在7x24x3600的工作環(huán)境中,99%的可用性指在一年中可以有87小時(shí)36分鐘的DOWN機(jī)時(shí)間,關(guān)鍵服務(wù)中,一天的故障時(shí)間是無法接受的,一般達(dá)到99.999%的可用性需求便稱之為高可用。4.2.2Linux高可用性集群的相關(guān)技術(shù)概念1.單一故障點(diǎn)單一故障點(diǎn)應(yīng)當(dāng)是高可用集群極力避免的問題,HA集群需要包含雙控制器的RAID陣列,具有冗余特性的不間斷的供電系統(tǒng)和多個(gè)網(wǎng)絡(luò)頻道。從而確保服務(wù)停運(yùn)的情況不會(huì)出現(xiàn)。總的來說就是什么東西都要雙份,如果經(jīng)費(fèi)不夠,還可以設(shè)置費(fèi)用相對(duì)較低的高可用集群,這里就會(huì)存在單一故障點(diǎn),比如只有單個(gè)以太網(wǎng)頻道或者單個(gè)供電系統(tǒng)。2.仲裁為了能夠判斷集群中的節(jié)點(diǎn)是否在正常提供服務(wù),HA集群中引入了仲裁機(jī)制。集群的節(jié)點(diǎn)會(huì)訪問共享磁盤上保存的成員節(jié)點(diǎn)信息,如果仲裁信息表明某些成員服務(wù)器的運(yùn)行狀態(tài)不正常,則會(huì)把它從集群中刪除,并將其正在運(yùn)行的服務(wù)切換到失效域中的其他服務(wù)器上。3.失效遷移當(dāng)HA集群中某個(gè)節(jié)點(diǎn)成員運(yùn)行的服務(wù)發(fā)生故障時(shí),會(huì)發(fā)生服務(wù)失效轉(zhuǎn)移,這是HA集群用來保證服務(wù)保持性的過程。4.可編程電源控制器可編程電源控制器可由外部設(shè)備控制的電源控制器構(gòu)成,當(dāng)某臺(tái)成員服務(wù)器死鎖,可通過其它成員服務(wù)器或設(shè)備強(qiáng)行關(guān)閉該成員服務(wù)器的電源。4.2.3readhat高可用集群的所需的相關(guān)組件本項(xiàng)目采用redhat提供的HA套件,各組件關(guān)系如下圖所示,下面分別進(jìn)行講解:圖4-3RHCS-HA原理圖1.分布式集群管理器(CMAN)CMAN通過監(jiān)控每個(gè)節(jié)點(diǎn)的運(yùn)行情況用來管理集群成員,可通過它了解集群中各節(jié)點(diǎn)當(dāng)前所處的狀態(tài),比如節(jié)點(diǎn)是否online等。當(dāng)集群狀態(tài)發(fā)生改變,如節(jié)點(diǎn)損壞或者新節(jié)點(diǎn)加入、退出等,CMAN會(huì)將這種改變通知底層,進(jìn)而將變化及時(shí)的反映出來。2.柵設(shè)備(FENCE)柵設(shè)備是紅帽HA套件中不可缺少的組成部分,它的存在就是為了防止腦裂現(xiàn)象的發(fā)生。當(dāng)目前運(yùn)行服務(wù)的節(jié)點(diǎn)發(fā)生故障,backup首先會(huì)通知fence設(shè)備將故障機(jī)reboot,將其成功從網(wǎng)絡(luò)隔離后,fence設(shè)備將信息返回給backup,backup在收到成功信息后開始接管主機(jī)的資源并啟動(dòng)相應(yīng)服務(wù)。通過fence設(shè)備把失效節(jié)點(diǎn)占據(jù)的資源釋放,從而保證整個(gè)集群的服務(wù)在同一時(shí)刻只會(huì)由一個(gè)節(jié)點(diǎn)提供。3.資源組管理器(rgmanager)rgmanager主要用來對(duì)集群資源進(jìn)行管理,其必須運(yùn)行在每個(gè)節(jié)點(diǎn)上,用來為集群提供服務(wù)的錯(cuò)誤切換功能。當(dāng)正在提供服務(wù)的節(jié)點(diǎn)失效,它會(huì)將服務(wù)遷移到其他健康節(jié)點(diǎn)上,這個(gè)過程對(duì)于用戶而言是透明的。并且rgmanager提供了手動(dòng)方式對(duì)服務(wù)進(jìn)行管理,比如現(xiàn)在想重啟集群的服務(wù),只需要到任意節(jié)點(diǎn)上使用clusvcadm命令即可。當(dāng)然也可以手動(dòng)對(duì)集群服務(wù)進(jìn)行遷移,當(dāng)主機(jī)正常運(yùn)行時(shí)可以將服務(wù)平滑的遷移到backup上,讓backup變成集群中對(duì)外提供服務(wù)的機(jī)器,以上這些功能都是由rgmanager提供的。4.浮動(dòng)IP(VirtualIP)VIP作為客戶的唯一入口,其會(huì)綁定在HA集群中的某一個(gè)節(jié)點(diǎn)上,綁定在誰上,誰就是整個(gè)HA集群正在中提供服務(wù)的節(jié)點(diǎn)。5.節(jié)點(diǎn)(Node)不管其是否正在提供服務(wù),只要它加入在集群當(dāng)中,其就是集群的成員節(jié)點(diǎn)。6.資源(resource)資源通常包括:VIP、文件系統(tǒng)、服務(wù)腳本等,它是組成一個(gè)應(yīng)用所需的組件。資源在分配通時(shí)常需按照特定的層次關(guān)系,一般會(huì)在虛擬IP和文件系統(tǒng)被掛接后才能夠運(yùn)行某個(gè)應(yīng)用程序,一旦順序弄錯(cuò),很可能導(dǎo)致服務(wù)遷移失敗。7.服務(wù)(service)服務(wù)由資源組成,作為一個(gè)整體概念,它必須包含完成客戶整個(gè)請(qǐng)求的所有要素。比如在一個(gè)lamp的HA環(huán)境中,服務(wù)應(yīng)該包括apache進(jìn)程、php進(jìn)程、mysql進(jìn)程、共享文件系統(tǒng)、和提供服務(wù)的唯一入口,也就是IP地址。前面提到的每一項(xiàng)都可以稱為一個(gè)資源,把這些所有資源整合在一起,稱之為一個(gè)服務(wù)。通常所說的服務(wù)遷移,歸根結(jié)底是資源的遷移。8.失效域(FailoverDomain)一個(gè)集群中可以有多個(gè)失效域,一個(gè)失效域需由多個(gè)節(jié)點(diǎn)組成,一個(gè)節(jié)點(diǎn)可以屬于一個(gè)或多個(gè)失效域。失效域是一個(gè)范圍概念,它是服務(wù)遷移的邊界,一個(gè)服務(wù)可以在一個(gè)失效域中遷移,假設(shè)現(xiàn)在集群中有4個(gè)成員,其中1-3號(hào)機(jī)被劃分在失效域FD1里,在FD1中運(yùn)行著一個(gè)名叫my-web的服務(wù),4號(hào)機(jī)器在該失效域外。my-web服務(wù)可以在1-3號(hào)之間任意遷移,但不能遷移出這個(gè)失效域到4號(hào)機(jī)上。9.心跳(HeartBeat)心跳是HA集群監(jiān)視服務(wù)器狀態(tài)的方法,一般情況下心跳是通過網(wǎng)絡(luò)數(shù)據(jù)包來判斷服務(wù)器是否正常運(yùn)行。10.集群配置管理工具(conga)Conga基于B/S模型,由luci和ricci組成,它是管理紅帽HA集群的圖形用戶界面。作為集群web配置和監(jiān)控系統(tǒng),luci需安裝在一臺(tái)獨(dú)立的計(jì)算機(jī)上。ricci作為配置和監(jiān)控系統(tǒng)的客戶端代理運(yùn)行在各節(jié)點(diǎn)上,luci通過ricci和集群中的每個(gè)節(jié)點(diǎn)進(jìn)行通信。剛才在介紹fence設(shè)備時(shí)提到了一個(gè)名詞,叫做‘腦裂’,在這里簡(jiǎn)單介紹一下:現(xiàn)在有CRH1和CRH2兩臺(tái)服務(wù)器,它們受到控制中心的管理并通過心跳線互相檢測(cè)對(duì)方的運(yùn)行狀態(tài),如果其中一臺(tái)出現(xiàn)故障,另外一臺(tái)會(huì)自動(dòng)的接管該集群的所有資源并啟動(dòng)服務(wù)?,F(xiàn)在由于人為或其他原因?qū)е滦奶€被斷開,兩臺(tái)服務(wù)器互相無法檢測(cè)到對(duì)方的心跳,這時(shí)候就會(huì)產(chǎn)生腦裂,CRH1無法檢測(cè)到CRH2的信號(hào)從而判斷CRH2失效,而CRH2無法檢測(cè)到CRH1的信號(hào)從而判斷CRH1失效,于是兩臺(tái)服務(wù)器就開始搶奪資源,最終導(dǎo)致服務(wù)奔潰,數(shù)據(jù)發(fā)生丟失。當(dāng)引入fence設(shè)備后,在無法檢測(cè)到對(duì)方信號(hào)后每個(gè)節(jié)點(diǎn)會(huì)嘗試啟動(dòng)fence設(shè)備,將失效的節(jié)點(diǎn)剔除出集群然后再接管資源,這樣就保證只有一個(gè)節(jié)點(diǎn)可以訪問群的資源,從而避免了由于資源爭(zhēng)奪造成的服務(wù)奔潰。圖4-4fence示例4.2.4高可用mysql-proxy集群的簡(jiǎn)單說明系統(tǒng)拓?fù)鋱D如下所示:圖4-5HA如上圖所示,在實(shí)施過程中使用了2臺(tái)kvm虛擬機(jī)做mysql-proxy。兩臺(tái)proxy互為備份,并且始終只有一臺(tái)提供代理服務(wù),這里將兩臺(tái)proxy劃分在一個(gè)名為FD1的失效域中,F(xiàn)D1中運(yùn)行著一個(gè)名為proxy-service的服務(wù)。在創(chuàng)建將集群時(shí),由于沒有真實(shí)的fence設(shè)備,筆者用兩臺(tái)虛擬機(jī)所在的本機(jī)充當(dāng)fence設(shè)備,這里要使用KVMfence_virtd作為Fence設(shè)備對(duì)虛擬節(jié)點(diǎn)做阻隔控制,并分別在兩臺(tái)proxy和proxy所在的真機(jī)上安裝fence-virt、fence-virtd-libvirt、fence-virtd-multicast這三個(gè)軟件包,在真機(jī)上使用fence_virtd–c命令來創(chuàng)建fence-virt的配置文件(具體過稱在實(shí)施文檔中詳細(xì)列出),然后在配置的過程中依次創(chuàng)建2個(gè)fence設(shè)備,然后將這些fence設(shè)備和兩臺(tái)虛擬機(jī)關(guān)聯(lián)起來即可。在創(chuàng)建失效域時(shí)為proxy-service服務(wù)添加其擁有的資源:mysql-proxy的啟動(dòng)腳本(/etc/in

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論