##(1)VS/TUN的簡介##
1.ip隧道技術(shù):
是路由器把一種網(wǎng)絡(luò)層協(xié)議封裝到另一個協(xié)議中以跨過網(wǎng)絡(luò)傳送到另一個路由器的處理過程。隧道技術(shù)是一種數(shù)據(jù)包封裝技術(shù),它是將原始ip包(其報頭包含原始發(fā)送者和最終目的地)封裝在另一個數(shù)據(jù)包(稱為封裝的ip包)的數(shù)據(jù)凈荷中的傳輸。
2.TUN模式的優(yōu)點:
采用NAT模式時,由于請求和響應(yīng)的報文必須通過調(diào)度器LB地址重寫,當(dāng)客戶請求越來越多時,調(diào)度器處理能力將成為瓶頸。為了解決這個問題,調(diào)度器把請求數(shù)據(jù)包的報文通過ip隧道轉(zhuǎn)發(fā)到真實的服務(wù)器RS。RS將響應(yīng)處理后的數(shù)據(jù)包直接返回給客戶端。這樣調(diào)度器就只處理請求入站報文,由于一般網(wǎng)絡(luò)服務(wù)應(yīng)答數(shù)據(jù)比請求報文大很多,采用VS/TUN模式后,集群系統(tǒng)的最大吞吐量可以提高10倍。
3.TUN和NAT的差異:
VS/TUN和VS/NAT的工作模式不同的是,它在LB和RS之間的傳輸不用改寫ip地址。而是把客戶請求包封裝在一個ip tunnel里面。然后發(fā)送給RS節(jié)點服務(wù)器,節(jié)點服務(wù)器接收到之后解開ip tunnel后,進(jìn)行響應(yīng)處理,,并且直接將響應(yīng)包通過自己的外網(wǎng)地址發(fā)送給客戶端,不用經(jīng)過LB服務(wù)器。
##(2)VS/TUN原理##
1.客戶發(fā)送請求,目標(biāo)地址VIP,請求數(shù)據(jù)包發(fā)送到LB。
2.LB接收到客戶請求包,進(jìn)行ip tunnel封裝。在原有的報頭加上ip tunnel的報頭。然后發(fā)送出去。
3.RS節(jié)點服務(wù)器根據(jù)iptunnel報頭信息(此時就是一種邏輯上的隱形隧道,只有LB和RS之間懂)受到請求包后,然后解開ip tunnel的報頭信息,得到客戶的請求包并進(jìn)行響應(yīng)處理。
4.響應(yīng)處理完畢之后,RS服務(wù)器使用自己的公網(wǎng)線路,將響應(yīng)數(shù)據(jù)包發(fā)送給客戶端。源ip地址還是VIP地址(RS節(jié)點服務(wù)器需要在本地回環(huán)接口配置VIP)
##(3)LVS-TUN模式下的負(fù)載均衡##
1.實驗環(huán)境:
server1(LB):172.25.67.1
server2(RS):172.25.67.2
server3(RS):172.25.67.3
VIP:172.25.67.100
2.在server1中:
1)配置網(wǎng)絡(luò)
ip:172.25.67.1
modprobe ipip #導(dǎo)入模塊
ip link set up tunl0 #添加虛擬網(wǎng)卡
ip addr add 172.25.67.100 dev tunl0 #為虛擬網(wǎng)卡設(shè)置ip
2)配置yum倉庫
vim /etc/yum.repos.d/rhel-source.repo
[LoadBalancer]
name=LoadBalancer
baseurl=http://172.25.67.250/rhel6.5/LoadBalancer
gpgcheck=0
3)設(shè)定策略
yum install ipvsadm -y
/etc/init.d/ipvsadm start #打開服務(wù)
ipvsadm -A -t 172.25.67.100:80 -s rr
ipvsadm -a -t 172.25.67.100:80 -r 172.25.67.2:80 -i
ipvsadm -a -t 172.25.67.100:80 -r 172.25.67.3:80 -i
/etc/init.d/ipvsadm save #保存策略
ipvsadm -ln #查看策略
3.在server2中:
1)配置網(wǎng)絡(luò):
ip:172.25.67.2
modprobe ipip #打開隧道
ip link set up tunl0 #設(shè)定虛擬網(wǎng)卡
ip addr add 172.25.67.100/32 dev tunl0 #為虛擬網(wǎng)卡設(shè)定ip
2)安裝arptables_jf
yum install arptables_jf -y #安裝服務(wù)
arptables -F #清空策略
arptables -A IN -d 172.25.67.100 -j DROP #禁止172.25.67.100直接訪問
arptables -A OUT -s 172.25.67.100 -j mangle –mangle-ip-s 172.25.67.2 #將響應(yīng)包要以vip的身份返回給客戶端,否則客戶端不能接收到響應(yīng)包
/etc/init.d/arptables_jf save #保存策略
/etc/init.d/arptables_jf restart #重啟服務(wù)
arptables -L #查看策略
3)修改rp_filter:
sysctl -w net.ipv4.conf.tunl0.rp_filter=0
sysctl -a |grep rp_filter
為什么要修改這個參數(shù)呢?是因為:
rp_filter參數(shù)用于控制系統(tǒng)是否開啟對數(shù)據(jù)包源地址的校驗。
有三個值,0、1、2,具體含義:
0:不開啟源地址校驗。
1:開啟嚴(yán)格的反向路徑校驗。對每個進(jìn)來的數(shù)據(jù)包,校驗其反向路徑是否是最佳路徑。如果反向路徑不是最佳路徑,則直接丟棄該數(shù)據(jù)包。
2:開啟松散的反向路徑校驗。對每個進(jìn)來的數(shù)據(jù)包,校驗其源地址是否可達(dá),即反向路徑是否能通(通過任意網(wǎng)口),如果反向路徑不同,則直接丟棄該數(shù)據(jù)包。
4)安裝httpd并且編寫默認(rèn)發(fā)布文件:
yum install httpd -y #安裝httpd服務(wù)
/etc/init.d/httpd start #打開httpd服務(wù)
vim /var/www/html/index.html #編輯發(fā)布文件
server2
/etc/init.d/httpd restart #重啟httpd
curl localhostm #查看發(fā)布文件是否生效
4.在server3中:
1)配置網(wǎng)絡(luò):
ip:172.25.67.3
modprobe ipip #打開隧道
ip link set up tunl0 #設(shè)定虛擬網(wǎng)卡
ip addr add 172.25.67.100/32 dev tunl0 #為虛擬網(wǎng)卡設(shè)定ip
2)安裝arptables_jf
yum install arptables_jf -y #安裝服務(wù)
arptables -F #清空策略
arptables -A IN -d 172.25.67.100 -j DROP
arptables -A OUT -s 172.25.67.100 -j mangle –mangle-ip-s 172.25.67.3
/etc/init.d/arptables_jf save #保存策略
/etc/init.d/arptables_jf restart #重啟服務(wù)
arptables -L #查看策略
3)修改rp_filter:
sysctl -w net.ipv4.conf.tunl0.rp_filter=0
sysctl -a |grep rp_filter
4)安裝httpd并且編寫默認(rèn)發(fā)布文件:
yum install httpd -y #安裝httpd服務(wù)
/etc/init.d/httpd start #打開httpd服務(wù)
vim /var/www/html/index.html #編輯發(fā)布文件
server3
/etc/init.d/httpd restart #重啟httpd
curl localhostm #查看發(fā)布文件是否生效
5.測試:
在客戶端測試
ip:172.25.254.67
for i in {1..10};do curl 172.25.67.100;done