1. 程式人生 > >nginx + keepalived實現高可用

nginx + keepalived實現高可用

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