原文大部分內容摘自 https://blog.csdn.net/yinwenjie/article/details/47130609
本文簡單記錄 Keepalived 軟件的安裝配置操作.
准備兩台服務器,分別安裝好 nginx web 服務器.
再分別獨立安裝Keepalived系統
我們的目標是“在一台工作的Nginx崩潰的情況下,系統能夠檢測到,並自動將請求切換到另外一台備份的Nginx服務器上”。所以,之前安裝的兩台Nginx,一台是Master服務器是主要的工作服務器,另一台是備份服務器,在Master服務器出現問題后,由后者接替其工作。如下圖所示(外網的請求使用一個由keepalived控制的虛擬的浮動IP進行訪問):
使用yum 安裝好 keepalived.
下面的腳本代碼為檢測 nginx 服務器是否正常運行,如果沒有運行則嘗試啟動 nginx,休眠2s后再次檢測nginx運行狀態,如果為運行,則退出此主機上的 keepalived,由其他 keepalived 接管.
#!/bin/sh
if [ $(ps -C nginx --no-header | wc -l) -eq 0 ]; then
systecmctl start nginx
fi
sleep 2
if [ $(ps -C nginx --no-header | wc -l) -eq 0 ]; then
systecmctl stop keepalived
fi
keepalived 配置
! Configuration File for keepalived
# global setting , notify email setting
global_defs {
#節點id,每個節點都不同
router_id LVS_V1
}
#檢測 nginx 運行狀態的腳本
vrrp_script chknginx {
script "/opt/checknginx.sh"
interval 10
}
# instance setting
vrrp_instance VI_1 {
# 節點角色,MASTER(一個) 和 BACKUP(多個),按角色選中填寫
state BACKUP
interface eth1
# 這里一定是一樣的
virtual_router_id 52
# 這里的優先級比Master節點低
priority 99
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
# 虛擬ip,對外提供,客戶端訪問此ip即為訪問 keepalived 中MASTER 所在主機
virtual_ipaddress {
192.168.1.100
}
track_script {
chknginx
}
}
Keepalived 非搶占模式
keepalived的切換可以是自動的,但是卻做不到毫秒級別,他怎么都需要幾秒鍾的時間進行切換
這就有一個問題,雖然在主節點出現問題我們轉向備份節點時,這個延時無可避免,但是在我們修復主節點后,實際上並沒有必要再馬上做一次切換,所以Keepalived提供了一種非搶占模式,來滿足這個要求
此模式下keepalived 的配置
! Configuration File for keepalived
# global setting , notify email setting
global_defs {
router_id LVS_V1
}
vrrp_script chknginx {
script "/opt/checknginx.sh"
interval 10
# 一旦節點失效,節點的優先級就減少2
# 有多少個keepalived節點,就填寫多少數量。
# 這樣保證這個節點的優先級比其他節點都低
weight -2
# fall 表示多少次檢查失敗,就算節點失效。默認1
#fall 1
}
vrrp_instance VI_1 {
#state狀態都是BACKUP表示是主要工作節點。
state BACKUP
interface eth1
virtual_router_id 52
# 這個關鍵配置項,設置為“非搶占”模式
nopreempt
# 每個節點的優先級一定要不一樣
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
#虛擬地址和綁定的端口,如果有多個,就綁定多個
#dev 是指定浮動IP要綁定的網卡設備號
virtual_ipaddress {
192.168.61.100
}
#設置的檢查腳本
#關聯上方的“vrrp_script chknginx”
track_script {
chknginx
}
}