計(jì)算機(jī)集群
計(jì)算機(jī)集群簡稱集群(Clusters)蚀苛,是一種計(jì)算機(jī)系統(tǒng)在验。它通過一組散列集成的 軟件或硬件 連接起來高度緊密地協(xié)作完成計(jì)算工作。在莫種意義上堵未,他們可以被看做是一臺計(jì)算機(jī)腋舌。
集群系統(tǒng)中的單個(gè)計(jì)算機(jī)通常稱為節(jié)點(diǎn),通常通過內(nèi)網(wǎng)連接渗蟹,但也有其它的可能連接方式块饺。集群計(jì)算機(jī)通常用來改進(jìn)單個(gè)計(jì)算機(jī)的計(jì)算速度和可靠性。
集群分類
集群分為同構(gòu)和異構(gòu)雌芽,他們區(qū)別在于 “組成集群系統(tǒng)的計(jì)算機(jī)之間的體系結(jié)構(gòu)是否相同”授艰。
集群計(jì)算機(jī)按功能和結(jié)構(gòu)可以分為以下幾類:
高可用性集群 HA(High-Availability clusters);
負(fù)載均衡集群(Load Balancing clusters)世落;
高性能計(jì)算集群(High Performance clusters)淮腾;
網(wǎng)格計(jì)算(Grid Computing);
集群技術(shù)特點(diǎn)
通過多臺計(jì)算機(jī)完成同一工作岛心,達(dá)到更高的效率来破;
多臺主機(jī)內(nèi)容篮灼、工作過程等完全一樣忘古,其中一臺宕機(jī)不會影響全局;
Linux服務(wù)器集群概念
集群诅诱、冗余髓堪、負(fù)載均衡、主從復(fù)制娘荡、讀寫分離干旁、分布式、分布式計(jì)算炮沐、分布式計(jì)算平臺争群、并行計(jì)算......
實(shí)際生產(chǎn)環(huán)境中常有的問題:
1,當(dāng)數(shù)據(jù)庫性能遇到問題時(shí)大年,是否能夠橫向擴(kuò)展换薄,通過添加服務(wù)器的方式達(dá)到更高的吞吐量玉雾,從而充分利用現(xiàn)有的硬件實(shí)現(xiàn)更好的投資回報(bào)率;
2轻要,是否擁有實(shí)時(shí)同步的副本复旬,當(dāng)數(shù)據(jù)庫面臨災(zāi)難時(shí),可以短時(shí)間內(nèi)通過故障轉(zhuǎn)移的方式保證數(shù)據(jù)庫的可用性冲泥。此外驹碍,當(dāng)數(shù)據(jù)丟失或損壞時(shí),能否通過所謂的實(shí)時(shí)副本(熱備)實(shí)現(xiàn)數(shù)據(jù)的零損失凡恍;
3志秃,數(shù)據(jù)庫的橫向擴(kuò)展是都對應(yīng)用程序透明,如果數(shù)據(jù)庫的橫向擴(kuò)展需要應(yīng)用程序端進(jìn)行大量修改嚼酝,則所帶來的后果不僅僅是高昂的開發(fā)成本洽损,同時(shí)也會帶來很多潛在和非潛在的風(fēng)險(xiǎn);
集群和冗余
集群和冗余并不對立革半,多臺服務(wù)器做集群(不是主從)碑定,本身就有冗余和負(fù)載均衡的效果。
狹義上來說又官,集群就是把多臺服務(wù)器虛擬成一臺服務(wù)器延刘,而冗余的每臺服務(wù)器都是獨(dú)立的。
集群的側(cè)重點(diǎn)在于協(xié)同六敬,多臺服務(wù)器系統(tǒng)分擔(dān)工作碘赖,提升效率;
冗余的側(cè)重點(diǎn)在于防止單點(diǎn)故障外构,一主多備的架構(gòu)普泡,也就是主從復(fù)制;
數(shù)據(jù)冗余==高可用性==主從审编;
主從一定程度上起到了負(fù)載均衡的作用撼班,但主要目的還是為了保證數(shù)據(jù)冗余和高可用性;
主從只提供一種成本較低的數(shù)據(jù)備份方案加上不完美的災(zāi)難和負(fù)載均衡垒酬,由于復(fù)制存在時(shí)間差砰嘁,不能同步讀,所以只是不完善的負(fù)載均衡和有損災(zāi)備勘究;
主從顯然達(dá)不到集群的嚴(yán)格度矮湘,不論是 HA 還是 AA(多活并行集群),主從都達(dá)不到數(shù)據(jù)一致性的集群要求口糕;
主從很難嚴(yán)格界定是哪種模式缅阳,可以歸類為:
有一定冗余度的非一致性異步副本(不可靠不同步);
對于沒有嚴(yán)格一致性要求的系統(tǒng)景描,可以定制為 分擔(dān)負(fù)載十办、查詢過時(shí)報(bào)表孤里;
負(fù)載均衡愉择、高可用免猾、高性能是什么
集群有負(fù)載均衡集群、高可用集群貌夕、高性能集群炸枣,分別側(cè)重于抗并發(fā)虏等,避免單點(diǎn)故障和大數(shù)據(jù)下的并行處理。三者也有不同的實(shí)現(xiàn)方法适肠,但同時(shí)這三者又是相輔相成的霍衫。
負(fù)載均衡集群(Load Balance clusters)
負(fù)載均衡著重在于提供服務(wù)并發(fā)處理能力的集群。是為了消除性能瓶頸侯养,當(dāng)然也可以起到備份工作敦跌。把負(fù)載壓力根據(jù)某種算法合理分配到集群中的每一臺計(jì)算機(jī)上,以減輕主服務(wù)器的壓力逛揩,降低對主服務(wù)器的硬件和軟件要求柠傍;
負(fù)載均衡運(yùn)行時(shí),一般通過一個(gè)或者多個(gè)前端負(fù)載均衡器辩稽,將工作負(fù)載分發(fā)到后端的一組服務(wù)器上惧笛,從而達(dá)到整個(gè)系統(tǒng)的高性能和高可用性。這樣的計(jì)算機(jī)集群有時(shí)也被稱為服務(wù)器群(Server Farm)逞泄;
實(shí)現(xiàn)原理患整,一個(gè)負(fù)載均衡器加上一個(gè)集群實(shí)現(xiàn)的。負(fù)載均衡集群中有一個(gè) 分發(fā)器(調(diào)度器)喷众,我們稱之為Director各谚,它處在多臺服務(wù)器上面,分發(fā)器根據(jù)內(nèi)部鎖定義的規(guī)則或調(diào)度方式從下面的服務(wù)器群中選擇一個(gè)以此來響應(yīng)客戶端發(fā)送的請求到千。分?jǐn)偟蕉鄠€(gè)操作單元上進(jìn)行執(zhí)行昌渤,例如Web服務(wù)器,F(xiàn)TP服務(wù)器父阻,企業(yè)關(guān)鍵任務(wù)服務(wù)器等愈涩,從而共同完成工作任務(wù)望抽;
一般高可用性集群和負(fù)載均衡集群會使用類似的技術(shù)加矛,或同時(shí)具有高可用性和負(fù)載均衡的特點(diǎn);
Linux虛擬服務(wù)器(LVS)項(xiàng)目 在Linux操作系統(tǒng)上提供最常用的負(fù)載均衡軟件煤篙;
高可用性集群(High Availability clusters)
一般是指當(dāng)集群中有某個(gè)節(jié)點(diǎn)失效的情況下斟览,其上的任務(wù)會自動轉(zhuǎn)移到其他正常的節(jié)點(diǎn)上.還指可以將集群中的某節(jié)點(diǎn)進(jìn)行離線維護(hù)再上線,該過程并不影響整個(gè)集群的運(yùn)行辑奈;
高可用 以提升服務(wù)在線的能力的集群苛茂;
高可用集群主要是為了避免單點(diǎn)故障存在的已烤,備機(jī)平時(shí)不參與工作。高可用集群是可用性比較高妓羊,當(dāng)我們某臺服務(wù)器死機(jī)后不會造成我們的服務(wù)不可用胯究。其工作模式則是將一個(gè)具有故障的服務(wù)轉(zhuǎn)交給一個(gè)正常工作的服務(wù)器,從而達(dá)到服務(wù)不會中斷躁绸。一般來說我們集群中工作在前端(分發(fā)器)的服務(wù)器都會對我們的后端服務(wù)器做一個(gè)健康檢查裕循,如果發(fā)現(xiàn)我們服務(wù)器宕機(jī)就不會對其再做轉(zhuǎn)發(fā);
衡量標(biāo)準(zhǔn):可用性=在線時(shí)間(在線時(shí)間+故障處理時(shí)間)净刮;
高可用性集群剥哑,是保證業(yè)務(wù)連續(xù)性的有效解決方案,一般有兩個(gè)或兩個(gè)以上的節(jié)點(diǎn)淹父,且分為活動節(jié)點(diǎn)及備用節(jié)點(diǎn)株婴。通常把正在執(zhí)行業(yè)務(wù)的稱為活動節(jié)點(diǎn),而作為活動節(jié)點(diǎn)的一個(gè)備份則稱為備份節(jié)點(diǎn)暑认。當(dāng)活動節(jié)點(diǎn)出現(xiàn)問題困介,導(dǎo)致正在運(yùn)行的業(yè)務(wù)不能正常運(yùn)行時(shí),備用結(jié)點(diǎn)此時(shí)就會偵測到蘸际,并立即接續(xù)活動節(jié)點(diǎn)來執(zhí)行業(yè)務(wù)逻翁,從而實(shí)現(xiàn)業(yè)務(wù)的不中斷或短暫中斷;
實(shí)現(xiàn)原理:利用集群管理軟件捡鱼,當(dāng)主機(jī)故障時(shí)八回,備機(jī)能夠自動接管主機(jī)的工作,并及時(shí)切換過去驾诈,以實(shí)現(xiàn)對用戶的不間斷服務(wù)缠诅;
高性能集群(High Performance clusters)
高性能著重用于處理一個(gè)海量任務(wù);
高性能集群是當(dāng)某一個(gè)任務(wù)量非常大的時(shí)候乍迄,我們做一個(gè)集群共同來完成這一任務(wù)管引,所以又被稱為 “并行處理集群”;
充分利用集群中每一臺計(jì)算機(jī)的資源闯两,實(shí)現(xiàn)復(fù)雜運(yùn)算的并行處理褥伴,通常用于科學(xué)計(jì)算領(lǐng)域,如化學(xué)分析等漾狼;
實(shí)現(xiàn)原理:并行處理集群試講大人物劃分為小任務(wù)重慢,分別進(jìn)行處理的機(jī)制。一般這樣的集群用來科學(xué)研究與大數(shù)據(jù)運(yùn)算等方面的工作⊙吩辏現(xiàn)在比較火的Hadoop就是使用并行處理集群似踱;
高可用與負(fù)載均衡有什么區(qū)別
HA 和 LB 確實(shí)不是一個(gè)概念,解決方案的側(cè)重點(diǎn)完全不同。
HA偏重于備用資源核芽,切機(jī)時(shí)會有業(yè)務(wù)的斷開的囚戚,保證了數(shù)據(jù)的安全,但造成資源的浪費(fèi)轧简;
LB側(cè)重于資源的充分應(yīng)用驰坊,沒有主備的概念,只有資源的最大限度的加權(quán)平均應(yīng)用哮独,基本不會業(yè)務(wù)的中斷庐橙;
從目的上來說:
HA的目的是不中斷服務(wù),LB的目的是為了提高接入能力借嗽。雖然經(jīng)常放一起用态鳖,但確實(shí)是兩個(gè)不同的領(lǐng)域;
從功能上來說:
HA在一條路不通的時(shí)候提供另一條路可走恶导,而 LB 就類似于是春運(yùn)時(shí)的多個(gè)窗口浆竭;
HA 和 LB是兩個(gè)概念的問題,一般來說沒有誰優(yōu)誰劣的標(biāo)準(zhǔn)惨寿,只有在特定的環(huán)境下邦泄,誰更適合的問題。
向上擴(kuò)展和向外擴(kuò)展(單機(jī)和多機(jī))
向上擴(kuò)展:升級當(dāng)臺服務(wù)器的硬件裂垦;
缺點(diǎn)是在一定的范圍之內(nèi)它的性能是上升的趨勢顺囊,但是超出范圍之后就是下降的趨勢,隨著CPU個(gè)數(shù)的增加資源競爭性越大蕉拢;
向外擴(kuò)展:增加新的服務(wù)器特碳;
優(yōu)勢是增減服務(wù)器很方便,而且沒有向上擴(kuò)展隨著增加性能下降晕换;
集群管理工具
Swarm - Docker午乓;
Fleet – Core OS;
Kubernetes –谷歌闸准;
Mesos – Apache益愈;
負(fù)載均衡
所謂負(fù)載均衡,就是把大訪問量分發(fā)給不同的服務(wù)器夷家,也就是分流請求蒸其。
實(shí)現(xiàn)負(fù)載均衡的六種方法
1,HTTP重定向協(xié)議實(shí)現(xiàn)負(fù)載均衡
HTTP 重定向就是應(yīng)用層的請求轉(zhuǎn)發(fā)库快,用戶的請求其實(shí)已經(jīng)到了HTTP重定向負(fù)載均衡服務(wù)器摸袁,服務(wù)器根據(jù)算法要求用戶重定向,用戶收到重定向請求后缺谴,再次請求真正的集群但惶;
優(yōu)點(diǎn):簡單耳鸯;
缺點(diǎn):性能較差湿蛔;
2膀曾,DNS域名解析負(fù)載均衡
DNS域名解析負(fù)載均衡就是在用戶請求DNS服務(wù)器,獲取域名對應(yīng)的IP地址時(shí)阳啥,DNS服務(wù)器直接給出負(fù)載均衡后的服務(wù)器IP添谊;
優(yōu)點(diǎn):交給DNS,不用我們?nèi)ゾS護(hù)負(fù)載均衡服務(wù)器察迟;
缺點(diǎn):當(dāng)一個(gè)應(yīng)用服務(wù)器掛了斩狱,不能及時(shí)通知DNS,而且DNS負(fù)載均衡的控制權(quán)在域名服務(wù)商那里扎瓶,網(wǎng)站無法做更多的改善和更強(qiáng)大的管理所踊;
3,反向代理負(fù)載均衡
在用戶的請求到達(dá)方向代理服務(wù)器時(shí)(已到達(dá)網(wǎng)站機(jī)房)概荷,由于反向代理服務(wù)器根據(jù)算法轉(zhuǎn)發(fā)到具體的服務(wù)器秕岛,常用的Apache,Nginx都可以充當(dāng)反向代理服務(wù)器误证;
優(yōu)點(diǎn):部署簡單继薛;
缺點(diǎn):代理服務(wù)器可能成為性能的瓶頸,特別是一次上傳大文件愈捅;
LVS集群中實(shí)現(xiàn)的三種IP負(fù)載均衡技術(shù)
4遏考,IP負(fù)載均衡
LVS-NAT,在請求到達(dá)負(fù)載均衡器后蓝谨,負(fù)載均衡器通過修改請求的目的IP地址灌具,從而實(shí)現(xiàn)請求的轉(zhuǎn)發(fā),做到負(fù)載均衡譬巫;
優(yōu)點(diǎn):性能更好稽亏;
缺點(diǎn):負(fù)載均衡器的帶寬稱為瓶頸;
5缕题,直接路由負(fù)載均衡
LVS-DR截歉,數(shù)據(jù)鏈路層負(fù)載均衡,在請求到達(dá)負(fù)載均衡器后烟零,負(fù)載均衡器通過修改請求的Mac地址瘪松,從而做到負(fù)載均衡,與IP負(fù)載均衡不一樣的是锨阿,當(dāng)請求訪問完服務(wù)器之后宵睦,直接返回客戶,而無需在經(jīng)過負(fù)載均衡器墅诡;
6壳嚎,IP隧道負(fù)載均衡(LVS-TUN)
負(fù)載均衡和反向代理有什么區(qū)別
做了反向代理才能實(shí)現(xiàn)負(fù)載均衡,負(fù)載均衡是做反向代理的目的之一。
Nginx負(fù)載均衡分發(fā)請求的幾種方式
1烟馅,輪詢说庭;
2,權(quán)重郑趁;
3刊驴,IP-hsah
#1,2,3是Nginx自帶方法;4,5是第三方方法
4寡润,fair捆憎;
5,url_hash梭纹;
主從復(fù)制
主從復(fù)制的作用
主從是一種用于數(shù)據(jù)容錯(cuò)和災(zāi)備的高可用解決方案躲惰,而不是一種處理高并發(fā)壓力的解決方案(負(fù)載均衡是用來抗并發(fā)的)
1,主機(jī)負(fù)責(zé)查詢变抽,從機(jī)負(fù)責(zé)增刪改础拨;
2,可以在從機(jī)上執(zhí)行備份瞬沦,以避免備份期間影響主機(jī)的服務(wù)太伊;
3,主從復(fù)制后逛钻,也可以在從機(jī)上查詢僚焦,以降低主機(jī)的訪問壓力。但是曙痘,只有更新不頻繁的數(shù)據(jù)或者對實(shí)時(shí)性要求不高的數(shù)據(jù)可以通過從服務(wù)器查詢芳悲,實(shí)時(shí)性要求高的數(shù)據(jù)仍需在主服務(wù)器查詢(因?yàn)橹鲝膹?fù)制有同步延遲,所以不能保證強(qiáng)數(shù)據(jù)一致性)边坤;
主從復(fù)制和讀寫分離的區(qū)別
主從復(fù)制是實(shí)現(xiàn)讀寫分離的技術(shù)之一名扛,也是實(shí)現(xiàn)讀寫分離的前提條件。
做讀寫分離時(shí)最重要的就是確保 讀庫 和 寫庫 的數(shù)據(jù)統(tǒng)一茧痒,而主從復(fù)制是實(shí)現(xiàn)數(shù)據(jù)統(tǒng)一最簡單的方法(并不能夠保證強(qiáng)數(shù)據(jù)的一致性)肮韧;
讀寫分離,顧名思義旺订,就是一個(gè)表只負(fù)責(zé)向前臺頁面展示數(shù)據(jù)弄企,而后臺管理人員對表的增刪改在另一個(gè)表中,把兩個(gè)表分開区拳,就是讀寫分離拘领;
主從復(fù)制則是一個(gè)表數(shù)據(jù) 增刪改 之后會及時(shí)更新到另一個(gè)表中,保證兩個(gè)表的數(shù)據(jù)一致樱调;
實(shí)現(xiàn)主從復(fù)制的方法
MySQL主從復(fù)制约素;
MongoDB主從復(fù)制届良;
如何減少主從復(fù)制的同步延遲
MySQL主從數(shù)據(jù)庫同步延遲問題;
MongoDB主從數(shù)據(jù)庫同步延遲問題圣猎;
主從復(fù)制側(cè)重點(diǎn)不同的幾種類型
雙機(jī)熱備=主機(jī)+備機(jī)士葫;
主要應(yīng)用運(yùn)行在主機(jī),備機(jī)即備用機(jī)器样漆。備機(jī)不工作为障,主機(jī)出現(xiàn)故障時(shí)備機(jī)接管主機(jī)的所有工作晦闰;
雙機(jī)互備=主機(jī)(備機(jī)) + 備機(jī)(主機(jī))放祟;
互為主備,部分應(yīng)用運(yùn)行于主機(jī)呻右,部分應(yīng)用運(yùn)行于備機(jī)跪妥,主機(jī)備機(jī)同時(shí)工作;
雙機(jī)雙工=主機(jī)+主機(jī)声滥;
兩臺主機(jī)同時(shí)運(yùn)行應(yīng)用眉撵,主機(jī)備機(jī)同時(shí)工作;
分布式
分布式與集群有什么區(qū)別
廣義上的分布式是指落塑,將不同的服務(wù)分布在不同的服務(wù)器上纽疟;
集群是指,將幾臺服務(wù)器集中在一起憾赁,實(shí)現(xiàn)同一業(yè)務(wù)污朽;
分布式中的每一個(gè)節(jié)點(diǎn)都可以做集群,而集群并不一定是分布式的龙考;
Web負(fù)載均衡蟆肆、集群、高可用解決方案
組件
Apache晦款,Apache軟件基金會下的一個(gè)項(xiàng)目炎功,Apache HTTP Server ;
Nginx缓溅,高性能HTTP和反向代理服務(wù)器蛇损,Nginx HTTP Server;
LVS坛怪,Linux虛擬服務(wù)器淤齐,是一個(gè)虛擬的服務(wù)器集群系統(tǒng);
HAProxy酝陈,可提供高可用性床玻、負(fù)載均衡以及基于TCP和HTTP應(yīng)用的代理,支持虛擬主機(jī)沉帮,它是免費(fèi)锈死、快速并且可靠的一種解決方案贫堰。HAProxy特別適用于那些負(fù)載特大的web站點(diǎn),這些站點(diǎn)通常有需要會話保持或七層處理待牵。HAProxy運(yùn)行中當(dāng)前的硬件上其屏,完全可以支持?jǐn)?shù)以萬計(jì)的并發(fā)連接,并且它的運(yùn)行模式使得它可以很簡單安全的整合進(jìn)你當(dāng)前的架構(gòu)中缨该,同時(shí)可以保護(hù)你的Web服務(wù)器不被暴露到網(wǎng)絡(luò)上偎行;
Keepalived,這里說的keepalived不是Apache或者Tomcat等某個(gè)組件上的屬性字段贰拿,它也是一個(gè)組件蛤袒,可以實(shí)現(xiàn)Web服務(wù)器的高可用。它可以檢測Web服務(wù)器的工作狀態(tài)膨更,如果該服務(wù)器出現(xiàn)故障被檢測到妙真,將其剔除服務(wù)器群中,直至正常工作后荚守,Keepalived會自動檢測到并加入到服務(wù)器群里面珍德。實(shí)現(xiàn)主備服務(wù)器發(fā)生故障時(shí)IP瞬時(shí)無縫交接。它是LVS集群節(jié)點(diǎn)將抗檢測的一個(gè)用戶空間守護(hù)進(jìn)程矗漾,也是LVS的引導(dǎo)故障轉(zhuǎn)移模塊(director failover)锈候。Keepalived守護(hù)進(jìn)程可以檢查LVS池的狀態(tài)。如果LVS服務(wù)器池當(dāng)中的某一個(gè)服務(wù)器宕機(jī)了敞贡,Keepalived會通過一個(gè)setsockopt呼叫通知內(nèi)核將這個(gè)節(jié)點(diǎn)從LVS拓?fù)鋱D中移除泵琳;
Memcached,它是一個(gè)高性能分布式內(nèi)存對象緩存系統(tǒng)嫡锌,用于對業(yè)務(wù)查詢數(shù)據(jù)緩存虑稼,減輕數(shù)據(jù)庫的負(fù)載,在memcached里面緩存的數(shù)據(jù)必須序列化势木;
Teeracotta蛛倦,是一款由美國Teeracotta公司開發(fā)的著名開源Java集群平臺,支持?jǐn)?shù)據(jù)的持久化啦桌、session的復(fù)制以及高可用溯壶;
常用Web集群
Tomcat
Apache Tomcat是Apache基金會下開發(fā)的一個(gè)Servlet容器,提供了作為web服務(wù)器的一些特殊功能甫男,如Tomcat管理和控制平臺且改、安全域管理和Tomcat閥。
Servlet(Server Applet)板驳,全稱Java Servlet又跛,是用Java編寫的服務(wù)器端程序。其功能在于交互地瀏覽和修改數(shù)據(jù)若治,生成動態(tài)web內(nèi)容慨蓝。
Tomcat更多用來做一個(gè)應(yīng)用容器感混,管理整個(gè)Servlet的生命周期,主要用來跑Java web App礼烈。因?yàn)镴ava后臺程序無法運(yùn)行在Apache和Nginx上弧满,他兩不是Servlet容器。
與Apache HTTP Server相比此熬,Tomcat能夠動態(tài)的生成資源并返回到客戶端庭呜。Apache 和 Nginx都能夠?qū)⒛骋粋€(gè)文本文件的內(nèi)容通過HTTP協(xié)議返回到客戶端,但這個(gè)文本文件的內(nèi)容是固定的犀忱。也就是說募谎,無論何時(shí)、任何人訪問它得到的內(nèi)容都是完全相同的峡碉,這樣的資源我們稱為靜態(tài)資源近哟。動態(tài)資源與之相反驮审,在不同的時(shí)間鲫寄、不同的客戶端訪問得到的內(nèi)容是不相同的。
Apache 和 Nginx 本身不支持生成動態(tài)頁面疯淫,但它們可以通過其他模塊來支持(如shell地来、Python、PHP程序來生成動態(tài)內(nèi)容)熙掺。
雖然Tomcat也可以認(rèn)為是HTTP服務(wù)器未斑,但通常它仍然會和Nginx配合在一起使用:
動靜態(tài)資源分離,運(yùn)用Nginx的反向代理功能分發(fā)請求币绩,所有動態(tài)資源的請求交個(gè)Tomcat蜡秽,而靜態(tài)資源的請求則直接由Nginx返回到瀏覽器,這樣能大大減輕Tomcat的壓力缆镣;
負(fù)載均衡芽突,當(dāng)也無壓力增大時(shí),可能一個(gè)Tomcat的實(shí)例不足以處理董瞻,那么這時(shí)可以啟動多個(gè)Tomcat實(shí)例進(jìn)行水平擴(kuò)展寞蚌,而Nginx的負(fù)載均衡功能可以把請求通過算法分發(fā)到各個(gè)不同的實(shí)例進(jìn)行處理;
Tomcat集群方案
Apache + Tomcat钠糊;
Nginx + Tomcat挟秤;
Lvs + Nginx + Tomcat;
# lvs負(fù)責(zé)集群調(diào)度抄伍,Nginx負(fù)責(zé)靜態(tài)文件處理艘刚,Tomcat負(fù)責(zé)動態(tài)文件處理;
Session復(fù)制
在訪問系統(tǒng)會話的過程中截珍,用戶登錄系統(tǒng)后攀甚,不管訪問系統(tǒng)的任何資源地址都不需要重復(fù)登錄啄糙,這里面的 Servlet容易保存了該用戶的會話(session)。如果兩個(gè)Tomcat(A云稚、B)提供集群服務(wù)時(shí)隧饼,用戶在 A上登錄,接下來的請求Web服務(wù)器根據(jù)策略分發(fā)到 B静陈,因?yàn)锽沒有保存用戶的會話(session)信息燕雁,不知道其登錄,會跳轉(zhuǎn)到登錄界面鲸拥。這時(shí)候我們需要讓 B也保存有?A的會話拐格,我們使用Tomcat的session復(fù)制實(shí)現(xiàn)或者通過其他手段讓session共享。
如果不采用 粘性session刑赶,那么我們可以采用Tomcat的session復(fù)制使所有節(jié)點(diǎn)Tomcat的會話相同捏浊,Tomcat使用組播技術(shù),只要集群中一個(gè)Tomcat節(jié)點(diǎn)的session發(fā)生改變撞叨,會廣播通知所有的Tomcat節(jié)點(diǎn)發(fā)生改變金踪。
高可用(HA)和session共享
使用 Lvs + Keepalived 實(shí)現(xiàn)集群高可用,達(dá)到更健壯的LB
我們可以做前端使用 Lvs 來做負(fù)載均衡牵敷,根據(jù)Lvs的8種調(diào)度算法胡岔,分發(fā)請求到對應(yīng)的Web服務(wù)器集群上。Lvs做雙機(jī)熱備枷餐,通過Keepalived模塊能夠達(dá)到故障自動轉(zhuǎn)移到備份服務(wù)器靶瘸,不間斷提供服務(wù)。
Web端使用的負(fù)載均衡:
HAProxy + Keepalived + Nginx毛肋;
數(shù)據(jù)庫集群(如MySQL):
Lvs + Keepalived + MySQL怨咪;
因?yàn)镠AProxy和Nginx一樣是工作在網(wǎng)絡(luò)7層之上,并且HAProxy彌補(bǔ)了Nginx的一些缺點(diǎn)(如session的保持润匙,cookie的引導(dǎo))诗眨,且它本身是個(gè)負(fù)責(zé)均衡軟件,處理負(fù)載均衡上面必然優(yōu)于Nginx趁桃。
Lvs比較笨重辽话,對于比較龐大的網(wǎng)絡(luò)應(yīng)用,實(shí)施比較復(fù)雜卫病,雖然它運(yùn)行在網(wǎng)絡(luò)4層之上油啤,僅做分發(fā)沒有流量產(chǎn)生,但是它不能做正則處理也不能做動靜分離蟀苛,所以一般用 Lvs + Keepalived或heatbeat做數(shù)據(jù)庫層的負(fù)載均衡益咬。
使用 terracotta 或 memcached 使session共享
terracotta 是 jvm 級別的 session共享
它基本原理是對于集群間共享的數(shù)據(jù),當(dāng)在一個(gè)節(jié)點(diǎn)發(fā)生變化的時(shí)候帜平,Terracotta只把變化的部分發(fā)送給Terracotta服務(wù)器幽告,然后服務(wù)器把它轉(zhuǎn)發(fā)給真正需要這個(gè)數(shù)據(jù)的節(jié)點(diǎn)梅鹦,并且共享的數(shù)據(jù)對象不需要序列化。
通過 memcached 實(shí)現(xiàn)內(nèi)存級 session共享
通過 memcached-session-manager(msm)插件冗锁,通過Tomcat上一定的配置齐唆,即可實(shí)現(xiàn)把session儲存到memcached服務(wù)器上。在memcached內(nèi)存中共享的對象需要序列化冻河。
其他方案
通過cookie保存用戶信息(一般是登錄信息)箍邮,每一個(gè)請求到達(dá)Web應(yīng)用的時(shí)候,Web應(yīng)用從cookie中取出數(shù)據(jù)進(jìn)行處理(這里cookie肯定要加密)叨叙;
另一種是把用戶信息的關(guān)鍵屬性保存到數(shù)據(jù)庫锭弊,這樣就不需要session了。請求過來從數(shù)據(jù)庫查詢關(guān)鍵屬性數(shù)據(jù)擂错,做相應(yīng)處理味滞。缺點(diǎn)是加大了數(shù)據(jù)庫的負(fù)載,是數(shù)據(jù)庫成為集群的瓶頸钮呀。