一:DR模式工作流程

VS-DR:Virtual Server via Direct Routing 直接路由的虚拟服务器


Linux平台基于DR模式的LVS搭建_运维

Linux平台基于DR模式的LVS搭建_运维_02

VS(virtual server)

    VIP: 接收客户端请求

    DIP:发送请求给RS的RIP

RS (real server)

    RIP:接收请求  

    VIP:响应请求给客户端

注意:

四个IP都为公网地址

RS与VS的VIP相同,且都为公网IP

当处于同一局域网的LVS的VIP与RS的VIP相同时,可以通过修改内核参数,使RS的VIP禁止广播,使其只用来回应用户请求,且两VIP不冲突。

只有局域网间通信才用到MAC地址

具体工作流程   

(a) 当用户请求到达Director Server,此时请求的数据报文会先到内 核空间的PREROUTING链。 此时报文的源IP为CIP,目标IP为VIP 

(b) PREROUTING检查发现数据包的目标IP是本机,将数据包送至 INPUT链 

(c) IPVS比对数据包请求的服务是否为集群服务,若是,将请求报文 中的源MAC地址修改为DIP的MAC地址,将目标MAC地址修改RIP 的MAC地址,然后将数据包发至POSTROUTING链。 此时的源IP和 目的IP均未修改,仅修改了源MAC地址为DIP的MAC地址,目标 MAC地址为RIP的MAC地址 

(d) 由于DS和RS在同一个网络中,所以是通过二层来传输。 POSTROUTING链检查目标MAC地址为RIP的MAC地址,那么此时 数据包将会发至Real Server。 

(e) RS发现请求报文的MAC地址是自己的MAC地址,就接收此报文 。处理完成之后,将响应报文通过lo接口传送给eth0网卡然后向外发 出。 此时的源IP地址为VIP,目标IP为CIP 

(f) 响应报文最终送达至客户端

二:实验环境

VS一台:

    VIP:172.17.252.1(eth0:0 桥接模式)

RS两台:

    RS1 

    RIP:172.17.250.121

    VIP:172.17.252.1(lo:0)

    RS2 

    RIP:172.17.250.122

    VIP:172.17.252.1(lo:0)

三:实验前准备

1.确保两台RS上都有基于LNMP的测试网站(LNMP网站搭建过程可见博客:http://13172823.blog.51cto.com/13162823/1978924

2.VS

①安装ipvsadm管理软件

[root@vs ~]# yum install ipvsadm -y

②清除防火墙策略并关闭SElinux

[root@vs ~]# iptables -F&&setenforce 0

③检测内核是否支持ipvs模块

[root@vs ~]# grep -i -C 10 "ipvs" /boot/config-2.6.32-696.el6.x86_64

四:实验步骤

※操作环境:VS

1.配置eth0:0为VIP,并只能广播自己

ifconfig eth0:0 172.17.252.1 broadcast 172.17.252.1 netmask 255.255.255.255 up

2.配置VIP路由表

route add -host 172.17.252.1 dev eth0:0

3.创建基于80端口的VS,调度方式为wrr

ipvsadm -A -t 172.17.252.1:80 -s wrr

4.添加RS1、RS2,权重为1

ipvsadm -a -t 172.17.252.1:80 -r 172.17.250.121:80 -g -w 1

ipvsadm -a -t 172.17.252.1:80 -r 172.17.250.122:80 -g -w 1

5.修改内核配置,开启VS路由转发功能

①编辑配置文件

vim /etc/sysctl.conf

    net.ipv4.ip_forward = 1

②使配置文件生效

sysctl -p

※操作环境:RS1、2

1.配置VIP到 lo:0,且只对自己广播

ifconfig lo:0 172.17.252.1 broadcast 172.17.252.1 netmask 255.255.255.255 up
ifconfig lo:0 172.17.252.1 broadcast 172.17.252.1 netmask 255.255.255.255 up

2.配置lo:0路由

route add -host 172.17.252.1 lo:0

3.只回答目标IP地址是来访网络接口本地地址的ARP查询请求

echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignore

4.对查询目标使用最适当的本地地址.在此模式下将忽略这个IP数据包的源地址并尝试选择与能与该地址通信的本地地址

echo "2" >/proc/sys/net/ipv4/conf/lo/arp_announce

5.关闭arp应答

echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore

echo "2" >/proc/sys/net/ipv4/conf/all/arp_announce

相关知识点:

“1”:仅在请求的目标IP配置在本地主机的接收到请求报文的接口上时,才给予响应

“2”:必须避免将接口信息向非本网络进行通告


6.确保RS的nginx、php-fpm、mariadb服务开启