1. 程式人生 > >keepalived實現nginx高可用,一主一備

keepalived實現nginx高可用,一主一備

ddr cti 文件重命名 實現 usr time deb 安裝 fall

keepalived實現nginx高可用(HA)

技術分享圖片

安裝直接yum安裝就可以,版本可能比官網落後,但是夠用了,

yum -y install keepalived

編輯配置文件,默認路徑 /etc/keepalived/keepalived.conf,這裏將默認配置文件重命名,新建一個空的配置文件

mv /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf.bak
vim /etc/keepalived/keepalived.conf
global_defs {
    notification_email {
        [email protected]
    }
    notification_email_from [email protected]
    smtp_server smtp.example.com
    smtp_connection_timeout 
30 router_id nginx_master # 設置nginx master的id,在一個網絡應該是唯一的 } vrrp_script chk_http_port { script "/etc/keepalived/check_nginx_pid.sh" #最後手動執行下此腳本,以確保此腳本能夠正常執行 interval 2 #(檢測腳本執行的間隔,單位是秒) weight 2
   #fall 3
#連續監測失敗3次,才認為真的健康檢查失敗。並調整優先級
#rise 2 #連續監測成功2次,認為健康檢查成功,調整優先級

}
vrrp_instance VI_1 {
    state MASTER            # 指定keepalived的角色,MASTER為主,BACKUP為備
    interface eth0            # 當前進行vrrp通訊的網絡接口卡(當前centos的網卡)
    virtual_router_id 66        # 虛擬路由編號,主從要一直
    priority 100            # 優先級,數值越大,獲取處理請求的優先級越高
    advert_int 1            # 檢查間隔,默認為1s(vrrp組播周期秒數)
    authentication {
        auth_type PASS
        auth_pass 
1111 } track_script { chk_http_port #(調用檢測腳本) } virtual_ipaddress { 192.168.10.200 # 定義虛擬ip(VIP),可多設,每行一個 } }

上面是MASTER的配置文件,BACKUP的配置文件只需要修改"state MASTER"為"state BACKUP"和"priority 100"為"priority 99"

keepalived日誌默認輸出到/var/log/messages,可以tail -f 查看日誌debug

nginx檢測腳本check_nginx_pid.sh內容如下:

#!/bin/bash
A=`ps -C nginx --no-header |wc -l`        
if [ $A -eq 0 ];then                            
      /usr/sbin/nginx                #重啟nginx
      if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then    #nginx重啟失敗,則停掉keepalived服務,進行VIP轉移
              killall keepalived                    
      fi
fi

腳本執行完返回0表示成功,返回非0表示失敗,這裏如果nginx重啟失敗,直接是停掉keepalived服務。

vrrp_script中節點權重改變算法

vrrp_script 裏的script返回值為0時認為檢測成功,其它值都會當成檢測失敗;

  1. weight 為正時,腳本檢測成功時此weight會加到priority上,檢測失敗時不加;

    1. 主失敗:

      1. 主 priority < 從 priority + weight 時會切換。

    2. 主成功:

      1. 主 priority + weight > 從 priority + weight 時,主依然為主

  2. weight 為負時,腳本檢測成功時此weight不影響priority,檢測失敗時priority – abs(weight)

    1. 主失敗:

      1. 主 priority – abs(weight) < 從priority 時會切換主從

    2. 主成功:

      1. 主 priority > 從priority 主依然為主

參考 https://www.cnblogs.com/youzhibing/p/7327342.html

keepalived實現nginx高可用,一主一備