大型网站系统架构实践(五)深入探讨web应用高可用方案
??????? 從上篇文章到這篇文章,中間用了一段時(shí)間準(zhǔn)備,主要是想把東西講透,同時(shí)希望大家給與一些批評(píng)和建議,這樣我才能有所進(jìn)步,也希望喜歡我文章的朋友,給個(gè)贊,這樣我才能更有激情,呵呵。
由于本篇要寫(xiě)的內(nèi)容有點(diǎn)多,我就分為幾篇博客進(jìn)行了詳細(xì)描述。
Haproxy提高web應(yīng)用的高可用
?????? 上一篇文章講到了haproxy+tomcat的方案,文章地址:大型網(wǎng)站系統(tǒng)架構(gòu)的演進(jìn)(四)http層負(fù)載均衡之haproxy實(shí)踐篇(一)
大家可以先溫習(xí)一下,
?????? 文中提到了高可用,該集群方案也可以提高應(yīng)用系統(tǒng)的高可用,如果tomcat應(yīng)用出現(xiàn)故障,或者tomcat應(yīng)用服務(wù)器出現(xiàn)故障,haproxy會(huì)檢測(cè)到(這里指的是定期心跳檢查),并將應(yīng)用從可用列表中刪除,打開(kāi)監(jiān)控頁(yè)面http://192.168.1.227/haproxy-stats
可以看到有2個(gè)web應(yīng)用運(yùn)行,如果將webA停掉,可以看到webA顯示down
這樣客戶端請(qǐng)求就不會(huì)分發(fā)給webA,下面模擬一下webA宕機(jī)的情況
這里對(duì)sessionId增加了一個(gè)后綴做標(biāo)記
webA:jvm3
webB:jvm2
1. webA正常的情況,客戶請(qǐng)求被分發(fā)到webA
此時(shí)產(chǎn)生的sessionId為jvm3
2. 停掉webA,刷新瀏覽器
可以看到請(qǐng)求被轉(zhuǎn)發(fā)到webB
也就是說(shuō)web應(yīng)用出現(xiàn)故障,haproxy會(huì)做切換,因此可以保證web應(yīng)用的高可用。
Haproxy本身的高可用
????? 如果haproxy本身出現(xiàn)故障,那么網(wǎng)站將不可用,所以我們接下來(lái)要做的事情就是解決haproxy單點(diǎn)故障的問(wèn)題。
我們可以運(yùn)用虛擬ip技術(shù),將haproxy部署在2臺(tái)服務(wù)器上,一臺(tái)做為master,正常運(yùn)營(yíng),一臺(tái)為backup,
當(dāng)master出現(xiàn)問(wèn)題的時(shí)候,接管master。
????? 首先有一個(gè)虛擬ip暴露給客戶端,虛擬ip對(duì)應(yīng)的mac地址為master服務(wù)器,
用戶向虛擬ip發(fā)送一個(gè)請(qǐng)求,該請(qǐng)求會(huì)被分發(fā)到master服務(wù)器上,當(dāng)master出現(xiàn)故障時(shí),被backup檢測(cè)到,則backup成為master,
且發(fā)送消息將arp緩存虛擬ip對(duì)應(yīng)的mac地址backup的mac地址,這樣發(fā)送到虛擬ip的報(bào)文會(huì)被轉(zhuǎn)發(fā)到backup 。
架構(gòu)圖:
該方案解決了haproxy單點(diǎn)故障的問(wèn)題,具體用keepalived實(shí)現(xiàn),詳細(xì)請(qǐng)參考文章:
Keepalived 實(shí)現(xiàn)雙機(jī)熱備
Keepalived + haproxy雙機(jī)高可用方案
如果想實(shí)踐的朋友,請(qǐng)按照上面2篇文章安裝和配置haproxy和keepalived
系統(tǒng)分布如下:
ha主機(jī) 192.168.1.227:80
ha備機(jī) 192.168.1.246
keepalived 主機(jī) 192.168.1.227
keepalived備機(jī) 192.168.1.246
web1 http://192.168.1.226:8081/login
web2 http://192.168.1.246:8888/login
虛擬ip 192.168.1.99
安裝好haproxy和keepalived后,啟動(dòng)haproxy和keepalived
Haproxy訪問(wèn)地址:
http://192.168.1.99/haproxy-stats
注意pid為9644,這是master上的haproxy
應(yīng)用訪問(wèn)地址
http://192.168.1.99/login/
注意sessionId的后綴為jvm3
查看虛擬ip1.99對(duì)應(yīng)的mac地址
接下來(lái),我們停掉master上的haproxy服務(wù)
kill -9 9644
查看haproxy http://192.168.1.99/haproxy-stats
發(fā)現(xiàn)haproxy的pid變成backup機(jī)器上的了
刷新web的訪問(wèn)頁(yè)面http://192.168.1.99/login/
發(fā)現(xiàn)sessionId沒(méi)有變化
查看虛擬ip1.99對(duì)應(yīng)的mac地址
mac地址已經(jīng)變?yōu)閎ackup機(jī)器上的了
如果我們直接關(guān)閉主機(jī)服務(wù)器或者關(guān)閉主機(jī)的keepalived,發(fā)現(xiàn)測(cè)試結(jié)果也是一樣的
因此該方案實(shí)現(xiàn)了haproxy的高可用,解決了haproxy的單點(diǎn)故障問(wèn)題。
會(huì)話保持問(wèn)題
那么這里我還要提出一個(gè)疑問(wèn),為什么sessionId也沒(méi)有變化呢?
也就是說(shuō)切換到backup服務(wù)器的haproxy之后,
可以保持用戶的會(huì)話,那么它是怎么實(shí)現(xiàn)的呢?
這里就要回到上篇文章講的負(fù)載均衡時(shí)保持會(huì)話的策略
會(huì)話保持的流程
1.客戶端首次請(qǐng)求,經(jīng)過(guò)haproxy到web服務(wù)端時(shí),web服務(wù)端set-cookie并響應(yīng)到haproxy
2.haproxy在cookie后插入SRV=A,并響應(yīng)客戶端
3.客戶端第二次請(qǐng)求,經(jīng)過(guò)haproxy時(shí),haproxy將srv后綴去掉,然后請(qǐng)求服務(wù)端
這種保持會(huì)話的方法是無(wú)狀態(tài)的,也就說(shuō)主要haproxy配置的負(fù)載均衡策略相同,不管在哪臺(tái)機(jī)器上運(yùn)行
將得到同樣的結(jié)果
?
上篇文章 大型網(wǎng)站系統(tǒng)架構(gòu)的演進(jìn)(四)http層負(fù)載均衡之haproxy實(shí)踐篇(一)
目錄 大型網(wǎng)站系統(tǒng)架構(gòu)的演進(jìn)目錄
下篇 大型網(wǎng)站系統(tǒng)架構(gòu)實(shí)踐(六)深入探討web應(yīng)用集群Session保持
轉(zhuǎn)載于:https://www.cnblogs.com/tangyanbo/p/4431136.html
總結(jié)
以上是生活随笔為你收集整理的大型网站系统架构实践(五)深入探讨web应用高可用方案的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: eclipse打开出错 Error: o
- 下一篇: 深入理解计算机系统结构——并发编程