一、集群和Linux上的集群解決方案
集群系統(Cluster)主要解決下面幾個問題:
高可靠性(HA)。利用集群管理軟件,當主服務器故障時,備份服務器能夠自動接管主服務器的工作,并及時切換過去,以實現對用戶的不間斷服務。
高性能計算(HP)。即充分利用集群中的每一臺計算機的資源,實現復雜運算的并行處理,通常用于科學計算領域,比如基因分析,化學分析等。
負載平衡。即把負載壓力根據某種算法合理分配到集群中的每一臺計算機上,以減輕主服務器的壓力,降低對主服務器的硬件和軟件要求。
在實際應用中,最常見的情況是利用集群解決負載平衡問題,比如用于提供WWW服務。在這里主要展示如何使用LVS(Linux Virtial Server)來實現實用的WWW負載平衡集群系統。
二、LVS簡介
LVS 是章文嵩博士發起和領導的優秀的集群解決方案,許多商業的集群產品,比如RedHat的Piranha,TurboLinux公司的Turbo Cluster等,都是基于LVS的核心代碼的。在現實的應用中,LVS得到了大量的部署,請參考http: //www.linuxvirtualserver.org/deployment.html
關于Linux LVS的工作原理和更詳細的信息,請參考http://www.linuxvirtualserver.org。
三、LVS配置實例
通過Linux LVS,實現WWW,Telnet服務的負載平衡。這里實現Telnet集群服務僅為了測試上的方便。
LVS有三種負載平衡方式,NAT(Network Address Translation),DR(Direct Routing),IP Tunneling。其中,最為常用的是DR方式,因此這里只說明DR(Direct Routing)方式的LVS負載平衡。
1、網絡拓撲結構。
如圖1所示,為測試方便,4臺機器處于同一網段內,通過一交換機或者集線器相連。實際的應用中,最好能夠將虛擬服務器vs1和真實服務器rs1, rs2置于于不同的網段上,即提高了性能,也加強了整個集群系統的安全性。
2、服務器的軟硬件配置
首先說明,雖然本文的測試環境中用的是3臺相同配置的服務器,但LVS并不要求集群中的服務器規格劃一,相反,可以根據服務器的不同配置和負載情況,調整負載分配策略,充分利用集群環境中的每一臺服務器。
這3臺服務器中,vs1作為虛擬服務器(即負載平衡服務器),負責將用戶的訪問請求轉發到集群內部的rs1,rs2,然后由rs1,rs2分別處理。
client為客戶端測試機器,可以為任意操作系統。
4臺服務器的操作系統和網絡配置分別為:
vs1: RedHat 6.2, Kernel 2.2.19
vs1: eth0 192.168.0.1
vs1: eth0:101 192.168.0.101
rs1: RedHat 6.2, Kernel 2.2.14
rs1: eth0 192.168.0.3
rs1: dummy0 192.168.0.101
rs2: RedHat 6.2, Kernel 2.2.14
rs2: eth0 192.168.0.4
rs2: dummy0 192.168.0.101
client: Windows 2000
client: eth0 192.168.0.200
其中,192.168.0.101是允許用戶訪問的IP。
虛擬服務器的集群配置
大部分的集群配置工作都在虛擬服務器vs1上面,需要下面的幾個步驟:
重新編譯內核。
首先,下載最新的Linux內核,版本號為2.2.19,下載地址為:http://www.kernel.org/,解壓縮后置于/usr/src/linux目錄下。
其次需要下載LVS的內核補丁,地址為:http://www.linuxvirtualserver.org/software/ipvs- 1.0.6-2.2.19.tar.gz。這里注意,如果你用的Linux內核不是2.2.19版本的,請下載相應版本的LVS內核補丁。將ipvs- 1.0.6-2.2.19.tar.gz解壓縮后置于/usr/src/linux目錄下。然后,對內核打補丁,如下操作:
[root@vs2 /root]# cd /usr/src/linux
[root@vs2 linux]# patch -p1 < ipvs-1.0.6-2.2.19/ipvs-1.0.6-2.2.19.patch
下面就是重新配置和編譯Linux的內核。特別注意以下選項:
1 Code maturity level options--->
* [*]Prompt for development and/or incomplete code/drivers
2 Networking部分:
[*] Kernel/User netlink socket
[*] Routing messages
<*> Netlink device emulation
* [*] Network firewalls
[*] Socket Filtering
<*> Unix domain sockets
* [*] TCP/IP networking
[*] IP: multicasting
[*] IP: advanced router
[ ] IP: policy routing
[ ] IP: equal cost multipath
[ ] IP: use TOS value as routing key
[ ] IP: verbose route monitoring
[ ] IP: large routing tables
[ ] IP: kernel level autoconfiguration
* [*] IP: firewalling
[ ] IP: firewall packet netlink device
* [*] IP: transparent proxy support
* [*] IP: masquerading
--- Protocol-specific masquerading support will be built as modules.
* [*] IP: ICMP masquerading
--- Protocol-specific masquerading support will be built as modules.
* [*] IP: masquerading special modules support
* IP: ipautofw masq support (EXPERIMENTAL)(NEW)
* IP: ipportfw masq support (EXPERIMENTAL)(NEW)
* IP: ip fwmark masq-forwarding support (EXPERIMENTAL)(NEW)
* [*] IP: masquerading virtual server support (EXPERIMENTAL)(NEW)
[*] IP Virtual Server debugging (NEW) <--最好選擇此項,
以便觀察LVS的調試信息
* (12) IP masquerading VS table size (the Nth power of 2) (NEW)
* IPVS: round-robin scheduling (NEW)
* IPVS: weighted round-robin scheduling (NEW)
* IPVS: least-connection scheduling (NEW)
* IPVS: weighted least-connection scheduling (NEW)
* IPVS: locality-based least-connection scheduling (NEW)
* IPVS: locality-based least-connection with replication
scheduling (NEW)
* [*] IP: optimize as router not host
* IP: tunneling
IP: GRE tunnels over IP
[*] IP: broadcast GRE over IP
[*] IP: multicast routing
[*] IP: PIM-SM version 1 support
[*] IP: PIM-SM version 2 support
* [*] IP: aliasing support
[ ] IP: ARP daemon support (EXPERIMENTAL)
* [*] IP: TCP syncookie support (not enabled per default)
--- (it is safe to leave these untouched)
< > IP: Reverse ARP
[*] IP: Allow large windows (not recommended if <16Mb of memory)
< > The IPv6 protocol (EXPERIMENTAL)
上面,帶*號的為必選項。