keeplived簡介
keeplived是一個基於VRRP協議來實現的WEB服務高可用方案,可以利用其來避免單點故障。一個WEB服務至少會有2臺服務器運行Keepalived,一臺爲主服務器(MASTER),一臺爲備份服務器(BACKUP),但是對外表現爲一個虛擬IP,主服務器會發送特定的消息給備份服務器,當備份服務器收不到這個消息的時候,即主服務器宕機的時候,備份服務器就會接管虛擬IP,繼續提供服務,從而保證了高可用性。
#全局定義塊
global_defs {
notification_email { #指定keepalived在發生切換時需要發送email到的對象,一行一個
123456@gmail.com
}
notification_email_from #指定發件人
smtp_server 127.0.0.1 #指定smtp服務器地址
smtp_connect_timeout 3 #指定smtp連接超時時間
router_id LVS_DEVEL #運行keepalived機器的一個標識
}
#監控haproxy 進程
vrrp_script chk_haproxy { # Requires keepalived-1.1.13
script "killall -0 haproxy" # widely used idiom
interval 2 # check every 2 seconds
weight 2
}
#VRRP實例定義塊
vrrp_sync_group VG_1{ #監控多個網段的實例
group {
inside_network #實例名
outside_network
}
notify_master /path/xx.sh #指定當切換到master時,執行的腳本
netify_backup /path/xx.sh #指定當切換到backup時,執行的腳本
notify_fault "path/xx.sh VG_1" #故障時執行的腳本
notify /path/xx.sh
smtp_alert #使用global_defs中提供的郵件地址和smtp服務器發送郵件通知
}
vrrp_instance inside_network {
state BACKUP #指定那個爲master,那個爲backup,如果設置了nopreempt這個值不起作用,主備考priority決定
# nopreempt #設置爲不搶佔 注:這個配置只能設置在backup主機上,而且這個主機優先級要比另外一臺高
interface eth0 #設置實例綁定的網卡
dont_track_primary #忽略vrrp的interface錯誤(默認不設置)
track_interface{ #設置額外的監控,裏面那個網卡出現問題都會切換
eth0
eth1
}
mcast_src_ip #發送多播包的地址,如果不設置默認使用綁定網卡的primary ip
garp_master_delay #在切換到master狀態後,延遲進行gratuitous ARP請求
virtual_router_id 50 #VPID標記 ,路由ID,可通過#tcpdump vrrp查看
priority 99 #優先級,高優先級競選爲master
advert_int 1 #檢查間隔,默認1秒
preempt_delay #搶佔延時,默認5分鐘
debug #debug級別
authentication { #設置認證
auth_type PASS #認證方式
auth_pass 111111 #認證密碼
}
virtual_ipaddress { #設置vip
172.16.31.30
}
}
#虛擬服務器定義塊
virtual_server 172.16.31.3123 {
delay_loop 6 #健康檢查時間間隔
lb_algo rr #lvs調度算法rr|wrr|lc|wlc|lblc|sh|dh
lb_kind DR #負載均衡轉發規則NAT|DR|RUN
persistence_timeout 5 #會話保持時間
protocol TCP #使用的協議
persistence_granularity #lvs會話保持粒度
virtualhost #檢查的web服務器的虛擬主機(host:頭)
sorry_server #備用機,所有realserver失效後啓用
real_server 192.168.200.5 23 {
weight 1 #默認爲1,0爲失效
inhibit_on_failure #在服務器健康檢查失效時,將其設爲0,而不是直接從ipvs中刪除
notify_up| #在檢測到server up後執行腳本
notify_down|#在檢測到server down後執行腳本
TCP_CHECK {
connect_timeout 3 #連接超時時間
nb_get_retry 3 #重連次數
delay_before_retry 3 #重連間隔時間
connect_port 23 #健康檢查的端口的端口
bindto
}
HTTP_GET | SSL_GET{
url{ #檢查url,可以指定多個
path /
digest #檢查後的摘要信息
status_code 200 #檢查的返回狀態碼
}
connect_port
bindto
connect_timeout 5
nb_get_retry 3
delay_before_retry 2
}
SMTP_CHECK{
host{
connect_ip
connect_port #默認檢查25端口
bindto
}
connect_timeout 5
retry 3
delay_before_retry 2
helo_name| #smtp helo請求命令參數,可選
}
MISC_CHECK{
misc_path|#外部腳本路徑
misc_timeout #腳本執行超時時間
misc_dynamic #如設置該項,則退出狀態碼會用來動態調整服務器的權重,返回0 正常,不修改;返回1,檢查失敗,權重改爲0;返回2-255,正常,權重設置爲:返回狀態碼-2
}
}
}