LVS的DR模型

 或许你可以先看看最下面的关于ipvsadm命令介绍   (0 。0)~

 关于LVS:LVS是Linux Virtual Server的简称,也就是Linux虚拟服务器。这就要说起一个技术大牛章文嵩博士了,章博士从98年发起到现在已经是一个很成熟了的项目了。使用LVS的目的是想实现一个高可用的linux集群,让它具有可扩展性和可操作性,让廉价的成本发挥最优的性能。IPVS实现负载均衡机制有三种,分别是NAT、TUN和DR,下面来试一试DR模型的负载均衡。

 LVS的NAT,DR和TNU模型简介:Virtual Server via Direct Routing

 要求:DR这种方式是三种负载调度机制中性能最高最好的,但是必须要求Director ServerReal Server都有一块网卡连在同一物理网段上。

用直接路由技术实现虚拟服务器。LVS的模型还有一种是NAT工作模式,NAT大意为地址转换的意思,一般用来把公网IP转换为私网IP,但是DR模型不涉及转换地址的问题。

 在DR模型中VS(虚拟服务器)和RS(real server真实的服务器)使用同一个IP来对外服务,但RS对IP的ARP保持静默,而VS接收所有的请求且全部分发给RS,在DR模型中VS只负责接收请求RS处理请求,且回应报文不经过VS这也是大大减轻了VS的负担。

  1.用户请求先到达VS的时候先进入PREROUTING链,此时报文源IP为客户端IP,目标为自己的IP。

  2.PREROUTING链检查发现目标为自己的IP之后发给INPUT链。

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

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

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

  6.响应报文到达客户端。

DR的特点:

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

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

  3、RS跟Director Server必项在同一个物理网络中

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

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

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

  7、RS的网关绝丌允许指吐DIP(因为我们丌允许他经过director)

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


下面准备了三台机器实验,两个为RS一个为VS。

在VS的上的配置:

ifconfig  eth0:0 192.168.200.100 broadcast 192.168.200.100 netmask 255.255.255.255 up   #本身192.168.200.100这个地址是不存在的,绑定到了eth0上

route add -host 192.168.200.100 dev eth0:0

ipvsadm -A -t 192.168.200.100:80 -s rr   #添加一条虚拟主机的记录

ipvsadm -a -t 192.168.200.100:80 -r 192.168.200.78:80 -g -w 1

ipvsadm -a -t 192.168.200.100:80 -r 192.168.200.79:80 -g -w 1    #添加两条真实主机的的记录(IP78和79为真实主机的IP)

好了现在该添加RS的命令了:

ifconfig lo:0 192.168.200.100 broadcast 192.168.200.100  netmask 255.255.255.255 up #设置lo网卡IP

route add -host 192.168.200.100  lo:0    #接收IP

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

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

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

#关闭arp应答

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

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

两台RS都是同样的配置,配置完我在两台RS的nginx服务下写了个index.html的简单文件内容为echo centos78 > index.html 和echo centos78 > index.html来区别。


访问相同的IP出现了不同的页面(专门让内容不一样好区分),说明实验成功了。



关于ipvsadm命令:

这个命令需要另外安装!!!!

-A --add-service在服务器列表中新添加一条新的虚拟服务器记录

-t 表示为tcp服务

-u 表示为udp服务

-s --scheduler 使用的调度算法, rr | wrr | lc | wlc | lblb | lblcr | dh | sh |

sed | nq 默认调度算法是 wlc

ipvsadm -A -t 192.168.1.2:80 -s wlc

-a --add-server #在服务器表中添加一条新的真实主机记录

-t --tcp-service 说明虚拟服务器提供tcp服务

-u --udp-service 说明虚拟服务器提供udp服务

-r --real-server 真实服务器地址

-m --masquerading 指定LVS工作模式为NAT模式

-w --weight 真实服务器的权值

-g --gatewaying 指定LVS工作模式为直接路由器模式(也是LVS默认的模式)

-i --ip 指定LVS的工作模式为隧道模式

-p 会话保持时间,定义流量呗转到同一个realserver的会话存留时间

-E –edit-service 编辑内核虚拟服务器表中的一条虚拟服务器记录。

-D –delete-service 删除内核虚拟服务器表中的一条虚拟服务器记录。

-C –clear 清除内核虚拟服务器表中的所有记录。

-R –restore 恢复虚拟服务器规则

-S –save 保存虚拟服务器规则,输出为-R 选项可读的格式

-e –edit-server 编辑一条虚拟服务器记录中的某条真实服务器记录

-d –delete-server 删除一条虚拟服务器记录中的某条真实服务器记录

-L|-l –list 显示内核虚拟服务器表

-Z –zero 虚拟服务表计数器清零(清空当前的连接数量等)