目录:
-
网络环境
-
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参数如下
1# cat /etc/sysctl.conf | grep 'net.ipv4.ip_forward' 2net.ipv4.ip_forward=1
配置生效命令
# sysctl -p
tips:0关闭,1开启
【LVS服务器添加ipvs规则】
1[root@v_machine1 ~]# ipvsadm -Ln 2IP Virtual Server version 1.2.1 (size=4096) 3Prot LocalAddress:Port Scheduler Flags 4 -> RemoteAddress:Port Forward Weight ActiveConn InActConn 5TCP 192.168.2.130:80 rr 6 -> 192.168.237.171:80 Masq 1 0 0 7 -> 192.168.237.172:80 Masq 1 0 0
【RS服务器配置】
添加默认路由到Dip (重要)
使用route命令添加或者写入配置文件中重启network:
1[root@v_machine3 lvs]# route add default gw 192.168.237.131 2[root@v_machine3 lvs]# route -n 3Kernel IP routing table 4Destination Gateway Genmask Flags Metric Ref Use Iface 50.0.0.0 192.168.237.131 0.0.0.0 UG 0 0 0 ens33 6169.254.0.0 0.0.0.0 255.255.0.0 U 1002 0 0 ens33 7192.168.237.0 0.0.0.0 255.255.255.0 U 0 0 0 ens33
忽略arp广播(可省略,因为RS上没有vip)
1# echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore 2# echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce 3# echo 1 > /proc/sys/net/ipv4/conf/ens33/arp_ignore 4# echo 2 > /proc/sys/net/ipv4/conf/ens33/arp_announce
【访问验证】
先后访问lvs服务器
1[root@v_machine1 lvs]# curl 192.168.2.130 2hello,192.168.237.171 3[root@v_machine1 lvs]# 4[root@v_machine1 lvs]# curl 192.168.2.130 5hello,192.168.237.172 6[root@v_machine1 lvs]# ipvsadm -Lnc 7IPVS connection entries 8pro expire state source virtual destination 9TCP 01:56 TIME_WAIT 192.168.2.130:38702 192.168.2.130:80 192.168.237.172:80 10TCP 01:58 TIME_WAIT 192.168.2.130:38704 192.168.2.130:80 192.168.237.171:80 11TCP 01:51 TIME_WAIT 192.168.2.104:50395 192.168.2.130:80 192.168.237.172:80 12TCP 00:39 TIME_WAIT 192.168.2.104:50386 192.168.2.130:80 192.168.237.171:80 13TCP 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进行两次访问:
1[root@v_machine2 ~]# curl 192.168.91.130 2hello,192.168.237.172 3[root@v_machine2 ~]# curl 192.168.91.130 4hello,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:
1[root@v_machine1 ~]# setenforce 0 2setenforce: SELinux is disabled
关掉防火墙并清空防火墙转发规则:
1systemctl stop iptables 2iptables -F 3iptables -X
关掉NetworkManager,并禁止开机启动,这个服务容易导致路由添加不成功;
1systemctl stop NetworkManager 2systemctl disable NetworkManager