nginx + keepalived實現高可用
阿新 • • 發佈:2019-01-06
1 MASTER 節點配置檔案(192.168.50.133)
vi /etc/keepalived/keepalived.conf ! Configuration File for keepalived global_defs { ## keepalived 自帶的郵件提醒需要開啟 sendmail 服務。 建議用獨立的監控或第三方 SMTP router_id liuyazhuang133 ## 標識本節點的字條串,通常為 hostname } ## keepalived 會定時執行指令碼並對指令碼執行的結果進行分析,動態調整 vrrp_instance 的優先順序。如果指令碼執行結果為 0,並且 weight 配置的值大於 0,則優先順序相應的增加。如果指令碼執行結果非 0,並且 weight配置的值小於 0,則優先順序相應的減少。其他情況,維持原本配置的優先順序,即配置檔案中 priority 對應的值。 vrrp_script chk_nginx { script "/etc/keepalived/nginx_check.sh" ## 檢測 nginx 狀態的指令碼路徑 interval 2 ## 檢測時間間隔 weight -20 ## 如果條件成立,權重-20 } ## 定義虛擬路由, VI_1 為虛擬路由的標示符,自己定義名稱 vrrp_instance VI_1 { state MASTER ## 主節點為 MASTER, 對應的備份節點為 BACKUP interface eth0 ## 繫結虛擬 IP 的網路介面,與本機 IP 地址所在的網路介面相同, 我的是 eth0 virtual_router_id 33 ## 虛擬路由的 ID 號, 兩個節點設定必須一樣, 可選 IP 最後一段使用, 相同的 VRID 為一個組,他將決定多播的 MAC 地址 mcast_src_ip 192.168.50.133 ## 本機 IP 地址 priority 100 ## 節點優先順序, 值範圍 0-254, MASTER 要比 BACKUP 高 nopreempt ## 優先順序高的設定 nopreempt 解決異常恢復後再次搶佔的問題 advert_int 1 ## 組播資訊傳送間隔,兩個節點設定必須一樣, 預設 1s ## 設定驗證資訊,兩個節點必須一致 authentication { auth_type PASS auth_pass 1111 ## 真實生產,按需求對應該過來 } ## 將 track_script 塊加入 instance 配置塊 track_script { chk_nginx ## 執行 Nginx 監控的服務 } # # 虛擬 IP 池, 兩個節點設定必須一樣 virtual_ipaddress { 192.168.50.130 ## 虛擬 ip,可以定義多個 } }
2 BACKUP 節點配置檔案(192.168.50.134)
# vi /etc/keepalived/keepalived.conf ! Configuration File for keepalived global_defs { router_id liuyazhuang134 } vrrp_script chk_nginx { script "/etc/keepalived/nginx_check.sh" interval 2 weight -20 } vrrp_instance VI_1 { state BACKUP interface eth1 virtual_router_id 33 mcast_src_ip 192.168.50.134 priority 90 advert_int 1 authentication { auth_type PASS auth_pass 1111 } track_script { chk_nginx } virtual_ipaddress { 192.168.50.130 } }
3 編寫 Nginx 狀態檢測指令碼
# vi /etc/keepalived/nginx_check.sh
#!/bin/bash
A=`ps -C nginx --no-header |wc -l`
if [ $A -eq 0 ];then
/usr/local/nginx/sbin/nginx
sleep 2
if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then
killall keepalived
fi
fi