linux下實現keepalived+nginx高可用


nginx負載均衡高可用

1.1 什么是負載均衡高可用

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

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

 

 

 

1.2 keepalived+nginx實現主備

1.2.1 什么是keepalived

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

  Keepalived的作用是檢測web服務器的狀態,如果有一台web服務器死機,或工作出現故障,Keepalived將檢測到,並將有故障的web服務器從系統中剔除,當web服務器工作正常后Keepalived自動將web服務器加入到服務器群中,這些工作全部自動完成,不需要人工干涉,需要人工做的只是修復故障的web服務器。

 

1.2.2 keepalived工作原理

keepalived是以VRRP協議為實現基礎的,VRRP全稱Virtual Router Redundancy Protocol,即虛擬路由冗余協議。

虛擬路由冗余協議,可以認為是實現路由器高可用的協議,即將N台提供相同功能的路由器組成一個路由器組,這個組里面有一個master和多個backupmaster上面有一個對外提供服務的vipVIP = Virtual IP Address,虛擬IP地址,該路由器所在局域網內其他機器的默認路由為該vip),master會發組播,當backup收不到VRRP包時就認為master宕掉了,這時就需要根據VRRP的優先級來選舉一個backupmaster。這樣的話就可以保證路由器的高可用了。

keepalived主要有三個模塊,分別是corecheckVRRPcore模塊為keepalived的核心,負責主進程的啟動、維護以及全局配置文件的加載和解析。check負責健康檢查,包括常見的各種檢查方式。VRRP模塊是來實現VRRP協議的。

 

詳細參考:Keepalived權威指南中文.pdf

 

1.2.3 keepalived+nginx實現主備過程

 

1.2.3.1 初始狀態

 

 

 

nginx負載均衡高可用

1.1 什么是負載均衡高可用

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

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

1.2 keepalived+nginx實現主備

1.2.1 什么是keepalived

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

  Keepalived的作用是檢測web服務器的狀態,如果有一台web服務器死機,或工作出現故障,Keepalived將檢測到,並將有故障的web服務器從系統中剔除,當web服務器工作正常后Keepalived自動將web服務器加入到服務器群中,這些工作全部自動完成,不需要人工干涉,需要人工做的只是修復故障的web服務器。

 

1.2.2 keepalived工作原理

keepalived是以VRRP協議為實現基礎的,VRRP全稱Virtual Router Redundancy Protocol,即虛擬路由冗余協議。

虛擬路由冗余協議,可以認為是實現路由器高可用的協議,即將N台提供相同功能的路由器組成一個路由器組,這個組里面有一個master和多個backupmaster上面有一個對外提供服務的vipVIP = Virtual IP Address,虛擬IP地址,該路由器所在局域網內其他機器的默認路由為該vip),master會發組播,當backup收不到VRRP包時就認為master宕掉了,這時就需要根據VRRP的優先級來選舉一個backupmaster。這樣的話就可以保證路由器的高可用了。

keepalived主要有三個模塊,分別是corecheckVRRPcore模塊為keepalived的核心,負責主進程的啟動、維護以及全局配置文件的加載和解析。check負責健康檢查,包括常見的各種檢查方式。VRRP模塊是來實現VRRP協議的。

 

詳細參考:Keepalived權威指南中文.pdf

 

1.2.3 keepalived+nginx實現主備過程

 

1.2.3.1 初始狀態

 

 

 

 

 

1.2.3.2 主機宕機

 

1.2.3.3 主機恢復

1.2.4 高可用環境

兩台nginx,一主一備:192.168.229.133192.168.229.134

兩台tomcat服務器:192.168.229.135:8080192.168.229.135:8081

 主機133的nginx配置文件指向135的8080端口tomcat服務,備機指向135的8081端口tomcat服務

nginx都是監聽的8080端口

 我們要實現的是當133的nginx掛了之后,從機nginx能提供服務

1.2.5 安裝keepalived

 

分別在主備nginx上安裝keepalived,參考“安裝手冊”進行安裝:

 

 

1.2.6 配置keepalived

1.2.6.1 nginx

修改主nginx/etc/keepalived/keepalived.conf文件

 

! Configuration File for keepalived

 

#全局配置

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         #設置實例綁定的網卡,此處要注意,如果使用的是centos7,要把eth0改為ens32

    virtual_router_id 51   #同一實例下virtual_router_id必須相同

    priority 100           #MASTER權重要高於BACKUP 比如BACKUP99  

    advert_int 1           #MASTERBACKUP負載均衡器之間同步檢查的時間間隔,單位是秒

    authentication {       #設置認證

        auth_type PASS     #主從服務器驗證方式

        auth_pass 8888

    }

    virtual_ipaddress {    #設置vip

        192.168.229.100       #可以多個虛擬IP,換行即可

    }

}

 

 

1.2.6.2 nginx

修改備nginx/etc/keepalived/keepalived.conf文件

配置備nginx時需要注意:需要修改stateBACKUP , priorityMASTER低,virtual_router_idmaster的值一致

 

! Configuration File for keepalived

 

#全局配置

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         #設置實例綁定的網卡,此處要注意,如果使用的是centos7,要把eth0改為ens32

    virtual_router_id 51   #同一實例下virtual_router_id必須相同

    priority 99            #MASTER權重要高於BACKUP 比如BACKUP99  

    advert_int 1           #MASTERBACKUP負載均衡器之間同步檢查的時間間隔,單位是秒

    authentication {       #設置認證

        auth_type PASS     #主從服務器驗證方式

        auth_pass 8888

    }

    virtual_ipaddress {    #設置vip

        192.168.229.100       #可以多個虛擬IP,換行即可

    }

}

 

1.2.7 測試

主備nginx都啟動keepalivednginx

service keepalived start

./nginx

 

1.2.7.1 初始狀態

如果使用的是centos7,使用ip addr查看綁定的vip

 

查看主nginxeth0設置:

vip綁定在主nginxeth0上。

 

查看備nginxeth0設置:

vip沒有綁定在備nginxeth0上。

 

 

訪問http://192.168.229.100:6060/,可以訪問。

 

1.2.7.2 主機宕機

將主nginxkeepalived停止或將主nginx關機(相當於模擬宕機),查看主nginxeth0

eth0沒有綁定vip

 

注意這里模擬的是停止 keepalived進程沒有模擬宕機,所以還要將nginx進程也停止表示主nginx服務無法提供。

 

查看備nginxeth0

vip已經漂移到備nginx

 

 

訪問http://192.168.229.100:6060/,可以訪問。

 

1.2.7.3 主機恢復

將主nginxkeepalivednginx都啟動。

查看主nginxeth0

 

查看備nginxeth0

vip漂移到主nginx

 

 

查看備nginxeth0

eth0沒有綁定vip

訪問:http://192.168.229.100:6060/,正常訪問。

注意:主nginx恢復時一定要將nginx也啟動(通常nginx啟動要加在開機啟動中),否則即使vip漂移到主nginx也無法訪問。

 

1.2.8 解決nginx進程和keepalived不同時存在問題

1.2.8.1 問題描述

keepalived是通過檢測keepalived進程是否存在判斷服務器是否宕機,如果keepalived進程在但是nginx進程不在了那么keepalived是不會做主備切換,所以我們需要寫個腳本來監控nginx進程是否存在,如果nginx不存在就將keepalived進程殺掉

1.2.8.2 nginx進程檢測腳本

在主nginx上需要編寫nginx進程檢測腳本(check_nginx.sh),判斷nginx進程是否存在,如果nginx不存在就將keepalived進程殺掉,check_nginx.sh內容如下:

 此腳本一定要添加執行權限:chmod +x /etc/keepalived/nginx_check.sh

#!/bin/bash

# 如果進程中沒有nginx則將keepalived進程kill

A=`ps -C nginx --no-header |wc -l`      ## 查看是否有 nginx進程 把值賦>給變量A

if [ $A -eq 0 ];then                    ## 如果沒有進程值得為 零

       service keepalived stop          ## 則結束 keepalived 進程

fi

 

 

將check_nginx.sh拷貝至/etc/keepalived下,

腳本測試:

nginx停止,將keepalived啟動,執行腳本:sh /etc/keepalived/check_nginx.sh

從執行可以看出自動將keepalived進程kill掉了。

 

1.2.8.3 修改keepalived.conf

修改主nginx的keepalived.conf,添加腳本定義檢測:

注意下邊紅色標識地方:

 

#全局配置

global_defs {

   notification_email {  #指定keepalived在發生切換時需要發送email到的對象,一行一個

     XXX@XXX.com

   }

   notification_email_from miaoruntu@itcast.cn  #指定發件人

   #smtp_server XXX.smtp.com                             #指定smtp服務器地址

   #smtp_connect_timeout 30                               #指定smtp連接超時時間

   router_id LVS_DEVEL                                    #運行keepalived機器的一個標識

}

vrrp_script check_nginx {

    script "/etc/keepalived/check_nginx.sh"         ##監控腳本

    interval 2                                      ##時間間隔,2

    weight 2                                        ##權重

}

vrrp_instance VI_1 {

    state MASTER           #標示狀態為MASTER 備份機為BACKUP

    interface eth0         #設置實例綁定的網卡

    virtual_router_id 51   #同一實例下virtual_router_id必須相同

    priority 100           #MASTER權重要高於BACKUP 比如BACKUP99

    advert_int 1           #MASTERBACKUP負載均衡器之間同步檢查的時間間隔,單位是秒

    authentication {       #設置認證

        auth_type PASS     #主從服務器驗證方式

        auth_pass 8888

    }

   track_script {

        check_nginx        #監控腳本

   }

    virtual_ipaddress {    #設置vip

        192.168.229.100       #可以多個虛擬IP,換行即可

    }

 

}

 

修改后重啟keepalived

 

1.2.8.4 測試

回到負載均衡高可用的初始狀態,保證主、備上的keepalivednginx全部啟動。

 

停止主nginx服務

 

查看133nginx主服務發現vip地址已經沒有了,134nginx主服務有vip

 

 

 


免責聲明!

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



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