欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

LVS的DR模式实现负载均衡

程序员文章站 2024-02-01 14:47:28
...

一:DR工作模式的工作流程:

LVS的DR模式实现负载均衡

(a)当用户请求到达DirectorServer,此时请求的数据报文会先到内核空间的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地址,那么此时数据包将会发至RealServer。

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

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

二:DR特点;

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

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

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

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

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

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

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

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

三:具体实现;

1、环境准备:一台虚拟机做director,两台real server

LVS的DR模式实现负载均衡

2、director负载均衡器配置;

[aaa@qq.com ~]# ifconfig eth0:0 172.17.252.225 broadcast 172.17.252.225 up     #将VIP配置到本地网卡别名,并只广播自己
[aaa@qq.com ~]# route add -host 172.17.252.225 dev eth0:0                      #配置VIP路由
[aaa@qq.com ~]# ipvsadm -A -t 172.17.252.225:80 -s wrr                         #开启基于80端口的调度服务,调度方式为wrr
[aaa@qq.com ~]# ipvsadm -a -t 172.17.252.225:80 -r 172.17.200.106:80 -g -w 1   #配置两台后端web服务real server,-g:DR工作模式,-w:权重(此处配为1)
[aaa@qq.com ~]# ipvsadm -a -t 172.17.252.225:80 -r 172.17.250.111:80 -g -w 1
[aaa@qq.com ~]# ipvsadm -Ln                                                    #可查看到港配置的规则
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
 -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  172.17.252.225:80 wrr
 -> 172.17.200.106:80            Route   1      0          0         
-> 172.17.250.111:80            Route   1      0          0
[aaa@qq.com ~]# vim /etc/sysctl.conf                                          #然后修改配置文件,使其支持转发
net.ipv4.ip_forward = 1                                                         #centos 7里需要手动添加此行,Centos 6中直接修改
[aaa@qq.com ~]# sysctl -p                                                     #该命令使修改的配置文件生效,并显示结果
net.ipv4.ip_forward = 1
net.ipv4.conf.default.rp_filter = 1
net.ipv4.conf.default.accept_source_route = 0
kernel.sysrq = 0
kernel.core_uses_pid = 1
net.ipv4.tcp_syncookies = 1
kernel.msgmnb = 65536
kernel.msgmax = 65536
kernel.shmmax = 68719476736
kernel.shmall = 4294967296

3、后端web服务real server的配置;

[aaa@qq.com ~]# ifconfig lo:0 172.17.252.225 broadcast 172.17.252.225 netmask 255.255.255.255 up   #将VIP配置到本地回环网卡lo上,并只广播自己
[aaa@qq.com ~]# route add -host 172.17.252.225 lo:0                                                #配置本地回环网卡路由
[aaa@qq.com ~]# echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignore            #只回答来访问本地地址的ARP查询请求
[aaa@qq.com ~]# echo "2" >/proc/sys/net/ipv4/conf/lo/arp_announce          #不看IP数据包的源地址,只要目的MAC地址是本地地址就行
[aaa@qq.com ~]# echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore           #只有在接收请求报文的接口上配有请求的目标IP时,才响应
[aaa@qq.com ~]# echo "2" >/proc/sys/net/ipv4/conf/all/arp_announce         #必须避免将接口信息向非本网络进行通告

我这里用的Apache测试的,所以,在三台机器上分别启动httpd服务,若是有php页面的话,可以将php服务、数据库服务都启动,

四:测试;

在两个real server的/var/www/html下建两个index.html的页面,不同内容,用于区分director调度出不同的页面,测试是否配置成功;

方法:

1、直接在网页输入vip进行访问;

2、或者用另外一台虚拟机(除本实验用到的三台外的其他虚拟机)进行curl

五:实验总结;

相较于NAT模式,DR模式减轻了director负载均衡器的负担,不用进出都经过它,出的时候直接通过real server中的VIP去返回客户端响应;

关于实验中用到的ipvsadm命令;

其程序包来自ipvsadm,用法:

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

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

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

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

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

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

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

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

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

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

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

eg:ipvsadm -A -t 192.168.1.2:80 -s wlc               -----》加director server

eg:ipvsadm -a -t192.168.1.2:80 -r192.168.2.10:80-m -w 1   ----》加real server