Keepalived 配置文件解釋
Keepalived的所有配置都在一個配置文件里面,主要分為三類:
- 全局配置
- VRRPD配置
- LVS 配置
配置文件是以配置塊的形式存在,每個配置塊都在一個閉合的{}范圍內,所以編輯的時候需要注意大括號的閉合問題。#和!開頭都是注釋。
全局配置
全局配置是對整個 Keepalived 生效的配置,一個典型的配置如下:
global_defs { notification_email { #設置 keepalived 在發生事件(比如切換)的時候,需要發送到的email地址,可以設置多個,每行一個。 acassen@firewall.loc failover@firewall.loc sysadmin@firewall.loc } notification_email_from Alexandre.Cassen@firewall.loc #設置通知郵件發送來自於哪里,如果本地開啟了sendmail的話,可以使用上面的默認值。 smtp_server 192.168.200.1 #指定發送郵件的smtp服務器。 smtp_connect_timeout 30 #設置smtp連接超時時間,單位為秒。 router_id LVS_DEVEL #是運行keepalived的一個表示,多個集群設置不同。 }
VRRPD配置
VRRPD 的配置是 Keepalived 比較重要的配置,主要分為兩個部分 VRRP 同步組和 VRRP實例,也就是想要使用 VRRP 進行高可用選舉,那么就一定需要配置一個VRRP實例,在實例中來定義 VIP、服務器角色等。
VRRP Sync Groups
不使用Sync Group的話,如果機器(或者說router)有兩個網段,一個內網一個外網,每個網段開啟一個VRRP實例,假設VRRP配置為檢查內網,那么當外網出現問題時,VRRPD認為自己仍然健康,那么不會發生Master和Backup的切換,從而導致了問題。Sync group就是為了解決這個問題,可以把兩個實例都放進一個Sync Group,這樣的話,group里面任何一個實例出現問題都會發生切換。
vrrp_sync_group VG_1{ #監控多個網段的實例 group { VI_1 #實例名 VI_2 ...... } 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)配置
VRRP實例就表示在上面開啟了VRRP協議,這個實例說明了VRRP的一些特征,比如主從,VRID等,可以在每個interface上開啟一個實例。
vrrp_instance VI_1 { state MASTER #指定實例初始狀態,實際的MASTER和BACKUP是選舉決定的。 interface eth0 #指定實例綁定的網卡 virtual_router_id 51 #設置VRID標記,多個集群不能重復(0..255) priority 100 #設置優先級,優先級高的會被競選為Master,Master要高於BACKUP至少50 advert_int 1 #檢查的時間間隔,默認1s nopreempt #設置為不搶占,說明:這個配置只能在BACKUP主機上面設置 preempt_delay #搶占延遲,默認5分鍾 debug #debug級別 authentication { #設置認證 auth_type PASS #認證方式,支持PASS和AH,官方建議使用PASS auth_pass 1111 #認證的密碼 } virtual_ipaddress { #設置VIP,可以設置多個,用於切換時的地址綁定。格式:#<IPADDR>/<MASK> brd <IPADDR> dev <STRING> scope <SCOPT> label <LABE 192.168.200.16/24 dev eth0 label eth0:1 192.168.200.17/24 dev eth1 label eth1:1 192.168.200.18 } }
LVS 配置
虛擬服務器virtual_server定義塊 ,虛擬服務器定義是keepalived框架最重要的項目了,是keepalived.conf必不可少的部分。 該部分是用來管理LVS的,是實現keepalive和LVS相結合的模塊。ipvsadm命令可以實現的管理在這里都可以通過參數配置實現,注意:real_server是被包含在viyual_server模塊中的,是子模塊。
virtual_server 192.168.202.200 23 { //VIP地址,要和vrrp_instance模塊中的virtual_ipaddress地址一致 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 <NETMASK> #lvs會話保持粒度 virtualhost <string> #檢查的web服務器的虛擬主機(host:頭) sorry_server<IPADDR> <port> #備用機,所有realserver失效后啟用 real_server 192.168.200.5 23 { //RS的真實IP地址 weight 1 #默認為1,0為失效 inhibit_on_failure #在服務器健康檢查失效時,將其設為0,而不是直接從ipvs中刪除 notify_up <string> | <quoted-string> #在檢測到server up后執行腳本 notify_down <string> | <quoted-string> #在檢測到server down后執行腳本 TCP_CHECK { //常用 connect_timeout 3 #連接超時時間 nb_get_retry 3 #重連次數 delay_before_retry 3 #重連間隔時間 connect_port 23 #健康檢查的端口的端口 bindto <ip> } HTTP_GET | SSL_GET{ //不常用 url{ #檢查url,可以指定多個 path / digest <string> #檢查后的摘要信息 status_code 200 #檢查的返回狀態碼 } connect_port <port> bindto <IPADD> connect_timeout 5 nb_get_retry 3 delay_before_retry 2 } SMTP_CHECK{ //不常用 host{ connect_ip <IP ADDRESS> connect_port <port> #默認檢查25端口 bindto <IP ADDRESS> } connect_timeout 5 retry 3 delay_before_retry 2 helo_name <string> | <quoted-string> #smtp helo請求命令參數,可選 } MISC_CHECK{ //不常用 misc_path <string> | <quoted-string> #外部腳本路徑 misc_timeout #腳本執行超時時間 misc_dynamic #如設置該項,則退出狀態碼會用來動態調整服務器的權重,返回0 正常,不修改;返回1, 檢查失敗,權重改為0;返回2-255,正常,權重設置為:返回狀態碼-2 } }
Keepalived>>> 概念篇