當前位置:文思屋>社會工作>IT認證>

Keepalived的安裝配置

文思屋 人氣:2.87W

Keepalived是Linux下一個輕量級的高可用解決方案,它與HeartBeat、RoseHA實現的功能類似,都可以實現服務或者網路的高可用,但是又有差別。下面小編準備了關於Keepalived安裝和配置的文章,提供給大家參考!

Keepalived的安裝配置

一、Keepalived的安裝過程

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”引數,其他時候是不需要的。

在Keepalived輸出的載入模組資訊,其中:

? Use IPVS Framework表示使用IPVS框架,也就是負載均衡模組,後面的“Yes”表示啟用IPVS功能。一般在搭建高可用負載均衡叢集時會啟用IPVS功能,如果只是使用Keepalived的高可用功能,則不需要啟用IPVS模組,可以在編譯Keepalived時通過“--disable-lvs”關閉IPVS功能。

? IPVS sync daemon support表示啟用IPVS的同步功能,此模組一般和IPVS模組一起使用,如果需要關閉,可在編譯Keepalived時通過“--disable-lvs-syncd”引數實現。

? IPVS use libnl表示使用新版的libnl。libnl是NETLINK的一個實現,如果要使用新版的libnl,需要在系統中安裝libnl和libnl-devel軟體包。

? Use VRRP Framework表示使用VRRP框架,這是實現Keepalived高可用功能必需的模組。

? Use VRRP VMAC表示使用基礎VMAC介面的xmit VRRP包,這是Keepalived在1.2.10版本及以後新增的一個功能。

至此,Keepalived的安裝介紹完畢。下面開始進入Keepalived配置的講解。

二、 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 {

[email protected]

[email protected]

}

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伺服器的一個標識,是發郵件時顯示在郵件主題中的資訊。

三、 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_1、VI_2、VI_5三個VRRP例項,G2同步組包含VI_3、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

garp_master_delay 10

track_interface {

eth0

eth1

}

authentication {

auth_type PASS

auth_pass qwaszx

}

virtual_ipaddress {

#/ brd dev scope label

192.168.200.16

192.168.200.17 dev eth1

192.168.200.18 dev eth2

}

virtual_routes {

#src [to] / via|gw dev 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”指定的時間,並且網路狀態異常,那麼才開始進行主備切換。

四、 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

protocol TCP

ha_suspend

virtualhost

sorry_server

下面介紹每個選項的含義。

? 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 |

notify_down |

}

下面介紹每個選項的含義。

? 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 /

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 /。

? 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也照樣能夠啟動,所以一定要保證配置檔案正確。

TAGS:配置 安裝