1. Lvs DR 模型原理图  

Centos 下面 配置LVS的DR模式_第1张图片


(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) 响应报文最终送达至客户端


2. LVS-DR模型的特性


  • 特点1:保证前端路由将目标地址为VIP报文统统发给Director Server,而不是RS

  • RS可以使用私有地址;也可以是公网地址,如果使用公网地址,此时可以通过互联网对RIP进行直接访问

  • RS跟Director Server必须在同一个物理网络中

  • 所有的请求报文经由Director Server,但响应报文必须不能进过Director Server

  • 不支持地址转换,也不支持端口映射

  • RS可以是大多数常见的操作系统

  • RS的网关绝不允许指向DIP(因为我们不允许他经过director)

  • RS上的lo接口配置VIP的IP地址

  • 缺陷:RS和DS必须在同一机房中

3. 特点1的解决方案:


  • 在前端路由器做静态地址路由绑定,将对于VIP的地址仅路由到Director Server

  • 存在问题:用户未必有路由操作权限,因为有可能是运营商提供的,所以这个方法未必实用

  • arptables:在arp的层次上实现在ARP解析时做防火墙规则,过滤RS响应ARP请求。这是由iptables提供的

  • 修改RS上内核参数(arp_ignore和arp_announce)将RS上的VIP配置在lo接口的别名上,并限制其不能响应对VIP地址解析请求。

 4.部署实例 

 

 实验环境 


  • Director节点:  (eth1 192.168.10.31  vip eth1:0 192.168.10.70)

  • Real server1: (eth1 192.168.10.32 vip lo:0 192.168.10.70)

  • Real server2: (eth1 192.168.10.34 vip lo:0 192.168.10.70)

 配置 Director 服务器


 查看当前服务器ip 地址

 ifconfig eth1

eth1      Link encap:Ethernet  HWaddr 00:0C:29:A5:E5:14  

          inet addr:192.168.10.31  Bcast:192.168.10.255  Mask:255.255.255.0

          inet6 addr: fe80::20c:29ff:fea5:e514/64 Scope:Link

          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1

          RX packets:121 errors:0 dropped:0 overruns:0 frame:0

          TX packets:88 errors:0 dropped:0 overruns:0 carrier:0

          collisions:0 txqueuelen:1000 

          RX bytes:12438 (12.1 KiB)  TX bytes:12833 (12.5 KiB)


 配置 vip 地址

cp ifcfg-eth1 ifcfg-eth1:0


cat ifcfg-eth1

DEVICE=eth1

HWADDR=00:0C:29:A5:E5:14

TYPE=Ethernet

#UUID=64dc9596-9cf7-4e94-b1d1-690109a87926

ONBOOT=yes

NM_CONTROLLED=yes

BOOTPROTO=static

IPADDR=192.168.10.31

GATEWAY=192.168.10.1

NETMASK=255.255.255.0


cat  ifcfg-eth1:0


DEVICE=eth1:0

NAME="eth1:0"

HWADDR=00:0C:29:A5:E5:14

TYPE=Ethernet

ONBOOT=yes

NM_CONTROLLED=yes

BOOTPROTO=static

IPADDR=192.168.10.70

GATEWAY=192.168.10.1

NETMASK=255.255.255.0


重启网卡,查看配置是否生效


 service network restart

 

wKiom1j9uDODzFb3AABFqny2fCw349.jpg

打开路由转发


echo 1 > /proc/sys/net/ipv4/ip_forward


安装ipvsadm 


yum install ipvsadm -y 


配置规则 ipvs 的规则 (这里设置为轮训模式)


ipvsadm -A -t192.168.10.70:80 -s rr


ipvsadm -a -t 192.168.10.70:80 -r 192.168.10.32  -g


ipvsadm -a -t 192.168.10.70:80 -r 192.168.10.34  -g


配置 Real server1 


 cp ifcfg-lo ifcfg-lo:1


cat ifcfg-lo:1



DEVICE=lo:1

IPADDR=192.168.10.70

NETMASK=255.255.255.255

NETWORK=127.0.0.0

# If you're having problems with gated making 127.0.0.0/8 a martian,

# you can change this to something else (255.255.255.255, for example)

BROADCAST=127.255.255.255

ONBOOT=yes

NAME=loopback


关闭arp 转发 


echo 1 > /proc/sys/net/ipv4/conf/eth1/arp_ignore  临时生效


echo 2 > /proc/sys/net/ipv4/conf/eth1/arp_announce 临时生效 


arp_ignore 为:1 # - 只回答目标 IP 地址是访问本网络接口(eth0)的 ARP 查询请求。

在设置参数的时候将 arp_ignore 设置为 1,意味着当别人的 arp 请求过来的时候,如果接收的网卡设备
上面没有这个 ip,就不做出响应,默认是 0,只要这台机器上面任何一个网卡设备上面有这个 ip,就响应
arp 请求,并发送 mac 地址。
arp_announce (宣告) 为 2
2 - 对查询目标使用最适当的本地地址。例如,如果在 eth0 接口上接受到了一个 VIP 的 arp 请求包。内
核判断这个 VIP 地址是不是 eth0 接口上的 IP 一样。如果一样,则回复这个包。如果不一样,就丢弃不回
应。

永久生效 

vim /etc/sysctl.conf #最后添加
net.ipv4.conf.eth0.arp_ignore = 1
net.ipv4.conf.eth0.arp_announce = 2

sysctl  -p 


安装http 配置测试页面


 yum install httpd -y 


echo "192.168.10.32  realserver 1" > /var/www/html/index.html

----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------


配置 Real server2


 cp ifcfg-lo ifcfg-lo:1


cat ifcfg-lo:1



DEVICE=lo:1

IPADDR=192.168.10.70

NETMASK=255.255.255.255

NETWORK=127.0.0.0

# If you're having problems with gated making 127.0.0.0/8 a martian,

# you can change this to something else (255.255.255.255, for example)

BROADCAST=127.255.255.255

ONBOOT=yes

NAME=loopback


关闭arp 转发 


echo 1 > /proc/sys/net/ipv4/conf/eth1/arp_ignore  临时生效


echo 2 > /proc/sys/net/ipv4/conf/eth1/arp_announce 临时生效 


永久生效 

vim /etc/sysctl.conf #最后添加
net.ipv4.conf.eth0.arp_ignore = 1
net.ipv4.conf.eth0.arp_announce = 2

sysctl  -p 


安装http 配置测试页面


 yum install httpd -y 


echo "192.168.10.34 realserver 2 " > /var/www/html/index.html


测试 real-server1  


http://192.168.10.32


Centos 下面 配置LVS的DR模式_第2张图片



测试 real-server2


http://192.168.10.34 


Centos 下面 配置LVS的DR模式_第3张图片



使用vip 测试


Centos 下面 配置LVS的DR模式_第4张图片


 

Centos 下面 配置LVS的DR模式_第5张图片