keepalived實作nginx的高可用
注意:這裡nginx以及keepalived已經裝好了,如果沒有裝好請參考我的安裝部署文檔
1、修改 Keepalived 配置檔案(keepalived.conf)
(1) MASTER 節點配置檔案(192.168.44.71)
vim /etc/keepalived/keepalived.conf
先查一下本機 IP 位址所在的網絡接口相同, 我的是 eth0,後面用得着

以下兩張圖檔分開截的
! Configuration File for keepalived
global_defs {
router_id 192.168.44.71 ## 辨別本節點的字條串,通常為 hostname
}
vrrp_script chk_nginx {
script "/etc/keepalived/nginx_check.sh" ## 檢測 nginx 狀态的腳本路徑
interval 2 ## 檢測時間間隔
weight -20 ## 如果條件成立,權重-20
}
vrrp_instance VI_1 {
state MASTER ## 主節點為 MASTER, 對應的備份節點為 BACKUP
interface eth0 ## 綁定虛拟 IP 的網絡接口,與本機 IP 位址所在的網絡接口相同, 我的是 eth0
virtual_router_id 71 ## 虛拟路由的 ID 号, 兩個節點設定必須一樣, 可選 IP 最後一段使用, 相同的 VRID 為一個組,他将決定多點傳播的 MAC 位址
mcast_src_ip 192.168.44.71 ## 本機 IP 位址
priority 100 ## 節點優先級, 值範圍 0-254, MASTER 要比 BACKUP 高
nopreempt ## 優先級高的設定 nopreempt 解決異常恢複後再次搶占的問題
advert_int 1 ## 多點傳播資訊發送間隔,兩個節點設定必須一樣, 預設 1s
authentication {
auth_type PASS
auth_pass 1111
}
track_script {
chk_nginx ## 執行 Nginx 監控的服務
}
virtual_ipaddress {
192.168.44.70 ## 虛拟 ip,可以定義多個
}
}
(2)BACKUP 節點配置檔案(192.168.44.73)
vim /etc/keepalived/keepalived.conf
先查一下本機 IP 位址所在的網絡接口相同, 我的是 eth0,後面用得着
! Configuration File for keepalived
global_defs {
router_id 192.168.44.73 ## 辨別本節點的字條串,通常為 hostname
}
vrrp_script chk_nginx {
script "/etc/keepalived/nginx_check.sh"
interval 2
weight -20
}
vrrp_instance VI_1 {
state BACKUP
interface eth0
virtual_router_id 71
mcast_src_ip 192.168.44.73 ## 本機 IP 位址
priority 90
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
## 将 track_script 塊加入 instance 配置塊
track_script {
chk_nginx ## 執行 Nginx 監控的服務
}
# 虛拟 IP 池, 兩個節點設定必須一樣
virtual_ipaddress {
192.168.44.70
}
}
2、編寫 Nginx 狀态檢測腳本 主從伺服器上都要,是以兩份
編寫 Nginx 狀态檢測腳本 /etc/keepalived/nginx_check.sh (已在 keepalived.conf 中配置)腳本要求:如果 nginx 停止運作,嘗試啟動,如果無法啟動則殺死本機的 keepalived 程序, keepalied将虛拟 ip 綁定到 BACKUP 機器上。 内容如下:
vim /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
儲存後,給腳本賦執行權限:
chmod +x /etc/keepalived/nginx_check.sh
3、啟動 Keepalived nginx
/usr/local/nginx/sbin/nginx -s reload
service keepalived start
4、Keepalived+Nginx 的高可用測試
同時啟動192.168.44.71和192.168.44.73上的Nginx和Keepalived,我們通過VIP(192.168.44.70)來通路Nginx,如下:
注意:我這裡由于網絡原因配置隧道轉發,是以用127.0.0.1分别配置了端口号!!!
1)啟動192.168.44.71來通路Nginx
2)啟動192.168.44.73來通路Nginx
3)啟動192.168.44.70來通路Nginx
5、開始測試
我們關閉192.168.44.71(主)上的Keepalived和Nginx
cd /usr/local/nginx/sbin/
./nginx -s stop
pkill keepalived
此時,我們再通過VIP(192.168.44.70)來通路Nginx,如下
我們再開啟192.168.44.71上的Keepalived和Nginx
在192.168.44.71執行如下指令:
./nginx -s reload
service keepalived start
因為我們寫了腳本nginx_check.sh,這個腳本會為我們自動自動Nginx。
此時,我們再通過VIP(192.168.44.70)來通路Nginx,如下