Nginx總結(十)實現Nginx負載均衡高可用


 之前講了Nginx 如何實現負載均衡,以及如何實現動靜分離。但是還確少Nginx 高可用的部分。因為Nginx 處於整個系統非常重要的位置,Nginx的高可用影響到整個系統的穩定性。如果nginx服務器宕機后端web服務將無法提供服務,影響嚴重。所以,接下來就來介紹Nginx + keepalived 實現高可用的方案。Nginx 其他系列文章:https://www.cnblogs.com/zhangweizhong/category/1529997.html

 

一、什么是負載均衡高可用

nginx作為負載均衡器,所有請求都到了nginx,可見nginx處於非常重點的位置,如果nginx服務器宕機后端web服務將無法提供服務,影響嚴重。

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

 

二、Nginx高可用方案

目前,比較流行的實現Nginx高可用方案就是:keepalived+nginx實現主備方案。

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 轉發到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到的對象,一行一個
     XXX@XXX.com
   }
   notification_email_from XXX@XXX.com  #指定發件人
   #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到的對象,一行一個
    XXX@XXX.com
   }
   notification_email_from XXX@XXX.com                  #指定發件人
   #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,換行即可
    }
}

 

3、測試

1、主備nginx都啟動keepalived及nginx。

service keepalived start

./nginx

 

2、啟動之后,主Nginx正常工作,分別查看主nginx和 備nginx的eth0設置,vip(192.168.101.100)綁定在主nginx的eth0上。

 

訪問http://192.168.101.100,可以訪問。

 

3、將主nginx的keepalived停止或將主nginx關機(相當於模擬宕機),再次查看主nginx和 備nginx的eth0設置,vip(192.168.101.100)已經漂移到備nginx 上。

 

 

 

再次訪問http://192.168.101.100,發現系統依然可以訪問。

 

最后

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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM