1. 程式人生 > >初識keepalived(三)——keepalived與nginx代理實現高可用

初識keepalived(三)——keepalived與nginx代理實現高可用

keepalived nginx

背景介紹

nginx除了可以作為web服務器外,同時也是一個反向代理軟件,nginx不能完全取代apache,所以很多場景下nginx作為apache的反向代理服務器。nginx運行在用戶空間,代替用戶向服務器發起請求,請求返回時再經由nginx服務器返回給用戶。不同於LVS的NAT模型,web服務器的網關不用必須指向nginx服務器,只要2者之間可以通信就可以,由於nginx作為代理服務器,所以支持端口轉換。

網絡拓撲

實驗拓撲結構如下:

實驗系統采用CentOS6.8,nginx采用1.12.1,所有設備連接在同一個虛擬交換機上,172.16.20.0/24網段模擬公網地址,172.16.10.0/24網段模擬內網地址。nginx服務器除配置內網地址外再安裝keepalived服務,並創建2個vrrp實例,為vrrp實例配置公網地址實現keepalived雙主模式高可用,同時對nginx服務進行健康檢測,實現nginx反向代理高可用。用戶通過修改host文件模擬域名綁定多個IP地址接收用戶訪問。

技術分享圖片技術分享圖片

操作步驟

1.為web1和web2服務器安裝httpd服務,默認端口改為8080,分別將主頁面修改為RS1 Server和RS2 Server(略)

2.修改客戶端host文件,設置www.abc.com的地址為172.16.20.100和172.16.20.200(略)

3.安裝nginx軟件,在配置文件中設置上遊服務器地址和端口,將通過80端口接收到的請求全部轉發至上遊服務器

技術分享圖片技術分享圖片

4.以nginx1服務器為例,在其上安裝keepalived軟件,創建2個vrrp實例並設置公網IP地址,實例1為主,實例2為備用。nginx2服務器上設置剛好相反,這樣2個keepalived服務在實現雙主模式的同時互為冗余,此時任何一個服務器keepalived服務掉線,另一個服務器都會添加該服務器的公網IP地址。此時雖然keepalived服務實現了多個公網IP地址的高可用但又會引入一個新的問題:如果一臺nginx服務器上的keepalived服務正常,nginx服務沒有啟動或者意外中止,這臺nginx服務器依然會保留公網IP地址,而通過此公網IP進來的用戶則由於nginx服務的掉線無法正常訪問到後端的apche服務器。針對此問題引入了紅框中的nginx服務健康檢測腳本,並在實例中進行調用

技術分享圖片技術分享圖片技術分享圖片技術分享圖片

5.當一個進程啟動時,會在指定位置生成一個pid文件,該文件會隨著進程的終止而消失。檢測腳本就是利用該特性,當pid文件不存在時vrrp實例的權重-20,這樣當一個服務器的nginx服務停止或未啟動時,另一個服務器都會添加該服務器的公網IP地址,從而避開nginx掉線的服務器

技術分享圖片技術分享圖片

結果驗證

經測試,此時任何一臺代理服務器上的keepalived服務或者nginx服務掉線後,另一臺服務器都會接管該服務器的公網IP地址,從而實現keepalived和nginx的高可用。

補充說明

此方案中還有一個疑問:web服務器是否實現冗余,盡管nginx服務實現了高可用,如果web服務器宕機,nginx的upstream中是否會檢測到掉線的web服務器並在調度用戶請求時避開掉線的web服務器。經測試可以避開掉線的服務器,但無法通過

upstream本身顯示上遊服務器健康狀態


初識keepalived(三)——keepalived與nginx代理實現高可用