天天看點

Nginx極簡入門(十)配置Nginx雙機熱備份,實作系統高可用解決方案!

之前講了Nginx 如何實作負載均衡,以及如何實作動靜分離。我們知道,Nginx服務在整個平台系統中, 處于非常重要的位置,Nginx的高可用影響到整個系統的穩定性。如果Nginx伺服器當機,整個後端web服務将無法提供服務,影響非常嚴重。

是以,接下來就來介紹Nginx + keepalived 實作高可用的方案。

一、什麼是高可用

高可用HA(High Availability)是分布式系統架構設計中必須考慮的因素之一,它通常是指,通過系統架構設計,減少系統不能提供服務的時間。如果一個系統能夠一直提供服務,那麼這個可用性則是百分之百,但是天有不測風雲。是以我們隻能盡可能的去減少服務的故障。Nginx作為系統的核心基礎服務,它的可用性至關重要。

為了屏蔽Nginx伺服器的當機,需要建立一個備份機。主伺服器和備份機上都運作高可用(High Availability)監控程式,通過傳送諸如“I am alive”這樣的資訊來監控對方的運作狀況。當備份機不能在一定的時間内收到這樣的資訊時,它就接管主伺服器的服務IP并繼續提供負載均衡服務;當備份管理器又從主管理器收到“I am alive”這樣的資訊時,它就釋放服務IP位址,這樣的主伺服器就開始再次提供負載均衡服務。

二、Nginx高可用方案

目前,比較流行的實作Nginx高可用方案就是:keepalived+nginx實作主備方案。這是國内企業中最為普遍的一種高可用方案。

所謂,雙機熱備其實就是指一台伺服器在提供服務時,另一台為某服務的備用狀态;當主伺服器不可用時,另外備份伺服器會擷取到主伺服器的IP,自動頂替主伺服器的功能。

1、什麼是keepalived

keepalived是叢集管理中保證叢集高可用的一個服務軟體,用來防止單點故障。

Keepalived的作用是檢測web伺服器的狀态,如果有一台web伺服器當機,或工作出現故障,Keepalived将檢測到,并将有故障的web伺服器從系統中剔除,當web伺服器工作正常後Keepalived自動将web伺服器加入到伺服器群中,這些工作全部自動完成,不需要人工幹涉,需要人工做的隻是修複故障的web伺服器。

2、keepalived工作原理

keepalived是以VRRP協定為實作基礎的,VRRP全稱Virtual Router Redundancy Protocol,即虛拟路由備援協定。

虛拟路由備援協定,可以認為是實作路由器高可用的協定,即将N台提供相同功能的路由器組成一個路由器組,這個組裡面有一個master和多個backup,master上面有一個對外提供服務的vip(VIP = Virtual IP Address,虛拟IP位址,該路由器所在區域網路内其他機器的預設路由為該vip),master會發多點傳播,當backup收不到VRRP包時就認為master宕掉了,這時就需要根據VRRP的優先級來選舉一個backup當master。這樣的話就可以保證路由器的高可用了。

keepalived主要有三個子產品,分别是core、check和VRRP。core子產品為keepalived的核心,負責主程序的啟動、維護以及全局配置檔案的加載和解析。check負責健康檢查,包括常見的各種檢查方式。VRRP子產品是來實作VRRP協定的。

3、keepalived+nginx實作主備過程

下圖是keepalived + nginx 實作主備的過程。

Nginx極簡入門(十)配置Nginx雙機熱備份,實作系統高可用解決方案!

從上圖可以看到,主Nginx健康時,系統所有的請求通過主Nginx 轉發到Tomcat伺服器叢集。當主Nginx 當機後,會立馬切換到備Nginx ,由備Nginx 提供轉發服務。這樣就保證系統的正常運作。

三、環境準備

1、兩天Nginx伺服器和兩台web伺服器

兩台nginx,一主一備:192.168.101.3和192.168.101.4

兩台tomcat伺服器: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。

#全局配置
global_defs {
   notification_email {  #指定keepalived在發生切換時需要發送email到的對象,一行一個
     [email protected]
   }
   notification_email_from [email protected]  #指定發件人
   #smtp_server XXX.smtp.com                             #指定smtp伺服器位址
   #smtp_connect_timeout 30                               #指定smtp連接配接逾時時間
   router_id LVS_DEVEL                                    #運作keepalived機器的一個辨別
}
vrrp_instance VI_1 { 
    state MASTER           #标示狀态為MASTER 備份機為BACKUP
    interface eth0         #設定執行個體綁定的網卡
    virtual_router_id 51   #同一執行個體下virtual_router_id必須相同
    priority 100           #MASTER權重要高于BACKUP 比如BACKUP為99  
    advert_int 1           #MASTER與BACKUP負載均衡器之間同步檢查的時間間隔,機關是秒
    authentication {       #設定認證
        auth_type PASS     #主從伺服器驗證方式
        auth_pass 8888
    }
    virtual_ipaddress {    #設定vip
        192.168.101.100       #可以多個虛拟IP,換行即可
    }
}      

2、配置備nginx

修改備nginx下/etc/keepalived/keepalived.conf檔案,配置備Nginx

配置備nginx時需要注意:需要修改state為BACKUP , priority比MASTER低,virtual_router_id和master的值一緻

#全局配置
global_defs {
   notification_email {  #指定keepalived在發生切換時需要發送email到的對象,一行一個
    [email protected]
   }
   notification_email_from [email protected]                  #指定發件人
   #smtp_server XXX.smtp.com                                 #指定smtp伺服器位址
   #smtp_connect_timeout 30                               #指定smtp連接配接逾時時間
   router_id LVS_DEVEL                                    #運作keepalived機器的一個辨別
}
vrrp_instance VI_1 { 
    state BACKUP           #标示狀态為MASTER 備份機為BACKUP
    interface eth0         #設定執行個體綁定的網卡
    virtual_router_id 51   #同一執行個體下virtual_router_id必須相同
    priority 99            #MASTER權重要高于BACKUP 比如BACKUP為99  
    advert_int 1           #MASTER與BACKUP負載均衡器之間同步檢查的時間間隔,機關是秒
    authentication {       #設定認證
        auth_type PASS     #主從伺服器驗證方式
        auth_pass 8888
    }
    virtual_ipaddress {    #設定vip
        192.168.101.100       #可以多個虛拟IP,換行即可
    }
}      

五、測試驗證

配置完keepalived和nginx之後,接下來我們驗證Nginx的雙機備份設定是否成功。

1、啟動主備nginx,以及keepalived。

service keepalived start

./nginx      

2、啟動之後,主Nginx正常工作,分别檢視主nginx和 備nginx的eth0設定,如下圖所示:

Nginx極簡入門(十)配置Nginx雙機熱備份,實作系統高可用解決方案!

我們可以看到:vip(192.168.101.100)綁定在主nginx的eth0上。說明此時主Nginx 正常。通路

http://192.168.101.100

,Nginx可以正常通路。

3、将主nginx服務停止或将主nginx關機(相當于模拟當機),再次檢視主nginx和備nginx的eth0設定,如下圖所示:

Nginx極簡入門(十)配置Nginx雙機熱備份,實作系統高可用解決方案!

我們可以看到:vip(192.168.101.100)已經漂移到備nginx 伺服器上。再次通路

,發現雖然主Nginx單擊,但是系統依然可以通路。說明Nginx實作了雙機熱備份,達到了高可用的目的。

最後

以上,keepalived+nginx 系統高可用的解決方案介紹完了,看上去複雜,其實配置還是比較簡單的。

推薦閱讀:

Nginx極簡入門(九)Nginx實作動靜分離! Nginx極簡入門(八)Nginx性能監控及性能狀态參數詳解! Nginx極簡入門(七)Nginx的日志管理及配置 Nginx極簡入門(六)配置Nginx負載均衡,提高系統并發性能! Nginx極簡入門(五)配置Nginx反向代理 Nginx極簡入門(四)基于域名的虛拟主機配置 Nginx極簡入門(三)基于端口的虛拟主機配置 Nginx極簡入門(二)配置基于ip的虛拟主機 Nginx極簡入門(一)如何在Linux系統編譯安裝Nginx服務 Nginx極簡實戰—Nginx伺服器高性能優化配置,輕松實作10萬并發通路量

繼續閱讀