Keepalived+Nginx高可用案例(搶佔式與非搶佔式)

付同學發表於2023-11-22
背景:伺服器版本Centos7.9

(1)下載安裝Keepalived原始碼包

Keepalived官網原始碼包下載地址

在伺服器上解壓

tar -xf keepalived-2.2.8.tar.gz

安裝相關前置依賴

yum -y install gcc gcc-c++

使用configure工具進行安裝

./configure --sysconfdir=/etc --prefix=/usr/local/keepalived --sbindir=/usr/sbin --bindir=/usr/bin

--sysconfdir=DIR #指定配置檔案位置 
--prefix=DIR #指定安裝路徑
 --sbindir=DIR 指定命令位置,後面不需再配置環境變數

使用make make install進行安裝

make && make install

(2)配置Keepalived在業務中的引數

本次操作為Keepalived單VIP搶佔式配置,即兩個虛擬機器只有一臺繫結VIP對外提供服務,且在一臺主機失能時VIP將漂移到備機上接收流量,當主機恢復時VIP將再次切換

主機配置
global_defs {
    router_id logincas1 ### router_id為全域性定義當前節點的id,一般為唯一
    enable_script_security
    script_user root  ##定義執行指令碼的角色
    vrrp_version 2
}
## 定義指令碼
vrrp_script chk_nginx {
    script      "/usr/local/nginx-check.sh" ##指令碼路徑
    interval    2							##檢測間隔
    timeout     4							##失敗間隔,失敗兩次通訊則失敗
    rise        4							##成功四次則成功
    fall        2							##失敗兩次則切換
    weight      -50							##指令碼檢測失敗則扣減權重
}
vrrp_instance VI_1 {				##模組配置
        version 2
        state MASTER				##搶佔式的情況下主機需設定為MASTER,備機為BACKUP
        interface eth0				##指定VIP流量的網路卡
        virtual_router_id 51			##虛擬路由ID
        priority 100				##優先順序,備機應比主機低一些
        advert_int 1				##VRRP心跳包傳送間隔
        authentication {			##許可權認證
          auth_type PASS			##型別:密碼
          auth_pass 2222			
        }
        virtual_ipaddress {
          172.29.184.220/24			##VIP配置
        }
        track_script {				##指令碼定義
          chk_nginx
        }

}

接下來需要補充完善 nginx-check.sh

思路是透過去檢測是否有Nginx程式,檢測到沒有nginx程式時先執行Nginx的重啟操作,一秒之後再次檢測,如果Nginx程式還是不存在則關閉Keepalived,使VIP漂移到另一個節點

#!/bin/bash
if [ `ps -C nginx --no-header | wc -l` -eq 0 ]; then
        systemctl restart nginx
        sleep 1
        if [ `ps -C nginx --no-header | wc -l` -eq 0 ]; then
           systemctl stop keepalived
        fi
fi

遇到的一些問題

當在指令碼里使用ps aux | grep nginx | grep -v grep | wc -l去檢測Nginx程式時發現指令碼一直未生效,合理懷疑是Keepalived執行使用者在執行這條命令時存在許可權問題(指令碼不能配置許可權為777,Keepalived會警告並失效)
本次使用的高可用架構為單VIP架構,後續也可以嘗試雙VIP架構,即互為主備機,配置兩個VIP模組,可以選擇使用一個VIP接收流量,也可以使用兩個VIP來監聽流量,看業務的需求。
在單VIP高可用架構中,如果想要主機恢復後VIP不漂移到主機上,可以將主機的state也設定為BACKUP,但優先順序需要比備機高一些,以確保初始狀態VIP是繫結在主機上的

相關文章