歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux綜合 >> Linux資訊 >> 更多Linux >> 在RedHat上實現集群負載均衡系統(1)

在RedHat上實現集群負載均衡系統(1)

日期:2017/2/27 9:42:04   编辑:更多Linux

負載均衡集群是在應用服務器高負載的情況下,由多台節點提供可伸縮的,高負載的服務器組以保證對外提供良好的服務響應;而LVS就是實現這一功能的技術,它通過使內核支持ipvs來實現LVS/Direct Routing (DR)、LVS/IP Tunnel、LVS/NAT的功能。 1.前言 先來簡單說說負載均衡集群, 它是在應用服務器高負載的情況下,由多台節點提供可伸縮的,高負載的服務器組以保證對外提供良好的服務響應;而LVS就是實現這一功能的技術,它通過使內核支持ipvs來實現LVS/Direct Routing (DR)、LVS/IP Tunnel、LVS/NAT的功能。由於本文的著眼點在於如何利用LVS構建一個負載均衡集群,所以關於負載均衡集群、LVS的詳細內容就不在這裡闡述了,如果大家有興趣可參考如下信息: http://www.Linuxvirtualserver.org/ LVS的官方網站 http://www-900.ibm.com/developerWorks/cn/linux/cluster/lvs/part1/index.sHtml LVS項目介紹 RedHat 7.3/8.0都把ipvs預先編譯到了RedHat發行版的內核中,但使用的ipvs版本比較低是ipvs 0.9.7/1.0.4,從RedHat 9開始ipvs不再被預先編譯到了RedHat發行版的內核中,本文介紹了如何把最新版的ipvs Version 1.0.9編譯到內核中並配置負載均衡集群的方法和一些技巧。 不論是在哪個版本的RedHat Linux上安裝ipvs,工作大都可以分為如下幾步: 圖1給出了最簡單的負載均衡集群的網絡拓撲,這裡需要指出的是以上提到的安裝ipvs/ipvsadm的工作都是在Director上進行的。 圖 1 2.在RedHat Linux上實現ipvs 在RedHat 7.3/8.0已經預先打了ipvs的補丁,在預安裝的內核中已將ipvs編譯成模塊,如果你能在目錄/lib/modules/2.4.18- */kernel/net/ipv4/ipvs中看到ip_vs_*文件,就證明你的系統已經支持ipvs,可以通過如下步驟安裝ipvsadm並配置轉發方式。 但系統預編譯的ipvs是比較早的版本(version 0.9.7/1.0.4),本文把它升級到最新的版本Version 1.0.9。 2.1得到內核源碼和相關的軟件包 這裡需要強調的是由於RedHat 7.3/8.0的內核源碼中已經預先打了ipvs的補丁,所以在安裝ipvs時不能使用RedHat光盤中的Kernel Source,而是需要去下載標准的內核。對於RedHat 9.0,雖然內核中沒有預編譯ipvs,但我還是提倡使用standard kernel,因為所有的ipvs的補丁包都是為標准內核開發的。從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。(在下面的闡述中都以內核linux-2.4.18.tar.gz為例,對於內核linux-2.4.20.tar.gz做法是完全相同的) 2.2把ipvs補丁Patch到內核源碼中 把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文件中默認指定Kernel Source的路徑為:KERNELSOURCE = /usr/src/linux(當然,如果您直接修改makefile中的KERNELSOURCE值,使它指向源碼的目錄也可以)。 把ipvs-1.0.9.tar.gz解壓縮到某個目錄,如/usr/src/source,生成了 /usr/src/source/ipvs-1.0.9目錄;進入/usr/src/source/ipvs-1.0.9,依次執行如下命令:make patchkernel、make installsource,將ipvs的Patch加載到kernel的source中。當然您也可以用linux-2.4.20-ipvs- 1.0.9.patch.gz直接patch到內核中,在/usr/src執行 gzip -cd linux-2.4.20-ipvs-1.0.9.patch.gz,然後進入/usr/src/linux執行patch -p1 < ../linux-2.4.20-ipvs-1.0.9.patch 2.3重新編譯支持ipvs的內核 進入/usr/src/linux目錄,分別執行: make mrproper 為創建新的內和配置做好准備 make menUConfig 進行配置 主界面-->Networking options選項-->IP:Virtual Server Configuration選項(如圖2 圖3) IP:Virtual Server Configuration中的選項設定都用M make dep 檢測是否有相關的軟件包被使用 make clean 為新內核結構准備源目錄樹 make bzImage 創建內核引導映像 make modules、make modules_install 生成模塊 圖2 圖3 注意的問題:如果使用Standard Kernel,在make menuconfig時可能在Networking options選項中找不到IP:Virtual Server Configuration選項,這是因為沒有選中Network packet filtering選項,如圖 4 圖 4IP: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啟用新內核 mkinitrd /boot/initrd-2.4.18ipvs.img 2.4.18 創建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 然後重新啟動,選擇新內核就可支持最新的ipvs 2.5安裝ipvs管理工具ipvsadm 當使用了支持ipvs的內核後,就可以安裝ipvsadm,ipvsadm是設置ipvs轉發方式和調度算法的工具 tar xzvf ipvsadm-1.21.tar.gz cd ./ipvsadm-1.21 make make install 安裝完成後,執行ipvsadm命令,如果有如下信息出現則說明安裝成功了。

到現在為止,支持負載均衡功能的director就配置成功了,接下來我們可以通過ipvsadm來配置一個負載均衡集群。

3.配置LVS,構建負載均衡集群 LVS提供了三種轉發方式:VS/NAT、VS/DR 、VS/TUN, 而不同的轉發方式對後端的realserver要求也不同(如表1)

表 1

構建負載均衡集群的工作主要涉及三個方面(如圖5):

圖 5

3.1修正realserver上可能的arp problem 注意的問題:這裡所說的修正系統的arp problem主要是針對realserver使用linux操作系統,而且轉發方式為VS/DR和VS/TUN的情況。這是因為在使用VS/DR和 VS/TUN的時候,會需要一塊網卡上綁定兩個IP的情況,但linux在kernel 2.2.14以後就將eth0:1的NOARP FLAG關閉,這使得eth0:1僅僅是eth0的別名,任何對eth0:1的操作都對eth0有效,因此如果此時使eth0:1 NOARP,則也使得eth0 NOARP,這樣整個網卡都不會收到數據包,所以要修正系統的arp problem,使eth0:1不響應arp請求,同時eth0仍能接受數據包。有關Arp問題的詳細內容請參見:LVS-HOWTO-arp problem。 由表1可以看出對應不同的轉發方式,realserver上可以使用的操作系統也是不同的,而linux和windows 2000 server則是所有轉發方式都支持的操作系統,作者在本文中也是分別以這兩種操作系統為例予以介紹。 修正realserver上可能的arp problem時,根據轉發方式和操作系統的不同分為如下幾種情況: 3.1.1 VS/NAT方式 不論操作系統選擇linux還是windows 2000 server,對系統不需要做任何修改。 3.1.2 VS/DR和VS/TUN方式 realserver使用linux操作系統,對系統的修改如下: 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)重新編譯內核,修正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進行patch 進入/usr/src/linux目錄,依次執行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)啟用新內核(與2.4節相同) realserver使用windows 2000 server操作系統 不需對系統本身作修改,但要在配置時(圖5中步驟③)屏蔽arp響應,具體方法在3.2.2中介紹。 3.2 配置LVS 對LVS的配置分為在director上的設置和在realserver上的設置,而對於不同的轉發方式:VS/NAT、VS/DR 、VS/TUN,這些設置也有所不同。

負載均衡集群是在應用服務器高負載的情況下,由多台節點提供可伸縮的,高負載的服務器組以保證對外提供良好的服務響應;而LVS就是實現這一功能的技術,它通過使內核支持ipvs來實現LVS/Direct Routing (DR)、LVS/IP Tunnel、LVS/NAT的功能。 1.前言 先來簡單說說負載均衡集群, 它是在應用服務器高負載的情況下,由多台節點提供可伸縮的,高負載的服務器組以保證對外提供良好的服務響應;而LVS就是實現這一功能的技術,它通過使內核支持ipvs來實現LVS/Direct Routing (DR)、LVS/IP Tunnel、LVS/NAT的功能。由於本文的著眼點在於如何利用LVS構建一個負載均衡集群,所以關於負載均衡集群、LVS的詳細內容就不在這裡闡述了,如果大家有興趣可參考如下信息: http://www.linuxvirtualserver.org/ LVS的官方網站 http://www-900.ibm.com/developerWorks/cn/linux/cluster/lvs/part1/index.shtml LVS項目介紹 RedHat 7.3/8.0都把ipvs預先編譯到了RedHat發行版的內核中,但使用的ipvs版本比較低是ipvs 0.9.7/1.0.4,從RedHat 9開始ipvs不再被預先編譯到了RedHat發行版的內核中,本文介紹了如何把最新版的ipvs Version 1.0.9編譯到內核中並配置負載均衡集群的方法和一些技巧。 不論是在哪個版本的RedHat Linux上安裝ipvs,工作大都可以分為如下幾步: 圖1給出了最簡單的負載均衡集群的網絡拓撲,這裡需要指出的是以上提到的安裝ipvs/ipvsadm的工作都是在Director上進行的。 圖 1 2.在RedHat Linux上實現ipvs 在RedHat 7.3/8.0已經預先打了ipvs的補丁,在預安裝的內核中已將ipvs編譯成模塊,如果你能在目錄/lib/modules/2.4.18- */kernel/net/ipv4/ipvs中看到ip_vs_*文件,就證明你的系統已經支持ipvs,可以通過如下步驟安裝ipvsadm並配置轉發方式。 但系統預編譯的ipvs是比較早的版本(version 0.9.7/1.0.4),本文把它升級到最新的版本Version 1.0.9。 2.1得到內核源碼和相關的軟件包 這裡需要強調的是由於RedHat 7.3/8.0的內核源碼中已經預先打了ipvs的補丁,所以在安裝ipvs時不能使用RedHat光盤中的Kernel Source,而是需要去下載標准的內核。對於RedHat 9.0,雖然內核中沒有預編譯ipvs,但我還是提倡使用standard kernel,因為所有的ipvs的補丁包都是為標准內核開發的。從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。(在下面的闡述中都以內核linux-2.4.18.tar.gz為例,對於內核linux-2.4.20.tar.gz做法是完全相同的) 2.2把ipvs補丁Patch到內核源碼中 把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文件中默認指定Kernel Source的路徑為:KERNELSOURCE = /usr/src/linux(當然,如果您直接修改makefile中的KERNELSOURCE值,使它指向源碼的目錄也可以)。 把ipvs-1.0.9.tar.gz解壓縮到某個目錄,如/usr/src/source,生成了 /usr/src/source/ipvs-1.0.9目錄;進入/usr/src/source/ipvs-1.0.9,依次執行如下命令:make patchkernel、make installsource,將ipvs的Patch加載到kernel的source中。當然您也可以用linux-2.4.20-ipvs- 1.0.9.patch.gz直接patch到內核中,在/usr/src執行 gzip -cd linux-2.4.20-ipvs-1.0.9.patch.gz,然後進入/usr/src/linux執行patch -p1 < ../linux-2.4.20-ipvs-1.0.9.patch 2.3重新編譯支持ipvs的內核 進入/usr/src/linux目錄,分別執行: make mrproper 為創建新的內和配置做好准備 make menuconfig 進行配置 主界面-->Networking options選項-->IP:Virtual Server Configuration選項(如圖2 圖3) IP:Virtual Server Configuration中的選項設定都用M make dep 檢測是否有相關的軟件包被使用 make clean 為新內核結構准備源目錄樹 make bzImage 創建內核引導映像 make modules、make modules_install 生成模塊 圖2 圖3 注意的問題:如果使用Standard Kernel,在make menuconfig時可能在Networking options選項中找不到IP:Virtual Server Configuration選項,這是因為沒有選中Network packet filtering選項,如圖 4 圖 4IP: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啟用新內核 mkinitrd /boot/initrd-2.4.18ipvs.img 2.4.18 創建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 然後重新啟動,選擇新內核就可支持最新的ipvs 2.5安裝ipvs管理工具ipvsadm 當使用了支持ipvs的內核後,就可以安裝ipvsadm,ipvsadm是設置ipvs轉發方式和調度算法的工具 tar xzvf ipvsadm-1.21.tar.gz cd ./ipvsadm-1.21 make make install 安裝完成後,執行ipvsadm命令,如果有如下信息出現則說明安裝成功了。

到現在為止,支持負載均衡功能的director就配置成功了,接下來我們可以通過ipvsadm來配置一個負載均衡集群。

3.配置LVS,構建負載均衡集群 LVS提供了三種轉發方式:VS/NAT、VS/DR 、VS/TUN, 而不同的轉發方式對後端的realserver要求也不同(如表1)

表 1

構建負載均衡集群的工作主要涉及三個方面(如圖5):

圖 5

3.1修正realserver上可能的arp problem 注意的問題:這裡所說的修正系統的arp problem主要是針對realserver使用linux操作系統,而且轉發方式為VS/DR和VS/TUN的情況。這是因為在使用VS/DR和 VS/TUN的時候,會需要一塊網卡上綁定兩個IP的情況,但linux在kernel 2.2.14以後就將eth0:1的NOARP FLAG關閉,這使得eth0:1僅僅是eth0的別名,任何對eth0:1的操作都對eth0有效,因此如果此時使eth0:1 NOARP,則也使得eth0 NOARP,這樣整個網卡都不會收到數據包,所以要修正系統的arp problem,使eth0:1不響應arp請求,同時eth0仍能接受數據包。有關Arp問題的詳細內容請參見:LVS-HOWTO-arp problem。 由表1可以看出對應不同的轉發方式,realserver上可以使用的操作系統也是不同的,而linux和windows 2000 server則是所有轉發方式都支持的操作系統,作者在本文中也是分別以這兩種操作系統為例予以介紹。 修正realserver上可能的arp problem時,根據轉發方式和操作系統的不同分為如下幾種情況: 3.1.1 VS/NAT方式 不論操作系統選擇linux還是windows 2000 server,對系統不需要做任何修改。 3.1.2 VS/DR和VS/TUN方式 realserver使用linux操作系統,對系統的修改如下: 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)重新編譯內核,修正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進行patch 進入/usr/src/linux目錄,依次執行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)啟用新內核(與2.4節相同) realserver使用windows 2000 server操作系統 不需對系統本身作修改,但要在配置時(圖5中步驟③)屏蔽arp響應,具體方法在3.2.2中介紹。 3.2 配置LVS 對LVS的配置分為在director上的設置和在realserver上的設置,而對於不同的轉發方式:VS/NAT、VS/DR 、VS/TUN,這些設置也有所不同。




Copyright © Linux教程網 All Rights Reserved