目錄:
-
網絡環境
-
LVS服務器配置
-
LVS服務器添加ipvs規則
-
RS服務器配置
-
訪問驗證
-
抓包分析
-
注意事項
【網絡環境】
服務器類型 | IP | 說明 |
lvs_vip | 192.168.2.130 | vip處於不同網段 |
lvs_dip | 192.168.237.131 | dip與rip處於同一網段 |
realserver1 | 192.168.237.171 | httpd服務器 |
realserver2 | 192.168.237.172 | httpd服務器 |
tips:三台服務器均關閉防火牆和selinux
【LVS服務器配置】
臨時開啟路由轉發:
# echo 1 > /proc/sys/net/ipv4/ip_forward
或
# sysctl -w net.ipv4.ip_forward=1
永久開啟路由轉發:
修改/etc/systcl.conf參數如下
# cat /etc/sysctl.conf | grep 'net.ipv4.ip_forward' net.ipv4.ip_forward=1
配置生效命令
# sysctl -p
tips:0關閉,1開啟
【LVS服務器添加ipvs規則】
[root@v_machine1 ~]# ipvsadm -Ln IP Virtual Server version 1.2.1 (size=4096) Prot LocalAddress:Port Scheduler Flags -> RemoteAddress:Port Forward Weight ActiveConn InActConn TCP 192.168.2.130:80 rr -> 192.168.237.171:80 Masq 1 0 0 -> 192.168.237.172:80 Masq 1 0 0
【RS服務器配置】
添加默認路由到Dip
(重要)
使用route命令添加或者寫入配置文件中重啟network:
[root@v_machine3 lvs]# route add default gw 192.168.237.131 [root@v_machine3 lvs]# route -n Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 0.0.0.0 192.168.237.131 0.0.0.0 UG 0 0 0 ens33 169.254.0.0 0.0.0.0 255.255.0.0 U 1002 0 0 ens33 192.168.237.0 0.0.0.0 255.255.255.0 U 0 0 0 ens33
忽略arp廣播(可省略,因為RS上沒有vip)
# echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore # echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce # echo 1 > /proc/sys/net/ipv4/conf/ens33/arp_ignore # echo 2 > /proc/sys/net/ipv4/conf/ens33/arp_announce
【訪問驗證】
先后訪問lvs服務器
[root@v_machine1 lvs]# curl 192.168.2.130 hello,192.168.237.171 [root@v_machine1 lvs]# [root@v_machine1 lvs]# curl 192.168.2.130 hello,192.168.237.172 [root@v_machine1 lvs]# ipvsadm -Lnc IPVS connection entries pro expire state source virtual destination TCP 01:56 TIME_WAIT 192.168.2.130:38702 192.168.2.130:80 192.168.237.172:80 TCP 01:58 TIME_WAIT 192.168.2.130:38704 192.168.2.130:80 192.168.237.171:80 TCP 01:51 TIME_WAIT 192.168.2.104:50395 192.168.2.130:80 192.168.237.172:80 TCP 00:39 TIME_WAIT 192.168.2.104:50386 192.168.2.130:80 192.168.237.171:80 TCP 01:01 TIME_WAIT 192.168.2.104:50428 192.168.2.130:80 192.168.237.171:80
本地(192.168.2.104)瀏覽器訪問測試:
postman測試:
結論:可見lvs實現了對用戶訪問的輪詢調度
【抓包分析】
(這里由於網絡變了,vip變成了192.168.91.130,客戶機變成了192.168.91.128,所以實驗ip與前面的環境配置不一樣)
在客戶機(192.168.91.128)上對lvs_vip進行兩次訪問:
[root@v_machine2 ~]# curl 192.168.91.130 hello,192.168.237.172 [root@v_machine2 ~]# curl 192.168.91.130 hello,192.168.237.171
在lvs服務器上抓包,然后wireshark打開查看:
第一次訪問vip:
192.168.91.128 -> 192.168.91.130
lvs收到訪問請求后,先將目的ip進行改寫為選出的后端RS的IP(RIP),再轉發給該RS:
192.168.91.128 -> 192.168.237.172
RS回復訪問請求,通過lvs轉發出去(因為該lvs是RS的路由):
192.168.237.172 -> 192.168.91.128
lvs先改寫源ip為vip,然后回復給客戶機:
192.168.91.130 -> 192.168.91.128
第二次訪問vip,數據包轉發過程是一樣的,只是由於輪詢算法導致選出的RS換成了另一台。
根據抓包結果,數據包流程如下圖:
對第一次訪問數據包追蹤http流:
數據包文件:
鏈接:https://pan.baidu.com/s/1FnV3jL_p5ohbsrPpyek4JQ
提取碼:85oy
【注意事項】
學習使用,關掉防火牆和selinux:
[root@v_machine1 ~]# setenforce 0 setenforce: SELinux is disabled
關掉防火牆並清空防火牆轉發規則:
systemctl stop iptables iptables -F iptables -X
關掉NetworkManager,並禁止開機啟動,這個服務容易導致路由添加不成功;
systemctl stop NetworkManager
systemctl disable NetworkManager