1、Keepalived的安裝過程html
Keepalived的安裝很是簡單,下面經過源碼編譯的方式介紹下Keepalived的安裝過程。首先打開Keepalived的官方網址http://www.keepalived.org,從中能夠下載到各類版本的Keepalived,這裏下載的是keepalived-1.2.12.tar.gz。以操做系統環境Centos6.3爲例,Keepalived安裝步驟以下:算法
[root@keepalived-master app]#tar zxvf keepalived-1.2.12.tar.gz [root@keepalived-master app]#cd keepalived-1.2.12 [root@keepalived-master keepalived-1.2.12]#./configure --sysconf=/etc \ > --with-kernel-dir=/usr/src/kernels/2.6.32-431.5.1.el6.x86_64 [root@keepalived-master keepalived-1.2.12]#make [root@keepalived-master keepalived-1.2.12]#make install [root@keepalived-master keepalived-1.2.12]#ln -s /usr/local/sbin/keepalived /sbin/ [root@keepalived-master keepalived-1.2.12]# chkconfig --add keepalived [root@keepalived-master keepalived-1.2.12]# chkconfig --level 35 keepalived on
在編譯選項中,「--sysconf」指定了Keepalived配置文件的安裝路徑,即路徑爲/etc/Keepalived/Keepalived.conf;「--with-kernel-dir」是個很重要的參數,但這個參數並非要把Keepalived編譯進內核,而是指定使用內核源碼中的頭文件,即include目錄。只有在使用LVS時,才須要用到「--with-kernel-dir」參數,其餘時候是不須要的。bash
在Keepalived輸出的加載模塊信息,其中:服務器
Use IPVS Framework表示使用IPVS框架,也就是負載均衡模塊,後面的「Yes」表示啓用IPVS功能。通常在搭建高可用負載均衡集羣時會啓用IPVS功能,若是隻是使用Keepalived的高可用功能,則不須要啓用IPVS模塊,能夠在編譯Keepalived時經過「--disable-lvs」關閉IPVS功能。網絡
IPVS sync daemon support表示啓用IPVS的同步功能,此模塊通常和IPVS模塊一塊兒使用,若是須要關閉,可在編譯Keepalived時經過「--disable-lvs-syncd」參數實現。session
IPVS use libnl表示使用新版的libnl。libnl是NETLINK的一個實現,若是要使用新版的libnl,須要在系統中安裝libnl和libnl-devel軟件包。app
Use VRRP Framework表示使用VRRP框架,這是實現Keepalived高可用功能必需的模塊。負載均衡
Use VRRP VMAC表示使用基礎VMAC接口的xmit VRRP包,這是Keepalived在1.2.10版本及之後新增的一個功能。框架
至此,Keepalived的安裝介紹完畢。下面開始進入Keepalived配置的講解。ide
2、Keepalived的全局配置
在上節安裝Keepalived的過程當中,指定了Keepalived配置文件的路徑爲/etc/Keepalived/Keepalived.conf,Keepalived的全部配置均在這個配置文件中完成。因爲Keepalived.conf文件中可配置的選項比較多,這裏根據配置文件所實現的功能,將Keepalived配置分爲三類,分別是:全局配置(Global Configuration)、VRRPD配置和LVS配置。下面將主要介紹下Keepalived配置文件中一些經常使用配置選項的含義和用法。
Keepalived的配置文件都是以塊(block)的形式組織的,每一個塊的內容都包含在{}中,以「#」和「!」開頭的行都是註釋。全局配置就是對整個Keepalived都生效的配置,基本內容以下:
! Configuration File for keepalived global_defs { notification_email { dba.gao@gmail.com ixdba@163.com } notification_email_from Keepalived@localhost smtp_server 192.168.200.1 smtp_connect_timeout 30 router_id LVS_DEVEL }
全局配置以「global_defs」做爲標識,在「global_defs」區域內的都是全局配置選項,其中:
notification_email用於設置報警郵件地址,能夠設置多個,每行一個。注意,若是要開啓郵件報警,須要開啓本機的Sendmail服務。
notification_email_from用於設置郵件的發送地址。
smtp_server用於設置郵件的smtp server地址。
smtp_connect_timeout用於設置鏈接smtp server的超時時間。
router_id表示運行Keepalived服務器的一個標識,是發郵件時顯示在郵件主題中的信息。
3、Keepalived的VRRPD配置
VRRPD配置是Keepalived全部配置的核心,主要用來實現Keepalived的高可用功能。從結構上來看,VRRPD配置又可分爲VRRP同步組配置和VRRP實例配置。
這裏首先介紹同步組實現的主要功能。同步組是相對於多個VRRP實例而言的,在多個VRRP實例的環境中,每一個VRRP實例所對應的網絡環境會有所不一樣,假設一個實例處於網段A,另外一個實例處於網段B,而若是VRRPD只配置了A網段的檢測,那麼當B網段主機出現故障時,VRRPD會認爲自身仍處於正常狀態,進而不會進行主備節點的切換,這樣問題就出現了。同步組就是用來解決這個問題的,將全部VRRP實例都加入到同步組中,這樣任何一個實例出現問題,都會致使Keepalived進行主備切換。
下面是兩個同步組的配置樣例:
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 } }
其中,G1同步組包含VI_一、VI_二、VI_5三個VRRP實例,G2同步組包含VI_三、VI_4兩個VRRP實例。這五個實例將在vrrp_instance段進行定義。另外,在vrrp_sync_group段中還出現了notify_master、notify_backup、notify_fault和notify_stop四個選項,這是Keepalived配置中的一個通知機制,也是Keepalived包含的四種狀態。下面介紹每一個選項的含義。
notify_master:指定當Keepalived進入Master狀態時要執行的腳本,這個腳本能夠是一個狀態報警腳本,也能夠是一個服務管理腳本。Keepalived容許腳本傳入參數,所以靈活性很強。
notify_backup:指定當Keepalived進入Backup狀態時要執行的腳本,同理,這個腳本能夠是一個狀態報警腳本,也能夠是一個服務管理腳本。
notify_fault:指定當Keepalived進入Fault狀態時要執行的腳本,腳本功能與前兩個相似。
notify_stop:指定當Keepalived程序終止時須要執行的腳本。
下面正式進入VRRP實例的配置,也就是配置Keepalived的高可用功能。VRRP實例段主要用來配置節點角色(主或從)、實例綁定的網絡接口、節點間驗證機制、集羣服務IP等。下面是實例VI_1的一個配置樣例。
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 qwaszx } 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配置以「vrrp_instance」做爲標識,在這個實例中包含了若干配置選項,分別介紹以下:
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地址,每行一個。之因此稱爲漂移IP地址,是由於Keepalived切換到Master狀態時,這個IP地址會自動添加到系統中,而切換到BACKUP狀態時,這些IP又會自動從系統中刪除。Keepalived經過「ip address add」命令的形式將VIP添加進系統中。要查看系統中添加的VIP地址,能夠經過「ip add」命令實現。「virtual_ipaddress」段中添加的IP形式能夠多種多樣,例如能夠寫成 「192.168.16.189/24 dev eth1」 這樣的形式,而Keepalived會使用IP命令「ip addr add 192.168.16.189/24 dev eth1」將IP信息添加到系統中。所以,這裏的配置規則和IP命令的使用規則是一致的。
virtual_routes和virtual_ipaddress段同樣,用來設置在切換時添加或刪除相關路由信息。使用方法和例子能夠參考上面的示例。經過「ip route」命令能夠查看路由信息是否添加成功,此外,也能夠經過上面介紹的notify_master選項來代替virtual_routes實現相同的功能。
nopreempt設置的是高可用集羣中的不搶佔功能。在一個HA Cluster中,若是主節點死機了,備用節點會進行接管,主節點再次正常啓動後通常會自動接管服務。這種來回切換的操做,對於實時性和穩定性要求不高的業務系統來講,仍是能夠接受的,而對於穩定性和實時性要求很高的業務系統來講,不建議來回切換,畢竟服務的切換存在必定的風險和不穩定性,在這種狀況下,就須要設置nopreempt這個選項了。設置nopreempt能夠實現主節點故障恢復後再也不切回到主節點,讓服務一直在備用節點工做,直到備用節點出現故障纔會進行切換。在使用不搶佔時,只能在「state」狀態爲「BACKUP」的節點上設置,並且這個節點的優先級必須高於其餘節點。
preemtp_delay用於設置搶佔的延時時間,單位是秒。有時候系統啓動或重啓以後網絡須要通過一段時間才能正常工做,在這種狀況下進行發生主備切換是不必的,此選項就是用來設置這種狀況發生的時間間隔。在此時間內發生的故障將不會進行切換,而若是超過「preemtp_delay」指定的時間,而且網絡狀態異常,那麼纔開始進行主備切換。
4、Keepalived的LVS配置
因爲Keepalived屬於LVS的擴展項目,所以, Keepalived能夠與LVS無縫整合,輕鬆搭建一套高性能的負載均衡集羣系統。下面介紹下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:會話保持時間,單位是秒。這個選項對動態網頁是很是有用的,爲集羣系統中的session共享提供了一個很好的解決方案。有了這個會話保持功能,用戶的請求會一直分發到某個服務節點,直到超過這個會話的保持時間。須要注意的是,這個會話保持時間是最大無響應超時時間,也就是說,用戶在操做動態頁面時,若是在50秒內沒有執行任何操做,那麼接下來的操做會被分發到另外的節點,可是若是用戶一直在操做動態頁面,則不受50秒的時間限制。
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健康檢查方式能夠經過執行一個外部程序來判斷real server節點的服務狀態,使用很是靈活。如下是經常使用的幾個選項的含義。
misc_path:用來指定一個外部程序或者一個腳本路徑。
misc_timeout:設定執行腳本的超時時間。
misc_dynamic:表示是否啓用動態調整real server節點權重,「!misc_dynamic」表示不啓用,相反則表示啓用。在啓用這功能後,Keepalived的healthchecker進程將經過退出狀態碼來動態調整real server節點的「weight」值,若是返回狀態碼爲0,表示健康檢查正常,real server節點權重保持不變;若是返回狀態碼爲1,表示健康檢查失敗,那麼就將real server節點權重設置爲0;若是返回狀態碼爲2~255之間任意數值,表示健康檢查正常,但real server節點的權重將被設置爲返回狀態碼減2,例如返回狀態碼爲10,real server節點權重將被設置爲8(10-2)。
到這裏爲止,Keepalived配置文件中經常使用的選項已經介紹完畢,在默認狀況下,Keepalived在啓動時會查找/etc/Keepalived/Keepalived.conf配置文件,若是配置文件放在其餘路徑下,經過「Keepalived -f」參數指定配置文件的路徑便可。
在配置Keepalived.conf時,須要特別注意配置文件的語法格式,由於Keepalived在啓動時並不檢測配置文件的正確性,即便沒有配置文件,Keepalived也照樣可以啓動,因此必定要保證配置文件正確。