1.前言 先來簡單說說負(fù)載均衡集群, 它是在應(yīng)用
服務(wù)器高負(fù)載的情況下,由多臺節(jié)點提供可伸縮的,高負(fù)載的
服務(wù)器組以保證對外提供良好的服務(wù)響應(yīng);而LVS就是實現(xiàn)這一功能的技術(shù),它通過使內(nèi)核支持ipvs來實現(xiàn)LVS/Direct Routing (DR)、LVS/IP Tunnel、LVS/NAT的功能。由于本文的著眼點在于如何利用LVS構(gòu)建一個負(fù)載均衡集群,所以關(guān)于負(fù)載均衡集群、LVS的詳細(xì)內(nèi)容就不在這里闡述了,如果大家有興趣可參考如下信息:
http://www.
linuxvirtualserver.org/ LVS的官方網(wǎng)站
http://www-900.ibm.com/developerWorks/cn/
linux/cluster/lvs/part1/index.shtml LVS項目介紹
RedHat 7.3/8.0都把ipvs預(yù)先編譯到了RedHat發(fā)行版的內(nèi)核中,但使用的ipvs版本比較低是ipvs 0.9.7/1.0.4,從RedHat 9開始ipvs不再被預(yù)先編譯到了RedHat發(fā)行版的內(nèi)核中,本文介紹了如何把最新版的ipvs Version 1.0.9編譯到內(nèi)核中并配置負(fù)載均衡集群的方法和一些技巧。
不論是在哪個版本的RedHat Linux上安裝ipvs,工作大都可以分為如下幾步:
圖1給出了最簡單的負(fù)載均衡集群的網(wǎng)絡(luò)拓?fù)?,這里需要指出的是以上提到的安裝ipvs/ipvsadm的工作都是在Director上進(jìn)行的。
2.在RedHat Linux上實現(xiàn)ipvs 在RedHat 7.3/8.0已經(jīng)預(yù)先打了ipvs的補丁,在預(yù)安裝的內(nèi)核中已將ipvs編譯成模塊,如果你能在目錄/lib/modules/2.4.18-*/kernel/net/ipv4/ipvs中看到ip_vs_*文件,就證明你的系統(tǒng)已經(jīng)支持ipvs,可以通過如下步驟安裝ipvsadm并配置轉(zhuǎn)發(fā)方式。
但系統(tǒng)預(yù)編譯的ipvs是比較早的版本(version 0.9.7/1.0.4),本文把它升級到最新的版本Version 1.0.9。
2.1得到內(nèi)核源碼和相關(guān)的軟件包
這里需要強調(diào)的是由于RedHat 7.3/8.0的內(nèi)核源碼中已經(jīng)預(yù)先打了ipvs的補丁,所以在安裝ipvs時不能使用RedHat光盤中的Kernel Source,而是需要去
下載標(biāo)準(zhǔn)的內(nèi)核。對于RedHat 9.0,雖然內(nèi)核中沒有預(yù)編譯ipvs,但我還是提倡使用standard kernel,因為所有的ipvs的補丁包都是為標(biāo)準(zhǔn)內(nèi)核開發(fā)的。從kernel ftp site得到standard kernel linux-2.4.18.tar.gz(RedHat 7.3/8.0), linux-2.4.20.tar.gz (RedHat 9.0), 從lvs homepage 得到ipvs-1.0.9.tar.gz、ipvsadm-1.21.tar.gz。(在下面的闡述中都以內(nèi)核linux-2.4.18.tar.gz為例,對于內(nèi)核linux-2.4.20.tar.gz做法是完全相同的)
2.2把ipvs補丁Patch到內(nèi)核源碼中
把linux-2.4.18.tar.gz解壓到/usr/src目錄,生成了/usr/src/linux目錄;如果生成的是/usr/src/linux-2.4.18*目錄,則要在/usr/src下建立一個連接 ln –s linux-2.4.18* linux,因為在ipvs-1.0.9中的makefile文件中默認(rèn)指定Kernel Source的路徑為:KERNELSOURCE = /usr/src/linux(當(dāng)然,如果您直接修改makefile中的KERNELSOURCE值,使它指向源碼的目錄也可以)。
把ipvs-1.0.9.tar.gz解壓縮到某個目錄,如/usr/src/source,生成了/usr/src/source/ipvs-1.0.9目錄;進(jìn)入/usr/src/source/ipvs-1.0.9,依次執(zhí)行如下命令:make patchkernel、make installsource,將ipvs的Patch加載到kernel的source中。當(dāng)然您也可以用linux-2.4.20-ipvs-1.0.9.patch.gz直接patch到內(nèi)核中,在/usr/src執(zhí)行 gzip -cd linux-2.4.20-ipvs-1.0.9.patch.gz,然后進(jìn)入/usr/src/linux執(zhí)行patch -p1 < ../linux-2.4.20-ipvs-1.0.9.patch
2.3重新編譯支持ipvs的內(nèi)核
進(jìn)入/usr/src/linux目錄,分別執(zhí)行:
make mrproper 為創(chuàng)建新的內(nèi)和配置做好準(zhǔn)備
make menuconfig 進(jìn)行配置
主界面-->Networking options選項-->IP:Virtual Server Configuration選項(如圖2 圖3)
IP:Virtual Server Configuration中的選項設(shè)定都用M
make dep 檢測是否有相關(guān)的軟件包被使用
make clean 為新內(nèi)核結(jié)構(gòu)準(zhǔn)備源目錄樹
make bzImage 創(chuàng)建內(nèi)核引導(dǎo)映像
make modules、make modules_install 生成模塊
圖2 圖3 注意的問題:如果使用Standard Kernel,在make menuconfig時可能在Networking options選項中找不到IP:Virtual Server Configuration選項,這是因為沒有選中Network packet filtering選項,如圖 4
圖 4 IP:Virtual Server Configuration選項是基于Network packet filtering選項的。
技巧:在make menuconfig時,我們面對眾多的選項常常不知道該如何選擇,此時可以把安裝時的配置文件copy到/usr/src/linux中:cp /boot/config-2.4.* /usr/src/linux/.config,再用make menuconfig編譯,它會讀取.config中原來的配置信息,這樣只要對IP:Virtual Server Configuration中的新選項選擇即可。
2.4啟用新內(nèi)核
mkinitrd /boot/initrd-2.4.18ipvs.img 2.4.18 創(chuàng)建initrd映像
cp /usr/src/linux/arch/i386/boot/bzImage /boot/vmlinuz-2.4.18ipvs
cd /boot
rm vmlinuz
ln –s vmlinuz-2.4.18ipvs vmlinuz
cp /usr/src/linux/System.map /boot/System.map-2.4.18ipvs
cd /boot
rm System.map
ln –s System.map-2.4.18ipvs System.map
vi /etc/lilo.conf
添加啟動選項:
image=/boot/vmlinuz-2.4.18ipvs
label=linux-ipvs
initrd=/boot/initrd-2.4.18ipvs.img
read-only
root=/dev/hda3
lilo
然后重新啟動,選擇新內(nèi)核就可支持最新的ipvs
2.5安裝ipvs管理工具ipvsadm
當(dāng)使用了支持ipvs的內(nèi)核后,就可以安裝ipvsadm,ipvsadm是設(shè)置ipvs轉(zhuǎn)發(fā)方式和調(diào)度算法的工具
tar xzvf ipvsadm-1.21.tar.gz
cd ./ipvsadm-1.21
make
make install
安裝完成后,執(zhí)行ipvsadm命令,如果有如下信息出現(xiàn)則說明安裝成功了。
到現(xiàn)在為止,支持負(fù)載均衡功能的director就配置成功了,接下來我們可以通過ipvsadm來配置一個負(fù)載均衡集群。
3.配置LVS,構(gòu)建負(fù)載均衡集群 LVS提供了三種轉(zhuǎn)發(fā)方式:VS/NAT、VS/DR 、VS/TUN, 而不同的轉(zhuǎn)發(fā)方式對后端的realserver要求也不同(如表1)
表 1 構(gòu)建負(fù)載均衡集群的工作主要涉及三個方面(如圖5):
3.1修正realserver上可能的arp problem
注意的問題:這里所說的修正系統(tǒng)的arp problem主要是針對realserver使用linux操作系統(tǒng),而且轉(zhuǎn)發(fā)方式為VS/DR和VS/TUN的情況。這是因為在使用VS/DR和VS/TUN的時候,會需要一塊網(wǎng)卡上綁定兩個IP的情況,但linux在kernel 2.2.14以后就將eth0:1的NOARP FLAG關(guān)閉,這使得eth0:1僅僅是eth0的別名,任何對eth0:1的操作都對eth0有效,因此如果此時使eth0:1 NOARP,則也使得eth0 NOARP,這樣整個網(wǎng)卡都不會收到數(shù)據(jù)包,所以要修正系統(tǒng)的arp problem,使eth0:1不響應(yīng)arp請求,同時eth0仍能接受數(shù)據(jù)包。有關(guān)Arp問題的詳細(xì)內(nèi)容請參見:LVS-HOWTO-arp problem。
由表1可以看出對應(yīng)不同的轉(zhuǎn)發(fā)方式,realserver上可以使用的操作系統(tǒng)也是不同的,而linux和windows 2000 server則是所有轉(zhuǎn)發(fā)方式都支持的操作系統(tǒng),作者在本文中也是分別以這兩種操作系統(tǒng)為例予以介紹。
修正realserver上可能的arp problem時,根據(jù)轉(zhuǎn)發(fā)方式和操作系統(tǒng)的不同分為如下幾種情況:
3.1.1 VS/NAT方式
不論操作系統(tǒng)選擇linux還是windows 2000 server,對系統(tǒng)不需要做任何修改。
3.1.2 VS/DR和VS/TUN方式
realserver使用linux操作系統(tǒng),對系統(tǒng)的修改如下:
1) 下載所需的軟件包
從kernel ftp site得到standard kernel linux-2.4.18.tar.gz,;從Julian's patches and software page得到hidden-2.4.5-1.diff
2)重新編譯內(nèi)核,修正arp problem
把linux-2.4.18.tar.gz解壓倒/usr/src目錄,生成了/usr/src/linux目錄;(如果生成的是/usr/src/linux-2.4.18*目錄,則要在/usr/src下建立一個連接 ln –s linux-2.4.18* linux)
把hidden-2.4.5-1.diff放到/usr/src/linux下,用命令patch -p1 < hidden-2.4.5-1.diff對kernel進(jìn)行patch
進(jìn)入/usr/src/linux目錄,依次執(zhí)行make mrproper、make menuconfig(可以把安裝時的配置文件copy到/usr/src/linux中:cp /boot/config-2.4.* /usr/src/linux/.config,再編譯)、make dep、 make clean、make bzImage、make modules、make modules_install
3)啟用新內(nèi)核(與2.4節(jié)相同)
realserver使用windows 2000 server操作系統(tǒng)
不需對系統(tǒng)本身作修改,但要在配置時(圖5中步驟③)屏蔽arp響應(yīng),具體方法在3.2.2中介紹。
3.2 配置LVS
對LVS的配置分為在director上的設(shè)置和在realserver上的設(shè)置,而對于不同的轉(zhuǎn)發(fā)方式:VS/NAT、VS/DR 、VS/TUN,這些設(shè)置也有所不同。
3.2.1使用VS/NAT方式
1)網(wǎng)絡(luò)拓?fù)?如圖6)
2)Director上執(zhí)行的設(shè)置(以Telnet服務(wù), 輪叫(rr)策略為例)
3)Realserver上的設(shè)置
?、攀褂肔inux操作系統(tǒng),執(zhí)行如下命令
?、剖褂脀indows 2000 server操作系統(tǒng),則只要把默認(rèn)網(wǎng)關(guān)設(shè)置成192.168.1.9
3.2.2使用VS/DR方式
1)網(wǎng)絡(luò)拓?fù)洌ㄈ鐖D7)
2)Director上執(zhí)行的設(shè)置(以Telnet服務(wù), 輪叫(rr)策略為例)
3)Realserver上的設(shè)置
⑴使用Linux操作系統(tǒng)(patch過hidden-2.4.5-1.diff),執(zhí)行如下命令
?、剖褂脀indows 2000 server操作系統(tǒng)
3.2.3使用VS/TUN方式
1)網(wǎng)絡(luò)拓?fù)洌ㄈ鐖D8)
2)Director上執(zhí)行的設(shè)置(以Telnet服務(wù), 輪叫(rr)策略為例)
3)Realserver上的設(shè)置
?、攀褂肔inux操作系統(tǒng)(patch過hidden-2.4.5-1.diff),執(zhí)行如下命令
⑵使用windows 2000 server操作系統(tǒng)
技巧:在上文設(shè)置過程中給出的命令都可以改寫成符合init語法的標(biāo)準(zhǔn)腳本,并加入到/etc/init.d/rc.local中,這樣在每次系統(tǒng)啟動時都可以自動運行進(jìn)行設(shè)置了。
4.總結(jié)
本文中所討論的負(fù)載均衡其實只是集群應(yīng)用中的一個方面,其它的集群應(yīng)用還包括高性能計算集群、高可用性集群等,而每種應(yīng)用都涉及到很多具體的技術(shù),希望能和大家共同交流,一同推動集群技術(shù)的應(yīng)用和發(fā)展。