keepalived使用腳本進行健康檢查時的相關配置項。例如keepalived+haproxy實現haproxy的高可用。 keepalived分為vrrp實例的心跳檢查和後端服務的健康檢查。如果要配置後端服務,則後端服務只能是LVS。但vrrp能獨立與lvs存在,例如keepalive結合hap ...
keepalived使用腳本進行健康檢查時的相關配置項。例如keepalived+haproxy實現haproxy的高可用。
keepalived分為vrrp實例的心跳檢查和後端服務的健康檢查。如果要配置後端服務,則後端服務只能是LVS。但vrrp能獨立與lvs存在,例如keepalive結合haproxy、mysql等服務實現它們的高可用。
- vrrp實例的心跳檢查(lvs,haproxy,mysql...)
- (1).除了LVS,vrrp只能通過腳本來實現vrrp的健康檢查,並通過腳本結束keepalived進程來中斷該實例的心跳通告。此時virtual server部分的配置需省略。
- (2).對於LVS,無需使用任何腳本,因為所有keepalived節點會同時對後端服務進行健康檢查,並同時從LVS規則中剔除下線的服務。如果所有後端服務都不健康,那就沒有必要切換keepalived。
- 後端RS的健康檢查(只能是LVS)
- (1).一般採用TCP_CHECK、HTTP_GET、SSL_GET進行健康檢查。
- (2).但也能自寫腳本進行後端服務的健康檢查,這種模式稱為MISC_CHECK。
以下是從man keepalived
中截取的通過腳本進行心跳檢查、健康檢查時的相關配置選項。
VRRP script(s)
# 定義一個vrrp腳本,後續vrrp組或vrrp實例要執行某腳本時,需要從此處引用
# 註意,所有vrrp實例都會監控腳本的退出狀態碼
vrrp_script <SCRIPT_NAME> {
script <STRING>|<QUOTED-STRING> # 要執行的命令或腳本路徑
interval <INTEGER> # 腳本調用時間間隔,預設1秒
timeout <INTEGER> # 腳本執行等待超時時長,超過該時長,表示腳本執行失敗
weight <INTEGER:-254..254> # 根據該權重值調整vrrp實例優先順序值,預設值為0
rise <INTEGER> # 需要成功多少次,vrrp才進行角色狀態切換
fall <INTEGER> # 需要失敗多少次,vrrp才進行角色狀態切換
user USERNAME [GROUPNAME] # 腳本執行身份,group預設同username
init_fail # 假定腳本初始化時就處於失敗狀態
}
VRRP synchronization group(s)
# 分別表示切換為主/備/出錯(例如監控的eth0壞了)時所執行的腳本。
# 要為腳本傳遞參數時,使用引號包圍整個腳本和參數
notify_master /path/to_master.sh [username [groupname]]
notify_backup /path/to_backup.sh [username [groupname]]
notify_fault "/path/fault.sh VG_1" [username [groupname]]
# notify表示只要狀態切換都會調用的腳本,且該腳本是在以上三個腳本執行之後再調用的,
# keepalived會自動傳遞四個參數,因此不要手動為腳本傳遞參數。
# $1 = "GROUP"|"INSTANCE"
# $2 = vrrp組名稱或vrrp實例名
# $3 = 切換的目標狀態(MASTER/BACKUP/FAULT)
# $4 = 優先順序數值(priority value)
notify /path/notify.sh [username [groupname]]
VRRP instance(s)部分
# 監控介面,當某介面down掉時,切換為fault狀態
track_interface {
eth0
eth1
eth2 weight <-254..254>
...
}
# 監控腳本,即執行vrrp_script定義的腳本
track_script {
<SCRIPT_NAME>
<SCRIPT_NAME> weight <-254..254>
}
# notify_master/backup/fault/stop分別表示切換為主、備、出錯(例如監控的eth0壞了)、vrrp停止時所執行的腳本
# 要為腳本傳遞參數時,使用引號包圍整個腳本和參數
notify_master <STRING>|<QUOTED-STRING> [username [groupname]]
notify_backup <STRING>|<QUOTED-STRING> [username [groupname]]
notify_fault <STRING>|<QUOTED-STRING> [username [groupname]]
notify_stop <STRING>|<QUOTED-STRING> [username [groupname]] # executed when stopping vrrp
# notify表示只要狀態切換都會調用的腳本,並且該腳本是在以上三個腳本執行之後再調用的
notify <STRING>|<QUOTED-STRING> [username [groupname]]
Virtual server(s)部分
# 投票被選舉成功或失敗時執行的腳本
quorum_up <STRING>|<QUOTED-STRING>
quorum_down <STRING>|<QUOTED-STRING>
real_server <IPADDR> <PORT>
{
# 當健康檢查的後端rs上線、下線時執行的腳本
notify_up <STRING>|<QUOTED-STRING>
notify_down <STRING>|<QUOTED-STRING>
# MISC健康檢查類型,該類型通過自定義腳本來檢查後端健康狀況
MISC_CHECK
{
# 執行哪個腳本來判斷後端是否健康
misc_path <STRING>|<QUOTED-STRING>
# Script execution timeout
misc_timeout <INT>
# 指定一個隨機延遲時間,防止同時檢查所有後端,指定為0時表示禁止該功能。
# 預設啟動該功能,預設最大間隔為delay_loop的值。
warmup <INT>
# 如果指定該選項,則根據健康檢查腳本的退出狀態碼動態調整權重值
# 退出狀態碼為:
# 0:表示檢查成功,不做任何權重修改
# 1:表示檢查失敗
# 2-255:表示檢查成功,但權重值減2,例如(狀態碼為255,則設置權重為253)
misc_dynamic
# 指定運行後端健康檢查腳本的身份,不指定group時將預設使用username
user USERNAME [GROUPNAME]
}
}
}
例如,在keepalived+haproxy時。
vrrp_script check_haproxy {
script"/etc/keepalived/chk_haproxy.sh"
interval 2
weight 2
}
global_defs {
router_id haproxy1
}
vrrp_instanceVI_1 {
state MASTER
interface eth0
virtual_router_id 150
priority 50
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress{
192.168.1.201
}
track_script {
check_haproxy
}
}
其中check_haproxy的腳本/etc/keepalived/chk_haproxy.sh內容如下:
#!/bin/bash
if killall -0 haproxy &>/dev/null;then
serivce haproxy restart
sleep 1
if killall -0 haproxy &>/dev/null;then
service keepalived stop
fi
fi
回到Linux系列文章大綱:http://www.cnblogs.com/f-ck-need-u/p/7048359.html
回到網站架構系列文章大綱:http://www.cnblogs.com/f-ck-need-u/p/7576137.html
回到資料庫系列文章大綱:http://www.cnblogs.com/f-ck-need-u/p/7586194.html
轉載請註明出處:http://www.cnblogs.com/f-ck-need-u/p/8566233.html
註:若您覺得這篇文章還不錯請點擊右下角推薦,您的支持能激發作者更大的寫作熱情,非常感謝!