一、 LVS簡(jiǎn)介
LVS是Linux Virtual Server的簡(jiǎn)稱,也就是Linux虛擬服務(wù)器, 是一個(gè)由章文嵩博士發(fā)起的自由軟件項(xiàng)目,它的官方站點(diǎn)是www.。現(xiàn)在LVS已經(jīng)是 Linux標(biāo)準(zhǔn)內(nèi)核的一部分,在Linux2.4內(nèi)核以前,使用LVS時(shí)必須要重新編譯內(nèi)核以支持LVS功能模塊,但是從Linux2.4內(nèi)核以后,已經(jīng)完全內(nèi)置了LVS的各個(gè)功能模塊,無(wú)需給內(nèi)核打任何補(bǔ)丁,可以直接使用LVS提供的各種功能。使用LVS技術(shù)要達(dá)到的目標(biāo)是:通過(guò)LVS提供的負(fù)載均衡技術(shù)和Linux操作系統(tǒng)實(shí)現(xiàn)一個(gè)高性能、高可用的服務(wù)器群集,它具有良好可靠性、可擴(kuò)展性和可操作性。從而以低廉的成本實(shí)現(xiàn)最優(yōu)的服務(wù)性能。 關(guān)于LVS的安裝與介紹,在前面的文章中已經(jīng)有過(guò)深入介紹,這里不再講述。 本文講解的環(huán)境如下: 操作系統(tǒng):統(tǒng)一采用Centos5.3版本,地址規(guī)劃如下:
圖1中的VIP指的是虛擬IP地址,還可以叫做LVS集群的服務(wù)IP,在DR、TUN模式中,數(shù)據(jù)包是直接返回給用戶的,所以,在Director Server上以及集群的每個(gè)節(jié)點(diǎn)上都需要設(shè)置這個(gè)地址。此IP在Real Server上一般綁定在回環(huán)地址上,例如lo:0,同樣,在Director Server上,虛擬IP綁定在真實(shí)的網(wǎng)絡(luò)接口設(shè)備上,例如eth0:0。
各個(gè)Real Server可以是在同一個(gè)網(wǎng)段內(nèi),也可以是相互獨(dú)立的網(wǎng)段,還可以是分布在internet上的多個(gè)服務(wù)器. LVS+Keepalived高可用負(fù)載均衡集群拓?fù)浣Y(jié)構(gòu)如圖2所示:
二、安裝Keepalived
keepalived起初是為L(zhǎng)VS設(shè)計(jì)的,專(zhuān)門(mén)用來(lái)監(jiān)控集群系統(tǒng)中各個(gè)服務(wù)節(jié)點(diǎn)的狀態(tài),后來(lái)又加入了VRRP的功能,VRRP是Virtual Router Redundancy Protocol(虛擬路由器冗余協(xié)議)的縮寫(xiě),VRRP出現(xiàn)的目的就是為了解決靜態(tài)路由出現(xiàn)的單點(diǎn)故障問(wèn)題,它能夠保證網(wǎng)絡(luò)的不間斷、穩(wěn)定的運(yùn)行。所以,keepalived一方面具有服務(wù)器健康檢測(cè)功能,另一方面也具有HA cluster功能。 Keepalived的官方站點(diǎn)是http://www.,可以在這里下載到各種版本,我們這里下載的是keepalived-1.1.19.tar.gz,安裝步驟如下: [root@DR1 ~]#tar zxvf keepalived-1.1.19.tar.gz [root@DR1 ~]#cd keepalived-1.1.19 [root@DR1 keepalived-1.1.19]#./configure --sysconf=/etc \ > --with-kernel-dir=/usr/src/kernels/2.6.18-8.el5-i686 [root@DR1 keepalived-1.1.19]#make [root@DR1 keepalived-1.1.19]#make install [root@DR1 keepalived-1.1.19]#ln -s /usr/local/sbin/keepalived /sbin/ 在編譯選項(xiàng)中,“--sysconf”指定了Keepalived配置文件的安裝路徑,即路徑為/etc/Keepalived/Keepalived.conf,“--with-kernel-dir”這是個(gè)很重要的參數(shù),但這個(gè)參數(shù)并不是要把Keepalived編譯進(jìn)內(nèi)核,而是指定使用內(nèi)核源碼里面的頭文件,就是include目錄。如果要使用LVS時(shí),才需要用到此參數(shù),否則是不需要的. 三、配置Keepalived Keepalived的配置非常簡(jiǎn)單,僅僅需要一個(gè)配置文件即可完成HA cluster和lvs服務(wù)節(jié)點(diǎn)監(jiān)控功能,Keepalived的安裝已經(jīng)在上面章節(jié)進(jìn)行了介紹,在通過(guò)Keepalived搭建高可用的LVS集群實(shí)例中,主、備Director Server都需要安裝Keepalived軟件,安裝成功后,默認(rèn)的配置文件路徑為/etc/Keepalived/Keepalived.conf。一個(gè)完整的keepalived配置文件,有三個(gè)部分組成,分別是全局定義部分、vrrp實(shí)例定義部分以及虛擬服務(wù)器定義部分,下面詳細(xì)介紹下這個(gè)配置文件中每個(gè)選項(xiàng)的詳細(xì)含義和用法: #全局定義部分 global_defs { notification_email { dba.gao@gmail.com #設(shè)置報(bào)警郵件地址,可以設(shè)置多個(gè),每行一個(gè)。注意,如果要開(kāi)啟郵件報(bào)警,需要開(kāi)啟本機(jī)的sendmail服務(wù)。 ixdba@163.com } notification_email_from Keepalived@localhost #設(shè)置郵件的發(fā)送地址。 smtp_server 192.168.200.1 #設(shè)置smtp server地址。 smtp_connect_timeout 30 #設(shè)置連接smtp服務(wù)器超時(shí)時(shí)間。 router_id LVS_MASTER #運(yùn)行Keepalived服務(wù)器的一個(gè)標(biāo)識(shí)。發(fā)郵件時(shí)顯示在郵件標(biāo)題中的信息 }
#vrrp實(shí)例定義部分
vrrp_instance VI_1 { state MASTER #指定Keepalived的角色,MASTER表示此主機(jī)是主用服務(wù)器,BACKUP表示是備用服務(wù)器。 interface eth0 #指定HA監(jiān)測(cè)網(wǎng)絡(luò)的接口。 virtual_router_id 51 #虛擬路由標(biāo)識(shí),這個(gè)標(biāo)識(shí)是一個(gè)數(shù)字,并且同一個(gè)vrrp實(shí)例使用唯一的標(biāo)識(shí),即同一個(gè)vrrp_instance下,MASTER和BACKUP必須是一致的。 priority 100 #定義優(yōu)先級(jí),數(shù)字越大,優(yōu)先級(jí)越高,在一個(gè)vrrp_instance下,MASTER的優(yōu)先級(jí)必須大于BACKUP的優(yōu)先級(jí)。 advert_int 1 #設(shè)定MASTER與BACKUP負(fù)載均衡器之間同步檢查的時(shí)間間隔,單位是秒。 authentication { #設(shè)定驗(yàn)證類(lèi)型和密碼。 auth_type PASS #設(shè)置驗(yàn)證類(lèi)型,主要有PASS和AH兩種。 auth_pass 1111 #設(shè)置驗(yàn)證密碼,在一個(gè)vrrp_instance下,MASTER與BACKUP必須使用相同的密碼才能正常通信。 } virtual_ipaddress { #設(shè)置虛擬IP地址,可以設(shè)置多個(gè)虛擬IP地址,每行一個(gè)。 192.168.12.135 } } #虛擬服務(wù)器定義部分 virtual_server 192.168.12.135 80 { #設(shè)置虛擬服務(wù)器,需要指定虛擬ip地址和服務(wù)端口,ip與端口之間用空格隔開(kāi)。 delay_loop 6 #設(shè)置健康檢查時(shí)間,單位是秒。 lb_algo rr #設(shè)置負(fù)載調(diào)度算法,這里設(shè)置為rr,即輪詢算法。 lb_kind DR #設(shè)置LVS實(shí)現(xiàn)負(fù)載均衡的機(jī)制,可以有NAT、TUN和DR三個(gè)模式可選。 persistence_timeout 50 #會(huì)話保持時(shí)間,單位是秒,這個(gè)選項(xiàng)對(duì)于動(dòng)態(tài)網(wǎng)頁(yè)是非常有用的,為集群系統(tǒng)中session共享提供了一個(gè)很好的解決方案。有了這個(gè)會(huì)話保持功能,用戶的請(qǐng)求會(huì)被一直分發(fā)到某個(gè)服務(wù)節(jié)點(diǎn),直到超過(guò)這個(gè)會(huì)話保持時(shí)間。需要注意的是,這個(gè)會(huì)話保持時(shí)間,是最大無(wú)響應(yīng)超時(shí)時(shí)間,也就是說(shuō)用戶在操作動(dòng)態(tài)頁(yè)面時(shí),如果在50秒內(nèi)沒(méi)有執(zhí)行任何操作,那么接下來(lái)的操作會(huì)被分發(fā)到另外節(jié)點(diǎn),但是如果一直在操作動(dòng)態(tài)頁(yè)面,則不受50秒的時(shí)間限制。 protocol TCP #指定轉(zhuǎn)發(fā)協(xié)議類(lèi)型,有tcp和udp兩種。 real_server 192.168.12.246 80 { #配置服務(wù)節(jié)點(diǎn)1,需要指定real server的真實(shí)IP地址和端口,ip與端口之間用空格隔開(kāi)。 weight 3 #配置服務(wù)節(jié)點(diǎn)的權(quán)值,權(quán)值大小用數(shù)字表示,數(shù)字越大,權(quán)值越高,設(shè)置權(quán)值的大小可以為不同性能的服務(wù)器分配不同的負(fù)載,可以對(duì)性能高的服務(wù)器設(shè)置較高的權(quán)值,而對(duì)性能較低的服務(wù)器設(shè)置相對(duì)較低的權(quán)值,這樣就合理的利用和分配了系統(tǒng)資源。 TCP_CHECK { #realserve的狀態(tài)檢測(cè)設(shè)置部分,單位是秒 connect_timeout 10 #10秒無(wú)響應(yīng)超時(shí) nb_get_retry 3 #重試次數(shù) delay_before_retry 3 #重試間隔 } } real_server 192.168.12.237 80 { #配置服務(wù)節(jié)點(diǎn)2 weight 1 TCP_CHECK { connect_timeout 3 nb_get_retry 3 delay_before_retry 3 } } } 在配置Keepalived.conf時(shí),需要特別注意配置文件的語(yǔ)法格式,因?yàn)镵eepalived在啟動(dòng)時(shí)并不檢測(cè)配置文件的正確性,即使沒(méi)有配置文件,Keepalived也照樣能啟動(dòng)起來(lái),因而配置文件一定要正確。 在默認(rèn)情況下,Keepalived在啟動(dòng)時(shí)會(huì)查找/etc/Keepalived/Keepalived.conf配置文件,如果你的配置文件放在了其它路徑下,可以通過(guò)“Keepalived -f”參數(shù)指定你所在的配置文件路徑即可。 Keepalived.conf配置完畢后,將此文件拷貝到備用Director Server對(duì)應(yīng)的路徑下,然后做兩個(gè)簡(jiǎn)單的修改即可: 將“state MASTER”更改為“state BACKUP” 將priority 100更改為一個(gè)較小的值,這里改為“priority 80” 最后,還要配置集群的Real server節(jié)點(diǎn),以達(dá)到與Director Server相互廣播通信并忽略arp的目的,腳本的內(nèi)容已經(jīng)在前面文章中進(jìn)行過(guò)介紹,這里不做解釋。 |
|