1. 程式人生 > >Nginx+Keepalived實現Nginx高可用

Nginx+Keepalived實現Nginx高可用

itl one 瀏覽器 p地址 存在 interval img title 訪問

在架構設計中,可以利用NGINX的反向代理和負載均衡實現後端應用的高可用性,同時我們還需要考慮Nginx的單點故障。真正做到架構高可用性。

主要考慮以下幾點:

1、Nginx服務因為意外現象掛掉

2、服務器宕機導致NGINX不可用

目前主流的解決方案就是keepalived+nginx 實現nginx的故障轉移,同時做好監控報警。在自動故障轉移的同時能通知到相關的應用負責人檢查相關應用,排查隱患,徹底解決問題。

模擬環境:

序號環境名稱IP地址環境介紹
1訪問客戶端110.57.3.29mac 有Chrome等瀏覽器
2nginx備+keepalived備10.57.31.205反向代理 nginx高可用備
3nginx主+keepalived主10.57.31.206反向代理 nginx高可用主
4web應用服務器10.57.27.20web應用
5VIP10.57.31.230

nginx服務和web應用是已經配置好的環境,這裏就不介紹相關的配置。強烈建議關閉Firewalld和selinux服務

1、keepalived的安裝

yum install -y  keepalived

2、keepalived主(10.57.31.206)

[root@linuxceph2 ~]# cat  /etc/keepalived/keepalived.conf
! Configuration File for keepalived

global_defs {
   notification_email {
     [email protected]
     [email protected]
     [email protected]
   }
   notification_email_from [email protected]
   smtp_server 192.168.200.1
   smtp_connect_timeout 30
   router_id nginx02  # router_id  唯一標識符
   vrrp_skip_check_adv_addr
   vrrp_stricti
   vrrp_garp_interval 0
   vrrp_gna_interval 0
}

vrrp_script check_nginx {  
	script "/etc/keepalived/nginx_check.sh"   #nginx服務檢查腳本
	interval 1
	weight -2
}

vrrp_instance VI_1 {
    state MASTER
    interface eth0  #網卡  
    virtual_router_id 52  #默認為51  配置完發現主備切換有問題 更改為52 發現好了  原因未知
    priority 150     #主備的優先級priority 
    advert_int 1     #檢查時間1秒
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    track_script  {
	check_nginx
	}

    virtual_ipaddress {
        10.57.31.230/24    #vip地址 
    }
}
}

啟動服務後觀察網卡信息

技術分享圖片

3、keepalived備(10.57.31.205)

# Configuration File for keepalived

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

vrrp_instance VI_1 {
    state BACKUP
    interface eth0
    virtual_router_id 52

    priority 50
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        10.57.31.230/24
    }
}

}

啟動服務後觀察網卡信息

技術分享圖片

故障轉移

引起keepalived vip漂移的幾個常見因素

1、服務器宕機

2、監聽網卡故障

3、某一服務或者其他事件觸發 可以用腳本監聽服務端口 服務 進程等

測試一:將主服務器宕機

測試步驟、

1、ping VIP

2、將主keepalived服務器宕機

3、觀察ping情況和VIP飄移情況 同時堅持web服務

結果:

ping出現過丟包

技術分享圖片

2 VIP轉移

技術分享圖片

VIP漂移成功,服務能正常訪問 恢復主機後 接管備機的VIP

技術分享圖片

測試二、停止主節點的網絡服務

技術分享圖片

備節點

技術分享圖片

出現腦裂情況找不到VIP


測試三 測試nginx服務不能正常工作時VIP漂移

#!/bin/bash
#檢查nginx的pid文件是否存在 不存在時 killall  keepalivedVIP漂移
NGINXPID="/usr/install/nginx/logs/nginx.pid"
if  [ ! -f  $NGINXPID  ];then
	killall keepalived
fi

配置文件已經在上面的模塊中再不描述。

測試過程中遇到的問題:

1、virtual_router_id 配置為51 的時候漂移有問題

2、漂移過程中 備機防火墻意外開啟 導致網絡無法訪問

技術分享圖片


Nginx+Keepalived實現Nginx高可用