LVS之DR模式
目录:
-
网络环境
-
LVS服务器网络配置
-
LVS服务器添加ipvs规则
-
RS服务器配置
-
访问验证
-
抓包分析
-
注意事项
【网络环境】
网络拓扑结构如下表:
服务器
|
类型
|
网卡
|
IP
|
MAC
|
说明
|
v_mechine2
|
client
|
ens32
|
192.168.237.132
|
00:0c:29:ff:f9:ca
|
客户端ip
|
v_mechine1
|
lvs_vip
lvs_dip
|
ens35
ens32
|
192.168.237.141
192.168.237.131
|
00:0c:29:33:72:59
00:0c:29:33:72:45
|
对外vip
对内dip
|
v_mechine3
|
rs1_vip
rs1_rip
|
lo:0
ens33
|
192.168.237.141
192.168.237.171
|
00:0c:29:4e:33:cb
|
虚拟网口vip,无mac
内部rip
|
v_mechine4
|
rs2_vip
rs2_rip
|
lo:0
ens33
|
192.168.237.141
192.168.237.172
|
00:0c:29:ae:a1:bb
|
虚拟网口vip,无mac
内部rip
|
【LVS服务器网络配置】
配置双网卡,均在同一网段上:
[root@v_machine1 ~]# ip a 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: ens32: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000 link/ether 00:0c:29:33:72:45 brd ff:ff:ff:ff:ff:ff inet 192.168.237.131/24 brd 192.168.237.255 scope global ens32 valid_lft forever preferred_lft forever inet6 fe80::20c:29ff:fe33:7245/64 scope link valid_lft forever preferred_lft forever 3: ens34: <BROADCAST,MULTICAST> mtu 1500 qdisc pfifo_fast state DOWN qlen 1000 link/ether 00:0c:29:33:72:4f brd ff:ff:ff:ff:ff:ff 4: ens35: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000 link/ether 00:0c:29:33:72:59 brd ff:ff:ff:ff:ff:ff inet 192.168.237.141/24 brd 192.168.237.255 scope global ens35 valid_lft forever preferred_lft forever inet6 fe80::20c:29ff:fe33:7259/64 scope link valid_lft forever preferred_lft forever
路由设置如下:
[root@v_machine1 ~]# route -n Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 0.0.0.0 192.168.237.2 0.0.0.0 UG 0 0 0 ens32 169.254.0.0 0.0.0.0 255.255.0.0 U 1002 0 0 ens32 169.254.0.0 0.0.0.0 255.255.0.0 U 1004 0 0 ens35 192.168.237.0 0.0.0.0 255.255.255.0 U 0 0 0 ens32 192.168.237.0 0.0.0.0 255.255.255.0 U 0 0 0 ens35
开启路由转发:
临时开启路由转发: # echo 1 > /proc/sys/net/ipv4/ip_forward 或使用 # sysctl -w net.ipv4.ip_forward=1 永久开启路由转发: 修改/etc/systcl.conf参数如下 # cat /etc/sysctl.conf | 'net.ipv4.ip_forward' net.ipv4.ip_forward=1 配置生效命令 # sysctl -p tips:0关闭,1开启
【LVS服务器添加ipvs规则】
添加服务和规则
[root@v_machine1 ~]# ipvsadm -A -t 192.168.237.141:80 -s wrr [root@v_machine1 ~]# ipvsadm -a -t 192.168.237.141:80 -r 192.168.237.171:80 -g -w 1 [root@v_machine1 ~]# ipvsadm -a -t 192.168.237.141:80 -r 192.168.237.172:80 -g -w 2
查看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.237.141:80 wrr -> 192.168.237.171:80 Route 1 0 5 -> 192.168.237.172:80 Route 2 0 5
【RS服务器配置】
两台RS服务器均添加虚拟网卡lo:0(也可使用其它虚拟网口,如ens33:0)
[root@v_machine3 network-scripts]# ifconfig lo:0 192.168.237.141 netmask 255.255.255.255 up [root@v_machine3 segments_dr]# ifconfig ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 192.168.237.171 netmask 255.255.255.0 broadcast 192.168.237.255 inet6 fe80::20c:29ff:fe4e:33cb prefixlen 64 scopeid 0x20<link> ether 00:0c:29:4e:33:cb txqueuelen 1000 (Ethernet) RX packets 6738 bytes 585354 (571.6 KiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 3162 bytes 371159 (362.4 KiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536 inet 127.0.0.1 netmask 255.0.0.0 inet6 ::1 prefixlen 128 scopeid 0x10<host> loop txqueuelen 1 (Local Loopback) RX packets 38 bytes 3790 (3.7 KiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 38 bytes 3790 (3.7 KiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 lo:0: flags=73<UP,LOOPBACK,RUNNING> mtu 65536 inet 192.168.237.141 netmask 255.255.255.255 loop txqueuelen 1 (Local Loopback)
路由设置如下:
[root@v_machine3 ~]# route -n Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 0.0.0.0 192.168.237.2 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
【访问验证】
客户端上curl访问lvs服务器的vip
[root@v_machine2 ~]# curl 192.168.237.141 -w "对端ip:%{remote_ip}\n" hello,192.168.237.171 对端ip:192.168.237.141 [root@v_machine2 ~]# curl 192.168.237.141 -w "对端ip:%{remote_ip}\n" hello,192.168.237.172 对端ip:192.168.237.141 [root@v_machine2 ~]# curl 192.168.237.141 -w "对端ip:%{remote_ip}\n" hello,192.168.237.172 对端ip:192.168.237.141
可见,lvs已按照加权轮询方式处理客户端访问请求
【抓包分析】
在客户机上对lvs的vip进行访问,然后分别在4台服务器上抓包
lvs服务器抓取数据包client2vip1st_vmachine1.pacp
http数据流:
arp数据流:
可见DS收到client的访问请求后直接将请求转给了后端RS
在RS2服务器上抓取数据包client2vip1st_vmachine4.pacp
http数据流,收包:
http数据流,回包:
从收包,可以看出RS收到的数据包,源ip为客户机ip,目的ip为vip;但是源mac地址是lvs的mac地址,可见该包是从lvs转发过来的;
从回包,可以看到RS将数据包直接回给cip,而不是dip;
在client服务器上抓取数据包client2vip1st_vmachine2.pacp
从client上的收包中,可以看到数据是直接从RS2返回给client的
由上述数据分析可以得出以下数据流程图:
数据包pcap文件:
链接:https://pan.baidu.com/s/1FnV3jL_p5ohbsrPpyek4JQ
提取码:85oy
【注意事项】
在DR工作模式下,由于每台RS服务器均配置了vip。因此需要设置服务器拒绝arp广播的响应。