一、VS/DR模式
①.客户端将请求发往前端的负载均衡器,请求报文源地址是CIP,目标地址为VIP。
②.负载均衡器收到报文后,发现请求的是在规则里面存在的地址,那么它将目标MAC改为了RIP的MAC地址,并将此包发送给RS。
③.RS发现请求报文中的目的MAC是自己,就会将次报文接收下来,处理完请求报文后,将响应报文通过lo接口送给eth0网卡直接发送给客户端。
注意:
需要设置lo接口的VIP不能响应本地网络内的arp请求。
优点:
和TUN(隧道模式)一样,负载均衡器也只是分发请求,应答包通过单独的路由方法返回给客户端。与VS-TUN相比,VS-DR这种实现方式不需要隧道结构,因此可以使用大多数操作系统做为物理服务器。
DR模式的效率很高,但是配置稍微复杂一点,因此对于访问量不是特别大的公司可以用haproxy/nginx取代。日1000-2000W PV或者并发请求1万一下都可以考虑用haproxy/nginx。
缺点:
所有 RS 节点和调度器 LB 只能在一个局域网里面。
相比于其他两种模式性能最好!也可以实现跨机房,相对比较困难~
二、实验
1>准备环境
#1、准备三台虚拟机,一台Dserver 端, 两台REserver端
#2、三台主机ip 必须是同一网段
REserver1 端 ip : 192.168.206.4
REserver2 端ip : 192.168.206.5
Dserver 端 ip : 192.168.206.3
#3、 vip (虚拟服务ip) : 192.168.206.22
2> Dserver端 下载 ipvsadm 包
查看
3> 添加对外服务的ip ( vip)
4>添加两台REserver 主机
5>查看
6>配置网卡的子网口 为 vip (ens33 :0 )
&1临时方法
&2永久方法
再编辑一个网卡配置 文件,将DEVICE 改成 ens33:0 即可 回环地址 lo:0 同理
查看
注:执行可能会出现下面情况,找不到 ifconfig 这个命令
#1原因是 sentos7 最小安装 没有自带 ifconfig这个命令的包,我可以来查找一下这个命令所在的包,然后去安装它
#2,通过查找发现它在 net-tools 这个包里面,我们去下载它
#3.查看
再使用 ifconfig 这个命令就可以了
7> 添加静态路由( 访问 192.168.206.22 ,都走 ens33:0 这个网卡)
^1
^2, 查看
添加成功!
REserver 1端 与 REserver 2 端
8> 在回环地址上配置 vip ( REserver 1端 与 REserver 2 端 都需要设置 )
9> 分别添加静态路由
10>定义接受请求的响应的级别与向外通告的级别 ,使它们不能向外宣告!
arp_ignore:定义接收到ARP请求时的响应级别
0:默认,只用本地配置的有响应地址都给予响应
1:仅仅在目标IP是本地地址,并且是配置在请求进来的接口上的时候才给予响应 (仅在请求的目标地址配置请求到达的接口上的时候,才给予响应)
/proc/sys/net/ipv4/conf/lo/arp_ignore
arp_announce:定义将自己的地址向外通告时的级别
0:默认,表示使用配置在任何接口的任何地址向外通告
1:尽量仅向目标网络通告与其网络匹配的地址
2:仅向与本地接口上地址匹配的网络进行通告
/proc/sys/net/ipv4/conf/all/arp_announce
配置如下
REserver1:
REserver2:
11>全部开启 httpd 服务
注:这里使用ansible 开启 REserver1 端 与 REserver2 端 的httpd 服务
@1
@2查看
全部开始成功
12> 测试 (记得在 REserver端创建测试文件)
抓取成功
二、VS/TUN模式
①.客户端将请求发往前端的负载均衡器,请求报文源地址是CIP,目标地址为VIP。
②.负载均衡器收到报文后,发现请求的是在规则里面存在的地址,那么它将在客户端请求报文的首部再封装一层IP报文,将源地址改为DIP,目标地址改为RIP,并将此包发送给RS。
③.RS收到请求报文后,会首先拆开第一层封装,然后发现里面还有一层IP首部的目标地址是自己lo接口上的VIP,所以会处理次请求报文,并将响应报文通过lo接口送给eth0网卡直接发送给客户端。
注意:
需要设置lo接口的VIP不能在公网上出现。
优点:
负载均衡器只负责将请求包分发给后端节点服务器,而RS将应答包直接发给用户。所以,减少了负载均衡器的大量数据流动,负载均衡器不再是系统的瓶颈,就能处理很巨大的请求量,这种方式,一台负载均衡器能够为很多RS进行分发。而且跑在公网上就能进行不同地域的分发。
缺点:
隧道模式的RS节点需要合法IP,这种方式需要所有的服务器支持”IP Tunneling”(IP Encapsulation)协议,服务器可能只局限在部分Linux系统上。
相比于其他两种模式,TUN 模式用的不多