廢話不多說,網上大多數人的 keepalived 都是以 tar.zh 方式解壓安裝的,都不是用 yum 方式安裝的,你查了半天也解決不了現在的問題,因爲根本不對應。
我開始也是各種嘗試,各種查解決方案,但是還是解決不了,最後決定也同樣從官網下載 tar.zh的壓縮包吧。
環境:
通過yum安裝的keepalived,使用 keepalived -version 查到的版本號是1.3.5
而通過官網下載最新的安裝包,已經可以下到2.0.20了,所以會出現各種問題,你猜到是因爲什麼了嘛?
首先卸載原先通過yum方式下載的keepalived
yum remove keepalived
下載最新的壓縮包格式的keepalived
官網:https://www.keepalived.org/ 我下載的是 2.0.20
下載後放到你想放的任何地方,然後解壓,進入到該目錄
執行檢測命令:(這個地方是我建議放的地方,因爲後面的配置都是以這個配置爲基礎的)
./configure -prefix=/usr/local/keepalived
執行安裝命令:(不要換目錄繼續執行)
安裝的內容就被安裝到上面自己寫的目錄中
make && make install
初始化及啓動:
啓動腳本變量引用文件
cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/keepalived
將keepalived主程序加入到環境變量
cp /usr/local/keepalived/sbin/keepalived /usr/sbin/keepalived
keepalived啓動腳本,放到/etc/init.d/目錄下就可以使用service命令便捷調用
cp /你當初解壓的keepalived目錄/keepalived/etc/init.d/keepalived /etc/init.d/keepalived
#你可以可以不做這步,可以使用主程序/usr/local/keepalived/sbin/keepalived來做相關操作
將配置文件放到默認路徑下
cp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf
啓動、關閉、重啓、查看狀態 (等配置完配置信息再啓動)
service keepalived start|stop|restart|status
配置文件配置和腳本文件
兩臺服務器的配置文件
主服務器 /etc/keepalived/keepalived.conf
#全局定義
global_defs {
notification_email {
[email protected]
[email protected]
[email protected]
}
notification_email_from [email protected]
smtp_server 192.168.235.129 #改這裏了
smtp_connect_timeout 30
router_id nginx_master #唯一的值,也可以改成IP
}
#檢測腳本定義
vrrp_script chk_http_port {
script "/usr/local/src/nginx_check.sh"
interval 2 # 檢測腳本執行的間隔
weight 2 # 權重等級
}
#虛擬實例定義
vrrp_instance VI_1 {
state MASTER #主機爲MASTER,備用機爲BACKUP
interface ens33 #網卡名,用ifconfig查看
virtual_router_id 66 #主、備機的virtual_router_id必須相同
priority 100 #主、備機取不同的優先級,主機值較大,備份機值較小
advert_int 1 #心跳,每隔1秒鐘檢測一下服務器是否還活着
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.235.50 # 暴露給外界的虛擬IP地址,切記要與實際服務器處於同一網段
}
}
從服務器 /etc/keepalived/keepalived.conf
#全局定義
global_defs {
notification_email {
[email protected]
[email protected]
[email protected]
}
notification_email_from [email protected]
smtp_server 192.168.235.131 #改這裏了
smtp_connect_timeout 30
router_id nginx_backup #唯一的值,也可以改成IP
}
#檢測腳本定義
vrrp_script chk_http_port {
script "/usr/local/src/nginx_check.sh"
interval 2 # 檢測腳本執行的間隔
weight 2 # 權重等級
}
#虛擬實例定義
vrrp_instance VI_1 {
state BACKUP #主機爲MASTER,備用機爲BACKUP
interface ens33 #網卡名,用ifconfig查看
virtual_router_id 51 #主、備機的virtual_router_id必須相同
priority 90 #主、備機取不同的優先級,主機值較大,備份機值較小
advert_int 1 #心跳,每隔1秒鐘檢測一下服務器是否還活着
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.235.50 # 暴露給外界的虛擬IP地址,切記要與實際服務器處於同一網段
}
}
注意:
(1)例如:chk_http_port { ,這裏的 “{” 要與前面的名稱要有空格
(2)vip(virtual_ipaddress) 的地址網關要與實際服務器的網關一致,例如服務器IP地址爲 192.168.235.131 ,寫的vip的地址 也應該是 192.168.235.xxx
兩臺服務器的腳本文件
/usr/local/src/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
配置完信息後啓動 keepalived
service keepalived start
你可以使用 ps -ef|grep keepalived 來看它是否真的已經啓動了,用 service keepalived status可能看不出來
測試
這裏我增加了一個靜態的網頁資源,你可能沒有這個網頁,但也可以直接訪問192.168.xx.xx(你自己設置的virtual_ipaddress 地址),不出意外它就會訪問到Nginx的默認主頁,我這裏只是多配了個網頁方便測試而已。
當主服務器nginx還活着的時候,主服務器的ip是綁定着 ens33 網卡的
從服務器就沒有
當把主服務器的 nginx 和 keepalived 停止服務2秒鐘後
從服務器
同樣,當主服務器再次打開時,再次訪問同樣的地址,立刻就切回了主服務器的頁面。