keepalived實現nginx高可用,一主一備
keepalived實現nginx高可用(HA)
安裝直接yum安裝就可以,版本可能比官網落後,但是夠用了,
yum -y install keepalived
編輯配置文件,默認路徑 /etc/keepalived/keepalived.conf,這裏將默認配置文件重命名,新建一個空的配置文件
mv /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf.bak
vim /etc/keepalived/keepalived.conf
global_defs { notification_email { [email protected] } notification_email_from [email protected] smtp_server smtp.example.com smtp_connection_timeout30 router_id nginx_master # 設置nginx master的id,在一個網絡應該是唯一的 } vrrp_script chk_http_port { script "/etc/keepalived/check_nginx_pid.sh" #最後手動執行下此腳本,以確保此腳本能夠正常執行 interval 2 #(檢測腳本執行的間隔,單位是秒) weight 2
#fall 3 #連續監測失敗3次,才認為真的健康檢查失敗。並調整優先級
#rise 2 #連續監測成功2次,認為健康檢查成功,調整優先級
} vrrp_instance VI_1 { state MASTER # 指定keepalived的角色,MASTER為主,BACKUP為備 interface eth0 # 當前進行vrrp通訊的網絡接口卡(當前centos的網卡) virtual_router_id 66 # 虛擬路由編號,主從要一直 priority 100 # 優先級,數值越大,獲取處理請求的優先級越高 advert_int 1 # 檢查間隔,默認為1s(vrrp組播周期秒數) authentication { auth_type PASS auth_pass1111 } track_script { chk_http_port #(調用檢測腳本) } virtual_ipaddress { 192.168.10.200 # 定義虛擬ip(VIP),可多設,每行一個 } }
上面是MASTER的配置文件,BACKUP的配置文件只需要修改"state MASTER"為"state BACKUP"和"priority 100"為"priority 99"
keepalived日誌默認輸出到/var/log/messages,可以tail -f 查看日誌debug
nginx檢測腳本check_nginx_pid.sh內容如下:
#!/bin/bash A=`ps -C nginx --no-header |wc -l` if [ $A -eq 0 ];then /usr/sbin/nginx #重啟nginx if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then #nginx重啟失敗,則停掉keepalived服務,進行VIP轉移 killall keepalived fi fi
腳本執行完返回0表示成功,返回非0表示失敗,這裏如果nginx重啟失敗,直接是停掉keepalived服務。
vrrp_script中節點權重改變算法
vrrp_script 裏的script返回值為0時認為檢測成功,其它值都會當成檢測失敗;
-
weight 為正時,腳本檢測成功時此weight會加到priority上,檢測失敗時不加;
-
主失敗:
-
主 priority < 從 priority + weight 時會切換。
-
-
主成功:
-
主 priority + weight > 從 priority + weight 時,主依然為主
-
-
-
weight 為負時,腳本檢測成功時此weight不影響priority,檢測失敗時priority – abs(weight)
-
主失敗:
-
主 priority – abs(weight) < 從priority 時會切換主從
-
-
主成功:
-
主 priority > 從priority 主依然為主
-
-
參考 https://www.cnblogs.com/youzhibing/p/7327342.html
keepalived實現nginx高可用,一主一備