tun方式的負載均衡集群設置舉例
前面我們學習了nat的負載均衡集群的配置過程,接下來就是另一種配置方式了——lvs/tun的設置過程。同樣,我們通過對TUN的理解和架構的介紹,來完成腳本的設置。還望大家可以做一個對比學習,之后還有一種設置方式,敬請期待。
設定LVS/TUN方式的負載均衡集群
TUN是指IP Tunneling,它的轉發流程是:Director機器收到外界請求,按相應的調度算法將其通過IP隧道發送到相應Real Server,Real Server處理完該請求后,將結果數據包直接返回給客戶。至此完成一次負載調度。
最簡單的LVS/TUN方式的負載均衡集群架構下圖所示。
LVS/TUN使用IP Tunneling技術,在Director機器和Real Server機器之間架設一個IP Tunnel,通過IP Tunnel將負載分配到Real Server機器上。Director和Real Server之間的關系比較松散,可以是在同一個網絡中,也可以是在不同的網絡中,只要兩者能夠通過IP Tunnel相連就行。收到負載分配的Real Server機器處理完后會直接將反饋數據送回給客戶,而不必通過Director機器。實際應用中,服務器必須擁有正式的IP地址用于與客戶機直接通信,并且所有服務器必須支持IP隧道協議。
LVS/TUN方式的集群簡圖
這里將所有LVS的配置命令寫到一個可執行腳本,腳本內容如下:
- #!/bin/bash
- # Close IP Forwarding
- echo 0 > /proc/sys/net/ipv4/ip_forward
- ifconfig eth0 down
- ifconfig eth0 192.168.0.253 netmask 255.255.255.0 broadcast 192.168.0.255 up
- ifconfig eth0:0 192.168.0.254 netmask 255.255.255.255 broadcast 192.168.0.254 up
- ipvsadm -C
- ipvsadm -A -t 192.168.0.254:80 -s wlc
- ipvsadm -a -t 192.168.0.254:80 -r 192.168.0.1 -i -w 3
- ipvsadm -a -t 192.168.0.254:80 -r 192.168.1.201 -i -w 1
- ipvsadm
#p#將上面的腳本保存為/root/lvs_tun.sh。然后加上可執行屬性,執行它:
- # chmod a+x /root/lvs_tun.sh
- # /root/lvs_tun.sh
運行此腳本之后應該出現如下信息:
- # ./lvs-tun.sh
- IP Virtual Server version 1.0.9 (size=4096)
- Prot LocalAddress:Port Scheduler Flags
- -> RemoteAddress:Port Forward Weight ActiveConn InActConn
- TCP 192.168.0.254:http wlc
- -> 192.168.1.201:http Tunnel 1 0 0
- -> 192.168.0.1:http Tunnel 1 0 0
另外在每臺Real Server上還要執行如下的命令:
- ifconfig tunl0 192.168.0.254 netmask 255.255.255.255 broadcast 192.168.0.254 up
- route add -host 192.168.0.254 dev tunl0
- echo 1 > /proc/sys/net/ipv4/conf/all/hidden
- echo 1 > /proc/sys/net/ipv4/conf/tunl0/hidden
注意Real Server的內核必須打上修正ARP問題的內核補丁,如Linux2.4.20的內核是hidden-2.4.20pre10-1.diff,編譯內核的方法參見Director機器。
通過本例來簡單評價一下LVS/TUN負載均衡集群方式。該方式中Director將客戶請求分配到不同的Real Server,Real Server處理請求后直接回應給用戶,這樣Director就只處理客戶機與服務器的一半連接,極大地提高了Director的調度處理能力,使集群系統能容納更多的節點數。另外TUN方式中的Real Server可以在任何LAN或WAN上運行,這樣可以構筑跨地域的集群,其應對災難的能力也更強,但是服務器需要為IP封裝付出一定的資源開銷,而且后端的Real Server必須是支持IP Tunneling的操作系統。