1. 程式人生 > >linux中keepalived實現nginx高可用配置

linux中keepalived實現nginx高可用配置

linux中keepalived實現nginx高可用配置

安裝keepalived

執行如下命令即可
tar -zxvf keepalived-2.0.8.tar.gz -C /usr/src

cd /usr/src/keepalived-2.0.8

sudo apt-get install autoconf

aclocal

autoconf

autoheader

automake --add-missing

sudo apt-get install libssl-dev

./configure --prefix=/usr/local/keepalived

make && make install

cd /usr/local/keepalived/sbin

./keepalived

ps -ef | grep keepalived

修改keepalived配置檔案

keepalived的作用,基本上是和多臺nginx伺服器通訊,當主伺服器宕機,將ip分法給備用伺服器

例如,寫類似如下程式碼
    在你的linux網絡卡中新增一個ip地址,這個ip地址可以ping通,也就是多個nginx伺服器,可以共用這一個ip,通過keepalived決定誰可以擁有這個ip
    ip addr add yourtestip dev ens33
    ip addr
    ping yourtestip

配置keepalived配置檔案
sudo vim /usr/local/keepalived/etc/keepalived/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_instance VI_1 { state MASTER # 設定當前nginx伺服器為主節點,備用nginx伺服器對應設定成BACKUP即可 interface eth0 # 繫結伺服器網絡卡 virtual_router_id 51 # 主備nginx伺服器此id必須一致 priority 100 # 設定優先順序,1-254之間,備用伺服器的結點優先順序設定低點 advert_int 1 # 資訊傳送間隔,主備都要一致 authentication { # 授權資訊,主備伺服器一致 auth_type PASS auth_pass 1111 } virtual_ipaddress { # 虛擬IP,主備伺服器必須一致,網段必須和nginx一致 192.168.200.16 } notify_master "/usr/local/keepalived/sbin/notify_sh master" # 主伺服器宕機,備用伺服器要成為主伺服器則呼叫此指令碼 notify_backup "/usr/local/keepalived/sbin/notify_sh backup" notify_fault "/usr/local/keepalived/sbin/notify_sh fault" } vrrp_script chk_health { script "[[`ps -ef | grep nginx | grep -v grep | wc -l`-ge 2]] && exit 0 || exit 1" # 判斷nginx程序是否大於等於2 interval 1 # 1秒鐘執行一次 weight -2 # nginx宕機,本機權重降低2 } track_script { chk_health # 檢查nginx } notify_sh指令碼 #!/bin/bash case $1 in master) /usr/local/nginx/sbin/nginx exit 0 ;; backup) /usr/local/nginx/sbin/nginx -s stop /usr/local/nginx/sbin/nginx exit 0 ;; fault) /usr/local/nginx/sbin/nginx -s stop exit 0 *) echo "(notify.sh(master|backup|fault)" exit 1 ;; esac