之前講了Nginx 如何實(shí)現(xiàn)負(fù)載均衡以及如何實(shí)現(xiàn)動(dòng)靜分離,實(shí)現(xiàn)系統(tǒng)的分布式部署,提高系統(tǒng)的并發(fā)性能。但是,有個(gè)問(wèn)題:如果Nginx 系統(tǒng)掛了,整個(gè)系統(tǒng)就都不可用了。Nginx 處于整個(gè)系統(tǒng)非常重要的位置,Nginx的高可用影響到整個(gè)系統(tǒng)的穩(wěn)定性。如果nginx服務(wù)器宕機(jī),后端web服務(wù)將無(wú)法提供服務(wù),影響嚴(yán)重。所以如何保證Nginx 的穩(wěn)定和高可用非常重要,接下來(lái)就來(lái)介紹Nginx + keepalived 實(shí)現(xiàn)系統(tǒng)負(fù)載均衡高可用的方案。
一、什么是負(fù)載均衡高可用
Nginx作為負(fù)載均衡器,所有請(qǐng)求必須經(jīng)過(guò)Nginx 服務(wù)器,可見(jiàn)Nginx處于非常重點(diǎn)的位置,如果Nginx服務(wù)器宕機(jī)后端web服務(wù)將無(wú)法提供服務(wù),影響嚴(yán)重。
為了避免因?yàn)樨?fù)載均衡服務(wù)器的宕機(jī)從而影響整個(gè)系統(tǒng)的問(wèn)題,需要建立一個(gè)備份機(jī)。主服務(wù)器和備份服務(wù)器上都運(yùn)行監(jiān)控程序,通過(guò)傳送心跳信息來(lái)監(jiān)控對(duì)方的運(yùn)行狀況。當(dāng)備份服務(wù)器在一定的時(shí)間內(nèi)沒(méi)有收到主服務(wù)器的心跳信息時(shí),它就自動(dòng)接管主服務(wù)器的服務(wù)IP,繼續(xù)提供負(fù)載均衡服務(wù);當(dāng)備份服務(wù)器又從主服務(wù)器收到心跳信息時(shí),它就釋放服務(wù)IP地址,這樣的主服務(wù)器就開(kāi)始再次提供負(fù)載均衡服務(wù)。
二、Nginx高可用方案
目前,比較流行的實(shí)現(xiàn)Nginx高可用方案就是:keepalived+nginx實(shí)現(xiàn)主備方案。
1、什么是keepalived
keepalived是集群管理中保證集群高可用的一個(gè)服務(wù)軟件,用來(lái)防止單點(diǎn)故障。
Keepalived的作用是檢測(cè)web服務(wù)器的狀態(tài),如果有一臺(tái)web服務(wù)器死機(jī),或工作出現(xiàn)故障,Keepalived將檢測(cè)到,并將有故障的web服務(wù)器從系統(tǒng)中剔除,當(dāng)web服務(wù)器工作正常后Keepalived自動(dòng)將web服務(wù)器加入到服務(wù)器群中,這些工作全部自動(dòng)完成,不需要人工干涉,需要人工做的只是修復(fù)故障的web服務(wù)器。
2、keepalived工作原理
keepalived是以VRRP協(xié)議為實(shí)現(xiàn)基礎(chǔ)的,VRRP全稱(chēng) Virtual Router Redundancy Protocol,即虛擬路由冗余協(xié)議。
虛擬路由冗余協(xié)議,可以認(rèn)為是實(shí)現(xiàn)路由器高可用的協(xié)議,即將N臺(tái)提供相同功能的路由器組成一個(gè)路由器組,這個(gè)組里面有一個(gè)master和多個(gè)backup,master上面有一個(gè)對(duì)外提供服務(wù)的vip(VIP = Virtual IP Address,虛擬IP地址,該路由器所在局域網(wǎng)內(nèi)其他機(jī)器的默認(rèn)路由為該vip),master會(huì)發(fā)組播,當(dāng)backup收不到VRRP包時(shí)就認(rèn)為master宕掉了,這時(shí)就需要根據(jù)VRRP的優(yōu)先級(jí)來(lái)選舉一個(gè)backup當(dāng)master。這樣的話(huà)就可以保證路由器的高可用了。
keepalived主要有三個(gè)模塊,分別是core、check和VRRP。core模塊為keepalived的核心,負(fù)責(zé)主進(jìn)程的啟動(dòng)、維護(hù)以及全局配置文件的加載和解析。check負(fù)責(zé)健康檢查,包括常見(jiàn)的各種檢查方式。VRRP模塊是來(lái)實(shí)現(xiàn)VRRP協(xié)議的。
3、keepalived+nginx實(shí)現(xiàn)主備過(guò)程
keepalived + nginx 實(shí)現(xiàn)主備的過(guò)程,如下圖所示:
從上圖可以看到,主Nginx健康時(shí),系統(tǒng)所有的請(qǐng)求通過(guò)主Nginx 轉(zhuǎn)發(fā)到Tomcat服務(wù)器集群。當(dāng)主Nginx 宕機(jī)后,會(huì)立馬切換到備N(xiāo)ginx ,由備N(xiāo)ginx 提供轉(zhuǎn)發(fā)服務(wù)。這樣就保證系統(tǒng)的正常運(yùn)行。
三、環(huán)境準(zhǔn)備
1、兩天Nginx服務(wù)器和兩臺(tái)web服務(wù)器
兩臺(tái)nginx,一主一備:192.168.101.3和192.168.101.4
兩臺(tái)tomcat服務(wù)器:192.168.101.5、192.168.101.6
2、安裝keepalived
分別在主備nginx上安裝keepalived,這里就講解keepalived的安裝了。
3、配置虛擬IP(vip:192.168.101.100)
四、配置Nginx高可用
1、配置主nginx
修改主nginx下/etc/keepalived/keepalived.conf文件,配置主Nginx。
2、配置備nginx
修改備nginx下/etc/keepalived/keepalived.conf文件,配置備N(xiāo)ginx
配置備nginx時(shí)需要注意:需要修改state為BACKUP , priority比MASTER低,virtual_router_id和master的值
3、測(cè)試
1、主備nginx都啟動(dòng)keepalived及nginx。
service keepalived start./nginx
2、啟動(dòng)之后,主Nginx正常工作,分別查看主nginx和 備nginx的eth0設(shè)置,vip(192.168.101.100)綁定在主nginx的eth0上。
打開(kāi)瀏覽器,訪(fǎng)問(wèn)http://192.168.101.100,可以訪(fǎng)問(wèn),主Nginx 服務(wù)器正常,系統(tǒng)可用。
3、將主nginx的keepalived停止或?qū)⒅鱪ginx關(guān)機(jī)(相當(dāng)于模擬宕機(jī)),再次查看主nginx和 備nginx的eth0設(shè)置,vip(192.168.101.100)已經(jīng)漂移到備nginx 上。
再次訪(fǎng)問(wèn)http://192.168.101.100,發(fā)現(xiàn)系統(tǒng)依然可以訪(fǎng)問(wèn),說(shuō)明主Nginx 宕機(jī)之后,自動(dòng)切換到備用Nginx。
最后
以上,keepalived+nginx 系統(tǒng)高可用的解決方案介紹完了,看上去復(fù)雜,其實(shí)配置還是比較簡(jiǎn)單的。
編輯:hfy
-
服務(wù)器
+關(guān)注
關(guān)注
12文章
8704瀏覽量
84576 -
路由器
+關(guān)注
關(guān)注
22文章
3643瀏覽量
112826 -
nginx
+關(guān)注
關(guān)注
0文章
139瀏覽量
12117 -
負(fù)載均衡器
+關(guān)注
關(guān)注
0文章
18瀏覽量
2568
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論