Keepalived的全局配置詳解
Keepalived的配置文件都是以塊(block)的形式組織的,每個塊的內容都包含在{}中,以“#”和“!”開頭的行都是註釋。全局配置就是對整個Keepalived都生效的配置
! Configuration File for keepalived
global_defs {
notification_email {
}
notification_email_from Keepalived@localhost
smtp_server 192.168.1.100
smtp_connect_timeout 30
router_id LVS_DEVEL
}
notification_email用於設置報警郵件地址,可以設置多個,每行一個。注意,如果要開啓郵件報警,需要開啓本機的Sendmail服務。
notification_email_from用於設置郵件的發送地址。
smtp_server用於設置郵件的smtp server地址。
smtp_connect_timeout用於設置連接smtp server的超時時間。
router_id表示運行Keepalived服務器的一個標識,是發郵件時顯示在郵件主題中的信息。
Keepalived的VRRPD配置詳解
VRRPD配置又可分爲VRRP同步組配置和VRRP實例配置。
下面是兩個同步組的配置樣例:
vrrp_sync_group G1 {
group {
VI_1
VI_2
VI_5
}
notify_backup "/usr/local/bin/vrrp.back arg1 arg2"
notify_master "/usr/local/bin/vrrp.mast arg1 arg2"
notify_fault "/usr/local/bin/vrrp.fault arg1 arg2"
}
vrrp_sync_group G2 {
group {
VI_3
VI_4
}
}
notify_master:指定當Keepalived進入Master狀態時要執行的腳本,這個腳本可以是一個狀態報警腳本,也可以是一個服務管理腳本。Keepalived允許腳本傳入參數,因此靈活性很強。
notify_backup:指定當Keepalived進入Backup狀態時要執行的腳本,同理,這個腳本可以是一個狀態報警腳本,也可以是一個服務管理腳本。
notify_fault:指定當Keepalived進入Fault狀態時要執行的腳本,腳本功能與前兩個類似。
notify_stop:指定當Keepalived程序終止時需要執行的腳本。
VRRP實例的配置
vrrp_instance VI_1 {
state MASTER
interface eth0
virtual_router_id 51
priority 100
advert_int 1
mcast_src_ip <IPADDR>
garp_master_delay 10
track_interface {
eth0
eth1
}
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
#<IPADDR>/<MASK> brd <IPADDR> dev <STRING> scope <SCOPT> label <LABEL>
192.168.200.16
192.168.200.17 dev eth1
192.168.200.18 dev eth2
}
virtual_routes {
#src <IPADDR> [to] <IPADDR>/<MASK> via|gw <IPADDR> dev <STRING> scope <SCOPE>
src 192.168.100.1 to 192.168.109.0/24 via 192.168.200.254 dev eth1
192.168.110.0/24 via 192.168.200.254 dev eth1
192.168.111.0/24 dev eth2
192.168.112.0/24 via 192.168.100.254
192.168.113.0/24 via 192.168.100.252 or 192.168.100.253
}
nopreempt
preemtp_delay 300
}
vrrp_instance是VRRP實例開始的標識,後跟VRRP實例名稱。
state用於指定Keepalived的角色,MASTER表示此主機是主服務器,BACKUP表示此主機是備用服務器。
interface用於指定HA監測網絡的接口。
virtual_router_id是虛擬路由標識,這個標識是一個數字,同一個vrrp實例使用唯一的標識,即在同一個vrrp_instance下,MASTER和BACKUP必須是一致的。
priority用於定義節點優先級,數字越大表示節點的優先級就越高。在一個vrrp_instance下,MASTER的優先級必須大於BACKUP的優先級。
advert_int用於設定MASTER與BACKUP主機之間同步檢查的時間間隔,單位是秒。
mcast_src_ip用於設置發送多播包的地址,如果不設置,將使用綁定的網卡所對應的IP地址。
garp_master_delay用於設定在切換到Master狀態後延時進行Gratuitous arp請求的時間。
track_interface用於設置一些額外的網絡監控接口,其中任何一個網絡接口出現故障,Keepalived都會進入FAULT狀態。
authentication用於設定節點間通信驗證類型和密碼,驗證類型主要有PASS和AH兩種,在一個vrrp_instance下,MASTER與BACKUP必須使用相同的密碼才能正常通信。
virtual_ipaddress用於設置虛擬IP地址(VIP),又叫做漂移IP地址。可以設置多個虛擬IP地址,每行一個。可以寫成 “192.168.16.189/24 dev eth1” 這樣的形式
virtual_routes和virtual_ipaddress段一樣,用來設置在切換時添加或刪除相關路由信息。通過“ip route”命令可以查看路由信息是否添加成功,也可以通過notify_master選項來代替virtual_routes實現相同的功能。
nopreempt設置的是高可用集羣中的不搶佔功能。在使用不搶佔時,只能在“state”狀態爲“BACKUP”的節點上設置,而且這個節點的優先級必須高於其他節點。
preemtp_delay用於設置搶佔的延時時間,單位是秒。
vrrp_script check_mysqld
{
script "killall -0 mysqld"
interval 2
}
track_script
{
check_mysqld
}
script "killall -0 mysqld"用於檢測mysqld服務是否正常啓動,0代表正常、1代表異常
interval 2用於設置檢查的時間間隔
check_mysqld返回檢查的值
Keepalived的LVS配置詳解
LVS段的配置以“virtual_server”作爲開始標識,此段內容有兩部分組成,分別是real_server段和健康檢測段。下面是virtual_server段常用選項的一個配置示例:
virtual_server 192.168.12.200 80 {
delay_loop 6
lb_algo rr
lb_kind DR
persistence_timeout 50
persistence_granularity <NETMASK>
protocol TCP
ha_suspend
virtualhost <string>
sorry_server <IPADDR> <PORT>
virtual_server:設置虛擬服務器的開始,後面跟虛擬IP地址和服務端口,IP與端口之間用空格隔開。
delay_loop:設置健康檢查的時間間隔,單位是秒。
lb_algo:設置負載調度算法,可用的調度算法有rr、wrr、lc、wlc、lblc、sh、dh等,常用的算法有rr和wlc。
lb_kind:設置LVS實現負載均衡的機制,有NAT、TUN和DR三個模式可選。
persistence_timeout:會話保持時間,單位是秒。
persistence_granularity:此選項是配合persistence_timeout的,後面跟的值是子網掩碼,表示持久連接的粒度。默認是255.255.255.255,也就是一個單獨的客戶端IP。如果將掩碼修改爲255.255.255.0,那麼客戶端IP所在的整個網段的請求都會分配到同一個real server上。
protocol:指定轉發協議類型,有TCP和UDP兩種可選。
ha_suspend:節點狀態從Master到Backup切換時,暫不啓用real server節點的健康檢查。
virtualhost:在通過HTTP_GET/ SSL_GET做健康檢測時,指定的Web服務器的虛擬主機地址。
sorry_server:相當於一個備用節點,在所有real server失效後,這個備用節點會啓用。
real_server段的一個配置示例:
real_server 192.168.12.132 80 {
weight 3
inhibit_on_failure
notify_up <STRING> | <QUOTED-STRING>
notify_down <STRING> | <QUOTED-STRING>
}
real_server:是real_server段開始的標識,用來指定real server節點,後面跟的是real server的真實IP地址和端口,IP與端口之間用空格隔開。
weight:用來配置real server節點的權值。權值大小用數字表示,數字越大,權值越高。設置權值的大小可以爲不同性能的服務器分配不同的負載,爲性能高的服務器設置較高的權值,而爲性能較低的服務器設置相對較低的權值
inhibit_on_failure:表示在檢測到real server節點失效後,把它的“weight”值設置爲0,而不是從IPVS中刪除。
notify_up:此選項與上面介紹過的notify_maser有相同的功能,後跟一個腳本,表示在檢測到real server節點服務處於UP狀態後執行的腳本。
notify_down:表示在檢測到real server節點服務處於DOWN狀態後執行的腳本。
健康檢測段允許多種檢查方式,常見的有HTTP_GET、SSL_GET、TCP_CHECK、SMTP_CHECK、MISC_CHECK。
TCP_CHECK檢測方式示例:
TCP_CHECK {
connect_port 80
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
connect_port:健康檢查的端口,如果無指定,默認是real_server指定的端口。
connect_timeout:表示無響應超時時間,單位是秒,這裏是3秒超時。
nb_get_retry:表示重試次數,這裏是3次。
delay_before_retry:表示重試間隔,這裏是間隔3秒。
HTTP_GET和SSL_GET檢測方式的示例:
HTTP_GET |SSL_GET
{
url {
path /index.html
digest e6c271eb5f017f280cf97ec2f51b02d3
status_code 200
}
connect_port 80
bindto 192.168.12.80
connect_timeout 3
nb_get_retry 3
delay_before_retry 2
}
url:用來指定HTTP/SSL檢查的URL信息,可以指定多個URL。
path:後跟詳細的URL路徑。
digest:SSL檢查後的摘要信息,這些摘要信息可以通過genhash命令工具獲取。例如:genhash -s 192.168.12.80 -p 80 -u /index.html。
status_code:指定HTTP檢查返回正常狀態碼的類型,一般是200。
bindto:表示通過此地址來發送請求對服務器進行健康檢查。
MISC_CHECK檢測方式的示例:
MISC_CHECK
{
misc_path /usr/local/bin/script.sh
misc_timeout 5
! misc_dynamic
}
misc_path:用來指定一個外部程序或者一個腳本路徑。
misc_timeout:設定執行腳本的超時時間。
misc_dynamic:表示是否啓用動態調整real server節點權重,“!misc_dynamic”表示不啓用,相反則表示啓用。