一、keepalied安裝
下載keepalied後解壓,進入解壓目錄,執行 configure 命令配置安裝目錄與conf配置文件目錄
./configure --prefix=/usr/local/keepalived --sysconf=/etc
prefix : keepaivied 安裝路徑
sysconf :核心配置文件所在位置,固定,改爲其他位置無法啓動
執行命令後若提示以下內容,則需安裝 libnl/libnl-3 依賴
安裝 libnl/libnl-3 依賴
yum -y install libnl libnl-devel
安裝後再次執行 configure 命令即可
執行 make && make install 安裝
註冊爲系統服務
進入如下目錄:
/home/software/keepalived-2.0.18/keepalived/etc
複製文件:
cp init.d/keepalived /etc/init.d/
cp sysconfig/keepalived /etc/sysconfig/
刷新配置:
systemctl daemon-reload
相關操作:
# 啓動keepalived
systemctl start keepalived
# 停止keepalived
systemctl stop keepalived
# 重啓keepalived
systemctl restart keepalived
二、Keepalied雙機主備高可用
1.配置Keepalived主節點
準備第一臺虛擬機(IP:192.168.3.57),按照上述安裝後,進入keepalived.conf所在目錄,即 /etc/keepalived 目錄下,編輯配置文件 vim keepalived.conf ,刪除其中默認數據,將下方配置項複製進去保存即可,其中內容根據說明自行調整
global_defs {
# 路由id:當前安裝keepalived的節點主機標識符,保證全局唯一
router_id keep_57
}
vrrp_instance VI_1 {
# 狀態是(MASTER)主機還是備用機(BACKUP)
state MASTER
# 該實例綁定的網卡
interface eth0
# 保證主備節點一致
virtual_router_id 233
# 權重,master權重一般高於backup,有多個就選舉,誰權重高誰當選
priority 100
# 主備之間同步檢查時間間隔,單位秒
advert_int 2
# 認證權限密碼,防止非法節點進入
authentication {
auth_type PASS
auth_pass 1111
}
# 虛擬出來的ip,可以有多個(vip)
virtual_ipaddress {
192.168.3.51
}
}
其中 interface 綁定的值爲當前網卡名,輸入 ip addr 查看,如下圖
進入/usr/local/keepalived/sbin/目錄下,執行 ./keepalived 啓動keepalived
進入至Keepalived解壓路徑cd /home/software/keepalived-2.0.18/keepalived/etc
執行命令
cp init.d/keepalived /etc/init.d/
cp sysconfig/keepalived /etc/sysconfig/
複製完成後,可通過service keepalived restart 重啓服務
相關命令
啓動
service keepalived start
停止
service keepalived stop
重啓
service keepalived restart
在該臺虛擬機啓動nginx服務,訪問綁定的虛擬IP :192.168.3.51 即可映射至nginx服務,成功訪問
2.配置Keepalived備用節點
另外開啓一臺虛擬機(IP:192.168.3.56),安裝Keepalived,安裝步驟與主節點安裝一致,調整keepalived.conf文件爲別用節點
global_defs {
# 路由id:主機標識符,全局唯一
router_id keep_56
}
vrrp_instance VI_1 {
# 備用機
state BACKUP
# 該實例綁定的網卡
interface eth0
# 保證主備節點一致
virtual_router_id 233
# 權重,低於主節點
priority 70
# 主備之間同步檢查時間間隔,單位秒
advert_int 2
# 認證權限密碼,與主節點一致
authentication {
auth_type PASS
auth_pass 1111
}
# 與主節點保持一致,綁定到同一個vip
virtual_ipaddress {
192.168.3.51
}
}
也在該太虛擬機啓動一下nginx服務。
到現在,Keepalived主備高可用已搭建完成,可進行測試,我們搭建的環境如下
192.168.3.57 虛擬機:nginx服務已啓動,Keepalived服務已啓動,綁定vip(192.168.3.51),主節點(MASTER)
192.168.3.56 虛擬機:nginx服務已啓動,Keepalived服務已啓動,綁定vip(192.168.3.51),備用節點(BACKUP)
現在訪問192.168.3.51看看效果:
成功跳轉主節點的nginx服務。
我們模擬主節點宕機的情況,使用kill -9命令殺死主節點的Keepalived服務
主節點的Keepalived節點已經宕機,我們再來訪問 192.168.3.51
我們發現, 再次訪問後,訪問到的是備用節點服務,成功做到了主備高可用,我們再把主節點服務修復,啓動Keepalived服務,再次訪問看看。
刷新幾次發現,keepalived服務成功從備用節點切換到主節點。至此主備高可用服務搭建完成測試無誤
三、Keepalied配置Nginx自動重啓,實現7×24小時不間斷服務
vim /etc/keepalived/check_nginx_alive_or_not.sh
書寫下方腳本
#!/bin/bash
A=`ps -C nginx --no-header |wc -l`
# 判斷nginx是否宕機,如果宕機了,嘗試重啓
if [ $A -eq 0 ];then
/usr/local/nginx/sbin/nginx
# 等待一小會再次檢查nginx,如果沒有啓動成功,則停止keepalived,使其啓動備用機
sleep 3
if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then
killall keepalived
fi
fi
chmod +x /etc/keepalived/check_nginx_alive_or_not.sh
vrrp_script check_nginx_alive {
script "/etc/keepalived/check_nginx_alive_or_not.sh"
interval 2
# 每隔兩秒運行上一行腳本
weight 10
# 如果腳本運行失敗,則升級權重+10
# weight -10 腳本運行失敗,則升級權重-10
}
track_script {
check_nginx_alive # 追蹤 nginx 腳本
}
最終修改後的keepalived.conf文件如下:
global_defs {
router_id keep_57
}
vrrp_script check_nginx_alive {
script "/etc/keepalived/check_nginx_alive_or_not.sh"
interval 2
weight 10
}
vrrp_instance VI_1 {
state MASTER
interface eth0
virtual_router_id 233
priority 100
advert_int 2
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.3.51
}
track_script {
check_nginx_alive
}
}
4. 測試
嘗試關閉nginx,再次訪問,發現nginx依舊正常訪問,腳本成功執行
四、配置Keepalived雙主熱備
雙主熱備是爲了防止備用機使用較少造成資源浪費,配置方式爲兩臺服務互爲主備即可
192.168.3.57 Keepalived.conf配置如下
global_defs {
router_id keep_57
}
vrrp_script check_nginx_alive {
script "/etc/keepalived/check_nginx_alive_or_not.sh"
interval 2
weight 10
}
vrrp_instance VI_1 {
state MASTER
interface eth0
virtual_router_id 233
priority 100
advert_int 2
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.3.51
}
track_script {
check_nginx_alive
}
}
vrrp_instance VI_2 {
state BACKUP
interface eth0
virtual_router_id 234
priority 70
advert_int 2
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.3.52
}
track_script {
check_nginx_alive
}
}
192.168.3.56 Keepalived.conf配置如下
global_defs {
router_id keep_56
}
vrrp_script check_nginx_alive {
script "/etc/keepalived/check_nginx_alive_or_not.sh"
interval 2
weight 10
}
vrrp_instance VI_1 {
state BACKUP
interface eth0
virtual_router_id 233
priority 70
advert_int 2
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.3.51
}
track_script {
check_nginx_alive
}
}
vrrp_instance VI_2 {
state MASTER
interface eth0
virtual_router_id 234
priority 100
advert_int 2
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.3.52
}
track_script {
check_nginx_alive
}
}
重啓兩個Keepalived服務即可,雙主熱備還需配合DNS負載均衡共同使用,DNS解析時,負載均衡配置IP爲192.168.3.51-192.168.3.52,如此便實現了兩個服務共同使用,雙主熱備