高性能集羣軟件Keepalived之安裝配置篇

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也照樣可以啓動,因此必定要保證配置文件正確。

相關文章
相關標籤/搜索