注册 登录
  • 欢迎访问"运维那点事",推荐使用Google浏览器访问,可以扫码关注本站的"微信公众号"。
  • 如果您觉得本站对你有帮助,那么可以扫码捐助以帮助本站更好地发展。

LVS负载均衡—DR调度模式测试(三)

集群和存储 彭东稳 4984次浏览 已收录 0个评论

LVS两段式介绍

ipvs:工作在内核空间,TCP/IP协议栈INPUT钩子函数上的框架(Linux2.5内核之后内置ipvs代码,LVS跟netfilter不能同时使用)。

ipvsadm:工作在用户空间,负责管理集群服务编写规则的命令行工具,需要手动安装。

ipvsadm管理命令

一、管理集群服务

1)添加集群

2)修改集群

3)删除集群

参数解释:

使用示例:

二、管理集群中的RealServer

1)添加RealServer

2)修改RealServer

3)删除RealServer

参数解释:

使用示例:

三、查看集群状态

四、清空所有集群服务

五、导入导出ipvs规则

六、查看ipvsadm版本号

LVS DR模式介绍

DR模型是通过路由技术实现的负载均衡技术,而这种模型与NAT模型不同的地方是,负载均衡器接收到数据请求报文后通过改写用户请求报文中的MAC地址为所挑选的RealServer即可。并不修改报文的源地址(CIP)和目标地址(VIP),并将请求报文发送到RealServer, 而RealServer(RS服务器必须额外配置VIP的地址,并关闭所有对VIP发送ARP广播的数据包响应,这样上端路由器发送ARP报文解析VIP地址时只有调度器才能响应并接收ARP数据包而所有的Realserver虽然也有VIP但是不会响应目标地址为VIP的ARP数据包)接收到报文后发现目标地址(VIP)就是自己后直接响应用户,这样就大大的减少负载均衡器的压力,在生产环境中DR模型也是用的最多的一种LVS调度模式,比NAT模型快10倍不止。

为了避免RealServer的VIP地址响应上端ARP报文请求在Linux内核中引入了一种机制,对于Linux系统而言IP地址是系统的而不是网卡的,所以可以最简单的实现方式也就是把RIP地址设置在对外提供服务的网卡上,如ETH0。VIP地址设置在loopback的别名上loopback:0上,然后通过调整Linux内核ARP栈在响应外部数据包请求的规则,如果接收的ARP报文目标地址不是Eth0上的RIP地址主机就不予相应。

需调整以下4个内核参数:

all_ignore

arp_ignore:定义接收到app请求时的响应级别,默认是0。

0:表示只要本地配置的有相应地址就给与响应。

1:表示仅在请求的目标地址配置请求到达的接口上的时候才给与相应。

all_announce

arp_announce:定义将自己地址向外通告时的通告级别,默认是0。

0:表示将本地任何接口的任何地址向外通告。

1:表示尽可能试图仅向目标网络通告与其网络匹配的地址。

2:表示仅向与本地接口上地址匹配的网络进行通告。

注意:Linux路由策略上默认有这样一种行为,响应报文的源地址一般会配置为报文流出接口的地址,这样一来客户端访问的目标地址是VIP经过调度器转发给RealServer后,如果响应的目标地址是Eth0接口的RIP,而客户端没有访问RIP所以拒绝接收相应数据包,所以还需要一种路由策略,必须保证访问数据包的目的地址如果是VIP,那么RealServer响应数据包的目标地址就必须是loopback上的VIP地址。这就需要额外配置一条独特的路由条目明确说明响应地址是VIP。

DR模型的特点如下:

1)所有的集群节点都必须同一个物理网络中。

2)RIP可以是公有IP也可以是私有IP。

3)负载均衡器只响应进站请求,RealServer自己响应出站请求从而大大地减少调度器压力,因为进站请求数据包一般都很小而出站才是核心。

4)不支持端口映射。

LVS DR模式实验配置

1)环境配置

LVS负载均衡—DR调度模式测试(三)

Client一台,地址为172.16.16.10。

Directory一台,地址为172.16.16.1。

RealServer1一台,安装HTTP服务,地址为172.16.16.2。

RealServer2一台,安装HTTP服务,地址为172.16.16.3。

PS:LVS DR模式下,调度服务器和realserver必须在同一个网段。

2) Directory配置

清空iptables规则避免影响ipvsadm

设置VIP地址

打开路由功能

配置集群管理为加权轮询

添加RealServer条目

查看配置信息

3)RealServer1配置

安装nginx

设置RIP地址

调整网卡响应机制(目标地址不是ETH0接口地址统统拒绝响应)

在loopback上设置VIP地址只用于响应数据包

设置路由策略如果目标地址访问的是VIP那么响应地址就设为lo:0的地址

4)Realserver2配置

安装nginx

设置RIP地址

调整网卡响应机制(目标地址不是ETH0接口地址统统拒绝响应)

在loopback上设置VIP地址只用于响应数据包

设置路由策略如果目标地址访问的是VIP那么响应地址就设为lo:0的地址

5)测试效果

可以使用客户端访问172.16.16.1查看轮询访问变化,如下:

或者使用ab压力测试访问172.16.16.1查看加权轮询变化。

查看当前连接数

查看统计信息

由于是DR模式,所以当访问几次之后,可以看到,指标Conns、InPkts、InBytes都有数据,而OutPkts、OutBytes没有数据。因为DR模式下进数据包是经过调度器,而出去的包是realserver直接跟client响应的。而DR模式则不然。

最后,还可以更改RealServer的权重,再使用AB压力测试一下,看看统计信息是否跟权重调整的对比。

PS:你在测试过程中,当LVS调度算法使用轮询或加权轮询默认时,如果你使用浏览器(同一个IP)访问VIP,可能会出现跟你想象的轮询调度不一样的结果,那就是一直刷新网页却无法轮询,每次都需要等待2分钟才有轮询效果。而如果你使用curl这种工具进行访问VIP则可以每次都轮询,主要因为浏览器默认使用了keepalive,而curl没有使用,当然这是LVS的默认特性,详情请看LVS负载均衡—tcp keepalive问题分析?

DR模式服务控制脚本

Director脚本

RealServer脚本

LVS DR模式实验至此结束。

私网地址DR模式图

LVS负载均衡—DR调度模式测试(三)


如果您觉得本站对你有帮助,那么可以支付宝扫码捐助以帮助本站更好地发展,在此谢过。
喜欢 (2)or分享 (0)
关于作者:

您必须 登录 才能发表评论!