nginx keepalived 配置

前言:

對於大型web項目來說,必不可少的就是高可用。

那隨着公司業務的發展,雖然用nginx做負載均衡仍可以支撐日均百萬PV的訪問,且運行兩年之久未出現單點故障,但仍要考慮避免單點故障導致的業務中斷。


keepalived 簡介:

keepalived 項目主要的目標是爲linux系統和linux基礎設施提供負責均衡和高可用。

負載均衡架構依賴於IPVS內核模塊提供四層負載均衡,keepalived實現了動態檢查和基於負載池的管理服務。另一方面,高可用性是通過VRRP協議實現。簡單的框架可以單獨或一起提供彈性基礎設施。


keepalived配置文件:

keepalived.conf文件由三個配置部分組成:

  • Globals configurations   全局配置

  • VRRP configuration    VRRP配置

  • LVS configuration    LVS配置


約定:

此文不做nginx安裝介紹,有關nginx安裝可參考前面的文章

系統:採用centos 6.8 最小化

源文件目錄:/usr/local/src

master_ip:192.168.1.10

backup_ip:192.168.1.11

vip:192.168.1.20

keepalived官網http://www.keepalived.org/

keepalived master列出的配置項相對要多,可根據情況選擇使用。 

分別在主備nginx安裝配置keepalived


準備:

下載keepalived源碼包:

wget http://www.keepalived.org/software/keepalived-1.3.2.tar.gz

安裝開發工具:

yum install gcc-c++ openssl-devel


iptables 配置:

關閉iptables,或允許主備互通

iptables -I INPUT -i eth1 -s 192.168.1.11 -j ACCEPT
iptables -I INPUT -i eth1 -s 192.168.1.10 -j ACCEPT


安裝keepalived:

解壓:

tar zxf keepalived-1.3.2.tar.gz

配置編譯安裝:

cd keepalived-1.3.2
./configure
make
make install

創建配置文件和服務:

cp -r keepalived/etc/keepalived/ /etc/
cp keepalived/etc/init.d/keepalived.rh.init /etc/init.d/keepalived
cp keepalived/etc/sysconfig/keepalived /etc/sysconfig/


配置keepalived:

master keepalived.conf

! Configuration File for keepalived

global_defs {
   notification_email {
     [email protected]    #接收通知的郵件地址
   }
   notification_email_from [email protected]    #發送郵件通知的地址
   smtp_server 192.168.200.1    #發送郵件的SMTP服務地址,可是ip或域名.可選端口號 (默認25)
   smtp_connect_timeout 30    #smtp連接超時時間秒
   router_id LVS_DEVEL    #主機標識,用於郵件通知
   vrrp_skip_check_adv_addr    
   #vrrp_strict    #嚴格執行VRRP協議規範,此模式不支持節點單播
   vrrp_garp_interval 0
   vrrp_gna_interval 0
   script_user keepalived_script       # 指定運行腳本的用戶名和組。默認使用用戶的默認組。
                                           # 如未指定,默認爲keepalived_script 用戶,如無此用戶,則使用root
   enable_script_security                 #如過路徑爲非root可寫,不要配置腳本爲root用戶執行。
}

vrrp_script chk_nginx_service {    #VRRP 腳本聲明
    script "/usr/local/keepalived/nginx-ha-check"    #週期性執行的腳本
    interval 3    #運行腳本的間隔時間,秒
    weight -50    #權重,調整優先級(-255-255)。priority值減去此值要小於備服務的priority值
                            #否則備服務選舉爲主服務時會失敗。
    fall 3              # 檢測幾次失敗才爲失敗,整數
    rise 2              # 檢測幾次狀態爲正常的,才確認正常,整數
    user keepalived_script    # 執行腳本的用戶或組
}

vrrp_instance VI_1 {    #VRRP 實例聲明
    state MASTER    #實例默認狀態,MASTER|BACKUP
    interface eth0    #綁定的接口
    #mcast_src_ip 192.168.1.10        # VRRP 報文使用的源ip地址
    unicast_src_ip 192.168.1.10        # VRRP 報文使用的源ip地址 (alias to mcast_src_ip)
    unicast_peer {            # 不使用VRRP多播,既用單播
      192.168.1.11            #  備節點ip,可以是多個
    virtual_router_id 51    #VRRP 路由標識(-1-255),主備相同
    priority 100    #優先數,-1-255,主服務要大於備服務
    advert_int 1    #VRRP 廣告間隔
    authentication {    #主備認證
        auth_type PASS    #認證方式
        auth_pass 1111    #主備需統一
    }
    virtual_ipaddress {    #VRRP 地址,可有多個
        192.168.1.20
    }
    track_script {    #腳本監控狀態
        chk_nginx_service    #可加權重,但會覆蓋聲明的腳本權重值。chk_nginx_service weight -20
    }
}


backup keepalived.conf

! Configuration File for keepalived

global_defs {
   notification_email {
     [email protected]
   }
   notification_email_from [email protected]
   smtp_server 192.168.200.1
   smtp_connect_timeout 30
   router_id LVS_DEVEL
   vrrp_skip_check_adv_addr
   vrrp_strict
   vrrp_garp_interval 0
   vrrp_gna_interval 0
}

vrrp_script chk_nginx_service {
    script "/usr/local/keepalived/nginx-ha-check"
    interval 3
    weight -10
}

vrrp_instance VI_1 {
    state BACKUP
    interface eth0
    virtual_router_id 51
    priority 90
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.1.20
    }
    track_script {
        chk_nginx_service
    }
}


nginx-ha-check 腳本

chmod +x nginx-ha-check
#!/bin/sh

PATH=/bin:/sbin:/usr/bin:/usr/sbin

STATEFILE=/var/run/nginx-ha-keepalived.state

if [ -s "$STATEFILE" ]; then
    . "$STATEFILE"
    case "$STATE" in
        "BACKUP"|"MASTER"|"FAULT")
                service nginx status
                exit $?
                ;;
        *|"")
                logger -t nginx-ha-keepalived "Unknown state: '$STATE'"
                exit 1
                ;;
    esac
fi

service nginx status
exit $?


啓動服務:

service keepalived start


驗證:

主備服務安裝配置完成後,可通過瀏覽器方位192.168.1.20地址,同時停掉主nginx服務,再次訪問192.168.1.20查看頁面

nginx主備服務需要能夠確認唯一標識的頁面,如在index.html中分別表明主備服務。


同時可觀察/var/log/messages 日誌信息





發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章