準備工作
- 兩臺虛擬機如:
- 10.211.55.8
- 10.211.55.10
- 準備安裝文件
- nginx-1.13.1.tar.gz
- pcre-8.36.zip
- keepalived-1.2.22.tar.gz
安裝nginx
-
參考安裝Linux一文,在兩臺服務器安裝nginx
10.211.55.8
稱爲nginx1
<br/>10.211.55.10
稱爲nginx2
安裝keepalived
-
解壓文件
cd /opt/software tar -zxvf keepalived-1.2.22.tar.gz cd keepalived-1.2.22
-
安裝
./configure --prefix=/opt/keepalived make && make install
-
處理配置文件和可執行文件
cp /opt/keepalived/etc/rc.d/init.d/keepalived /etc/init.d/ cp /opt/keepalived/etc/sysconfig/keepalived /etc/sysconfig/ mkdir /etc/keepalived cp /opt/keepalived/etc/keepalived/keepalived.conf /etc/keepalived ln -s /opt/keepalived/sbin/keepalived /usr/sbin/
-
啓動服務
/etc/init.d/keepalived start
-
按照相同的步驟在另一臺服務器安裝
keepalived
修改配置文件
vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
# keepalived 自帶的郵件提醒需要開啓 sendmail 服務。建議用獨立的監控或第三方 SMTP,也可配置郵件發送
router_id 10.211.55.8
}
vrrp_script chk_nginx {
# 運行腳本,腳本內容下面有,就是起到一個nginx宕機以後,自動開啓服務
script "/opt/shell/nginx_check.sh"
# 檢測時間間隔
interval 2
# 如果條件成立的話,則權重 -20
weight -20
}
# 定義虛擬路由,VI_1 爲虛擬路由的標示符,自己定義名稱
vrrp_instance VI_1 {
# 來決定主從(從:BACKUP)
state MASTER
# 綁定虛擬 IP 的網絡接口,根據自己的機器填寫
interface eth0
# 虛擬路由的 ID 號, 兩個節點設置必須一樣
virtual_router_id 121
# 填寫本機ip
mcast_src_ip 10.211.55.10
# 節點優先級,主節點比從節點優先級高
priority 100
# 優先級高的設置 nopreempt 解決異常恢復後再次搶佔的問題
nopreempt
# 組播信息發送間隔,兩個節點設置必須一樣,默認 1s
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
# 將 track_script 塊加入 instance 配置塊
track_script {
#執行 Nginx 監控的服務
chk_nginx
}
virtual_ipaddress {
# 虛擬ip,也就是解決寫死程序的ip怎麼能切換的ip,也可擴展,用途廣泛。可配置多個。
10.211.55.100
}
}
以上配置爲主節點配置,從節點類似,有區別的已經標明。下面是監控服務腳本內容
#!/bin/bash
A=`ps -C nginx –no-header |wc -l`
if [ $A -eq 0 ];then
/opt/nginx/sbin/nginx
sleep 2
if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then
killall keepalived
fi
fi
定義變量,此變量爲檢查nginx進程腳本,如果進程爲0,則啓動nginx服務,再次檢查nginx服務,如果仍沒啓動 ,殺掉所有keepalived的進程。
測試高可用
-
打開瀏覽器,輸入虛擬ip
10.211.55.100
-
顯示的是
nginx1
的頁面 -
此時可以停掉一臺nginx服務器
/opt/nginx/sbin/nginx -s stop
-
這時候,單獨訪問這臺服務器,發現還是可以的,也就是說,
keepalived
監控到nginx
服務down掉了,然後自動重啓這臺機器了。 -
這時再停掉一臺
keepalived
服務器/etc/init.d/keepalived stop
-
刷新瀏覽器,顯示的將是另外一臺
nginx
-
這時就可以證明已經實現**
高可用
**