LVS的DR模式搭建

LVS的工作模式有三种:LVS/NAT;LVS/DR;LVS/Tun

本文主要讲的是LVS/DR模式

LVS-DR模型的原理

重将请求报文的目标MAC地址设定为挑选出的RS的MAC地址

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地址解析请求。

 LVS-DR模式的搭建过程

1、准备工作:

准备三台机器,IP如下

dir机器(director调度服务器)

192.168.182.129

rs机器(real server 真实服务器)

192.168.182.130

rs机器(real server 真实服务器)

192.168.182.132

VIP(虚拟IP)

192.168.182.136

2、部署ipvsadm 

在调度服务器192.168.182.129上安装ipvsadm

yum install -y ipvsadm

3、安装nginx

在两台真实服务器上安装nginx

安装nginx的目的是为了验证LVS的转发是否成功,nginx要安装在真实服务器上

安装过程略,可参考博客:https://blog.csdn.net/u014642915/article/details/60870058

两个nginx的主页面写入不同的信息用来进行验证负载:

echo "182.132" >/usr/local/nginx/html/index.html

echo "182.130" >/usr/local/nginx/html/index.html

nginx默认开启80端口,如果需要开启其他端口需修改配置文件nginx.conf进行修改

4、进行DIR&SR的配置及启动

调度服务器192.168.182.129 上编写脚本:
vim /etc/init.d/lvsrs.sh

#! /bin/bash
#director服务器上开启路由转发功能
echo 1 > /proc/sys/net/ipv4/ip_forward
#调用ipvsadm命令,填写实际路径可用which ipvsadm来查看实际路径
ipv=/sbin/ipvsadm
vip=192.168.182.136
rs1=192.168.182.130
rs2=192.168.182.132
#注意这里的网卡名字
ifdown etho   #为了不让网卡设置多次
ifup etho
ifconfig etho:2 $vip broadcast $vip netmask 255.255.255.255 up
#配置到vip的路由
route add -host $vip dev etho:2
#配置ipvsadm,调度算法rr;-w 1表示开启权重,80表示nginx的80端口
$ipv -C
$ipv -A -t $vip:80 -s rr
$ipv -a -t $vip:80 -r $rs1:80 -g -w 1
$ipv -a -t $vip:80 -r $rs2:80 -g -w 1

两台真实服务器192.168.182.130、192.168.182.132上编写脚本

vim /etc/init.d/lvsrs.sh

#/bin/bash
vip=192.168.182.136
#把vip绑定在lo上,是为了实现rs直接把结果返回给客户端
#避免重复设置
ifconfig lo:0 down
ifconfig lo:0 $vip broadcast $vip netmask 255.255.255.255 up
route add -host $vip lo:0
#以下操作为更改arp内核参数,目的是为了让rs顺利发送mac地址给客户端
echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignore
echo "2" >/proc/sys/net/ipv4/conf/lo/arp_announce
echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore
echo "2" >/proc/sys/net/ipv4/conf/all/arp_announce

说明:其中netmask 255.255.255.255 up 一定要这样写,不然调度服务和真实服务之前的网络会不通

 真实服务器上lvsrs脚本的另一种写法
vim /etc/init.d/lvsrs

#/bin/bash
case "$1" in
start)
echo "Start LVS of realserver"
vip=192.168.182.136
#把vip绑定在lo上,是为了实现rs直接把结果返回给客户端
#避免重复设置
ifconfig lo:0 down
ifconfig lo:0 $vip broadcast $vip netmask 255.255.255.255 up
route add -host $vip lo:0
#以下操作为更改arp内核参数,目的是为了让rs顺利发送mac地址给客户端
echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignore
echo "2" >/proc/sys/net/ipv4/conf/lo/arp_announce
echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore
echo "2" >/proc/sys/net/ipv4/conf/all/arp_announce
;;
stop)
echo "Close LVS Director realserver"
ifconfig lo:0 down
route del -net $vip netmask 255.255.255.255
echo 0 > /proc/sys/net/ipv4/conf/lo/arp_ignore
echo 0 > /proc/sys/net/ipv4/conf/lo/arp_announce
echo 0 > /proc/sys/net/ipv4/conf/all/arp_ignore
echo 0 > /proc/sys/net/ipv4/conf/all/arp_announce
;;
*)
echo "$0: Usage: $0 {start|stop}"
exit 1
esac

#给其执行权限chmod +x /etc/init.d/lvsrs
#启动
/etc/init.d/lvsrs start 
#关闭
/etc/init.d/lvsrs stop
调度服务器的lvsrs脚本也可以参照上面的格式,请自行书写

5、DIR&SR进行检查

DIR上进行两项检查,执行两个命令:ifconfig  和 ip add

ifconfig

LVS的DR模式搭建_第2张图片

ip add

LVS的DR模式搭建_第3张图片

添加了一个虚拟ip(VIP) eth0:2 地址是192.168.182.136 

SR上进行一项检查:

ifconfig

LVS的DR模式搭建_第4张图片

添加了一个虚拟ip(VIP) lo:0 地址是192.168.182.136 

6、进行验证

1.直接访问http://192.168.182.136:80  看能否访问

2.关闭其中一个nginx 看是否能继续访问另一个nginx的页面

 

感谢博主:https://blog.csdn.net/Ki8Qzvka6Gz4n450m/article/details/79119665

你可能感兴趣的:(负载均衡)