文章目錄
LVS TUN 模式工作原理: 封裝IP
virtual server via ip tunneling模式:採用NAT模式時,由於請求和響應的報文必須通過調度器地址重寫,當客戶請求越來越多時,調度器處理能力將成爲瓶頸。爲了解決這個問題,調度器把請求的報文通過IP隧道廣播轉發到真實的服務器。真實的服務器將響應處理後的數據直接返回給客戶端。這樣調度器就只處理請求入站報文,由於一般網絡服務應答數據比請求報文大很多,採用VS/TUN模式後,集羣系統的最大吞吐量可以提高10倍。
VS/TUN的工作流程圖如下所示,它和NAT模式不同的是,它在LB和RS之間的傳輸不用改寫IP地址。而是把客戶請求包封裝在一個IP tunnel裏面,然後發送給RS節點服務器,節點服務器接收到之後解開IP tunnel後,進行響應處理。並且直接把包通過自己的外網地址發送給客戶不用經過LB服務器。
Tunnel原理流程圖:
DR方式是通過MAC,規模是一個交換網絡。而TUN方式,是通過給數據包加上新的IP頭部來實現
部署環境
Redhat7.3版本下實驗,關閉防火牆及selinux
別名 | ip | |
---|---|---|
DS lvs調度器服務器 | server1 | eth0:192.168.0.1/24 tunl0:192.168.0.100(VIP) |
RS後端真實主機服務器1 | server2 | 192.168.0.2/24 |
RS後端真實主機服務器2 | server3 | 192.168.0.3/24 |
CS客戶端服務器 | client | 192.168.0.10/24 |
1、添加隧道模塊
2、添加VIP
3、安裝lvs管理工具——ipvsadm服務
4、修改反向過濾規則,防止丟包
5、 RS服務器搭建apache資源
6、 CS客戶測試端測試
步驟
server1-DS lvs調度器服務器
#加入隧道模塊
modprobe ipip
#tunl0上添加VIP
ip addr add 192.168.0.100/24 dev tunl0
ip link set up tunl0
#下載ipvsadm
yum install ipvsadm -y
#添加策略
ipvsadm -A -t 192.168.0.100:80 -s rr
ipvsadm -a -t 192.168.0.100:80 -r 192.168.0.2:80 -i -w 1
ipvsadm -a -t 192.168.0.100:80 -r 192.168.0.3:80 -i -w 1
server2-RS後端真實主機服務器1
#加入隧道模塊
modprobe ipip
#tunl0上添加VIP
ip addr add 192.168.0.100/24 dev tunl0
ip link set up tunl0
#修改反向過濾規則,防止丟包
#查看過濾表將所有的過濾規則都關閉
sysctl -a | grep rp_filter
#臨時添加
sysctl -w net.ipv4.conf.tunl0.rp_filter=0
#設置生效
sysctl -p
#再次查看
sysctl -a | grep rp_filter
#禁用路由轉發功能
echo ‘0’>/proc/sys/net/ipv4/ip_forward
server3-RS後端真實主機服務器2
#加入隧道模塊
modprobe ipip
#tunl0上添加VIP
ip addr add 192.168.0.100/24 dev tunl0
ip link set up tunl0
#修改反向過濾規則,防止丟包
#查看過濾表將所有的過濾規則都關閉
sysctl -a | grep rp_filter
#臨時添加
sysctl -w net.ipv4.conf.tunl0.rp_filter=0
#設置生效
sysctl -p
#再次查看
sysctl -a | grep rp_filter
#禁用路由轉發功能
echo ‘0’>/proc/sys/net/ipv4/ip_forward
server2及server3設置apache
server2
#下載apache
yum install httpd -y
#啓動
systemctl start httpd
echo server2 > /var/www/html/index.html
systemctl restart httpd
server3
#下載apache
yum install httpd -y
#啓動
systemctl start httpd
echo server3 > /var/www/html/index.html
systemctl restart httpd
CS客戶測試端
curl 192.168.0.100
server2
curl 192.168.0.100
server3