LVS負載均衡之TUN IP隧道html
Virtual Server via IP Tunneling採用的是報文單向重寫的策略,與Virtual Server via NAT不一樣的是NAT採用的是報文雙向重寫的策略,數據報文通過調度器的時候就會將地址和端口改成Real Server的真實地址以及相應的端口,而當相應報文返回時,則反之。而LVS-TUN若是在二層,就在MAC以外再加一層MAC,在三層源IP目標IP再加一層IP,主要實現隱藏以及跨區域。web
TUN隧道主要實現的是非同一區域的節點集羣,突破了DR(節點與Director 同一區域,由於其主要靠MAC地址進行局域網的數據報文轉發)的區域限制。後端
如下是它的特色:bash
1.集羣節點和Director沒必要在同一個網絡網絡
2.RIP必須使用公網地址負載均衡
3.Director只須要處理進來的請求,不須要處理出去的請求(與DR原理同樣,直接將響應發給客戶端)curl
4.響應的請求必定不能通過Direcor.(在互聯網的其餘節點)編輯器
5.Directory不支持端口映射ide
6.只能使用那些支持IP 隧道協議的操做系統作realserver測試
1,實驗環境:
負載均衡器: eth0:192.168.1.16 vip: 192.168.1.17
後端WEB1:192.168.1.19
後端WEB2:192.168.1.20
2,建立LVS TUN模式啓動腳本
[root@localhost ~]# vi /etc/init.d/lvsdstun
#!/bin/bash
VIP=192.168.1.17
RIP1=192.168.1.19
RIP2=192.168.1.20
/etc/rc.d/init.d/functions
case "$1" in
start)
echo "start LVS of DirectorServer Tun"
/sbin/ifconfig tunl0 $VIP broadcast $VIP netmask 255.255.255.255 up
/sbin/route add -host $VIP dev tunl0
/sbin/ipvsadm -C
/sbin/ipvsadm -A -t $VIP:80 -s rr
/sbin/ipvsadm -a -t $VIP:80 -r $RIP1:80 -i###-i指定工做模式爲TUN
/sbin/ipvsadm -a -t $VIP:80 -r $RIP2:80 -i
/sbin/ipvsadm
;;
stop)
echo "stop LVS of DirectorServer Tun"
/sbin/ifconfig tunl0 down
/sbin/ipvsadm -C
;;
*)
echo "Usage: $0 {start|stop}"
exit 1
esac
[root@localhost ~]# chmod +x /etc/rc.d/init.d/lvsdsdr
[root@localhost ~]# /etc/rc.d/init.d/lvsdsdr start
[root@localhost ~]# ifconfig tunl0
tunl0 Link encap:IPIP Tunnel HWaddr
inet addr:192.168.1.17 Mask:255.255.255.255
UP RUNNING NOARP MTU:1480 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:0 (0.0 b) TX bytes:0 (0.0 b)
3, web1,web2分別建立啓動腳本
[root@localhost ~]# vi /etc/init.d/lvsrstun
#!/bin/bash
VIP=192.168.1.17
/etc/rc.d/init.d/functions
case "$1" in
start)
echo "start LVS of RealServer Tun"
/sbin/ifconfig tunl0 $VIP broadcast $VIP netmask 255.255.255.255 up
/sbin/route add -host $VIP dev tunl0
echo "1" >/proc/sys/net/ipv4/conf/tunl0/arp_ignore
echo "2" >/proc/sys/net/ipv4/conf/tunl0/arp_announce
echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore
echo "2" >/proc/sys/net/ipv4/conf/all/arp_announce ----------echo的內容也能夠用vi編輯器修改
;;
stop)
echo "close LVS of RealServer Tun"
/sbin/ifconfig tunl0 down
echo "0" >/proc/sys/net/ipv4/conf/tunl0/arp_ignore
echo "0" >/proc/sys/net/ipv4/conf/tunl0/arp_announce
echo "0" >/proc/sys/net/ipv4/conf/all/arp_ignore
echo "0" >/proc/sys/net/ipv4/conf/all/arp_announce
;;
*)
echo "Usage: $0 {start|stop}"
exit 1
esac
exit 0
[root@localhost ~]# chmod +x /etc/rc.d/init.d/lvsrsdr
[root@localhost ~]# /etc/rc.d/init.d/lvsrsdr start
[root@localhost ~]# ifconfig tunl0
tunl0 Link encap:IPIP Tunnel HWaddr
inet addr:192.168.1.17 Mask:255.255.255.255
UP RUNNING NOARP MTU:1480 Metric:1
RX packets:15 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:1890 (1.8 KiB) TX bytes:0 (0.0 b)
4,web1,web2分別修改首頁,啓動http服務
[root@localhost ~]# vi /var/www/html/index.html
web1 192.168.1.19 ###web1
web2 192.168.1.20 ###web2
[root@localhost ~]# /etc/init.d/httpd start
5,終端及WEB測試
[root@localhost ~]# for i in $(seq 1 10);do curl http://192.168.1.17;done
web2 192.168.1.20
web1 192.168.1.19
web2 192.168.1.20
web1 192.168.1.19
web2 192.168.1.20
web1 192.168.1.19
web2 192.168.1.20
web1 192.168.1.19
web2 192.168.1.20
web1 192.168.1.19
![LVS-TUN模式實驗 LVS-TUN模式實驗](http://static.javashuo.com/static/loading.gif)
6,lvs查看訪問鏈接
[root@localhost ~]# ipvsadm -lnc
IPVS connection entries
pro expire state sourcevirtual destination
TCP 01:24 FIN_WAIT 192.168.1.10:34526 192.168.1.17:80 192.168.1.19:80
TCP 01:25 FIN_WAIT 192.168.1.10:34532 192.168.1.17:80 192.168.1.19:80
TCP 01:25 FIN_WAIT 192.168.1.10:34531 192.168.1.17:80 192.168.1.20:80
TCP 01:25 FIN_WAIT 192.168.1.10:34534 192.168.1.17:80 192.168.1.19:80
TCP 01:24 FIN_WAIT 192.168.1.10:34525 192.168.1.17:80 192.168.1.20:80
TCP 01:25 FIN_WAIT 192.168.1.10:34528 192.168.1.17:80 192.168.1.19:80
TCP 01:25 FIN_WAIT 192.168.1.10:34527 192.168.1.17:80 192.168.1.20:80
TCP 01:25 FIN_WAIT 192.168.1.10:34530 192.168.1.17:80 192.168.1.19:80
TCP 01:25 FIN_WAIT 192.168.1.10:34533 192.168.1.17:80 192.168.1.20:80
TCP 01:25 FIN_WAIT 192.168.1.10:34529 192.168.1.17:80 192.168.1.20:80