Nginx+Keepalived實現Nginx高可用
阿新 • • 發佈:2018-08-05
itl one 瀏覽器 p地址 存在 interval img title 訪問 在架構設計中,可以利用NGINX的反向代理和負載均衡實現後端應用的高可用性,同時我們還需要考慮Nginx的單點故障。真正做到架構高可用性。
主要考慮以下幾點:
1、Nginx服務因為意外現象掛掉
2、服務器宕機導致NGINX不可用
目前主流的解決方案就是keepalived+nginx 實現nginx的故障轉移,同時做好監控報警。在自動故障轉移的同時能通知到相關的應用負責人檢查相關應用,排查隱患,徹底解決問題。
模擬環境:
序號 | 環境名稱 | IP地址 | 環境介紹 |
1 | 訪問客戶端1 | 10.57.3.29 | mac 有Chrome等瀏覽器 |
2 | nginx備+keepalived備 | 10.57.31.205 | 反向代理 nginx高可用備 |
3 | nginx主+keepalived主 | 10.57.31.206 | 反向代理 nginx高可用主 |
4 | web應用服務器 | 10.57.27.20 | web應用 |
5 | VIP | 10.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高可用