Loading

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广播的响应。

 

posted @ 2019-06-23 17:17  wuenwuen  阅读(678)  评论(0编辑  收藏  举报