LVS之三种工作模式

二、三种工作模式

 
在这里插入图片描述
 
 

2.1 LVS/NAT模式

在这里插入图片描述

 

NAT

在这里插入图片描述

 
 
 

2.1.1 工作流程

1 ) 当用户请求到达Director Server,此时请求的数据报文会先到内核空间的PREROUTING链。 此时报文的源IP为CIP,目标IP为VIP

2 ) PREROUTING检查发现数据包的目标IP是本机,将数据包送至INPUT链

3 ) IPVS比对数据包请求的服务是否为集群服务,若是,修改数据包的目标IP地址为后端服务器IP,然后将数据包发至POSTROUTING链。 此时报文的源IP为CIP,目标IP为RIP

4 ) POSTROUTING链通过选路,将数据包发送给Real Server

5 ) Real Server比对发现目标为自己的IP,开始构建响应报文发回给Director Server。 此时报文的源IP为RIP,目标IP为CIP

6 ) Director Server在响应客户端前,此时会将源IP地址修改为自己的VIP地址,然后响应给客户端。 此时报文的源IP为VIP,目标IP为CIP

 
 

2.1.2 特性

1 ) RS应该使用私有地址,RS的网关必须指向DIP

2 )DIP和RIP必须在同一个网段内

3 ) 请求和响应报文都需要经过Director Server,高负载场景中,Director Server易成为性能瓶颈

4 ) 支持端口映射

5 ) RS可以使用任意操作系统

缺陷:对Director Server压力会比较大,请求和响应都需经过director server

 
 

2.2 LVS/DR模式

在这里插入图片描述

 

DR

在这里插入图片描述

 
 

2.2.1 工作流程

1 ) 当用户请求到达Director Server,此时请求的数据报文会先到内核空间的PREROUTING链。 此时报文的源IP为CIP,目标IP为VIP

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 ) 响应报文最终送达至客户端

 
 

2.2.2 特性

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

1.在前端路由器做静态地址路由绑定,将对于VIP的地址仅路由到Director Server

2.在arp的层次上实现在ARP解析时做防火墙规则,过滤RS响应ARP请求。这是由iptables提供的

3.修改RS上内核参数(arp_ignore和arp_announce)将RS上的VIP配置在lo接口的别名上,并限制其不能响应对VIP地址解析请求。

  • arp_ignore
    定义对目标地址为本地IP的ARP询问不同的应答模式
  • 原版说明
arp_ignore - INTEGER
Define different modes for sending replies in response to
received ARP requests that resolve local target IP addresses:
0 - (default): reply for any local target IP address, configured
on any interface
1 - reply only if the target IP address is local address
configured on the incoming interface
2 - reply only if the target IP address is local address
configured on the incoming interface and both with the
sender's IP address are part from same subnet on this interface
3 - do not reply for local addresses configured with scope host,
only resolutions for global and link addresses are replied
4-7 - reserved
8 - do not reply for all local addresses

The max value from conf/{all,interface}/arp_ignore is used
when ARP request is received on the {interface}

 
参数说明

		0 - (默认值): 回应任何网络接口上对任何本地IP地址的arp查询请求 
		1 - 只回答目标IP地址是来访网络接口本地地址的ARP查询请求 
		2 - 只回答目标IP地址是来访网络接口本地地址的ARP查询请求,且来访IP必须在该网络接口的子网段内 
		3 - 不回应该网络界面的arp请求,而只对设置的唯一和连接地址做出回应 
		4-7 - 保留未使用 
		8 - 不回应所有(本地地址)的arp查询

 

  • arp_announce
    对网络接口上,本地IP地址的发出的,ARP回应,作出相应级别的限制: 确定不同程度的限制,宣布对来自本地源IP地址发出Arp请求的接口
  • 原版说明
arp_announce - INTEGER
Define different restriction levels for announcing the local
source IP address from IP packets in ARP requests sent on
interface:
0 - (default) Use any local address, configured on any interface
1 - Try to avoid local addresses that are not in the target's
subnet for this interface. This mode is useful when target
hosts reachable via this interface require the source IP
address in ARP requests to be part of their logical network
configured on the receiving interface. When we generate the
request we will check all our subnets that include the
target IP and will preserve the source address if it is from
such subnet. If there is no such subnet we select source
address according to the rules for level 2.
2 - Always use the best local address for this target.
In this mode we ignore the source address in the IP packet
and try to select local address that we prefer for talks with
the target host. Such local address is selected by looking
for primary IP addresses on all our subnets on the outgoing
interface that include the target IP address. If no suitable
local address is found we select the first local address
we have on the outgoing interface or on all other interfaces,
with the hope we will receive reply for our request and
even sometimes no matter the source IP address we announce.

The max value from conf/{all,interface}/arp_announce is used.

Increasing the restriction level gives more chance for
receiving answer from the resolved target while decreasing
the level announces more valid sender's information.

 
参数说明

		0 - (默认) 在任意网络接口(eth0,eth1,lo)上的任何本地地址 
		1 - 尽量避免不在该网络接口子网段的本地地址做出arp回应. 当发起ARP请求的源IP地址是被设置应该经由路由达到此网络接口的时候很有用.此时会检查来访IP是否为所有接口上的子网段内ip之一.如果改来访IP不属于各个网络接口上的子网段内,那么将采用级别2的方式来进行处理. 
		2 - 对查询目标使用最适当的本地地址.在此模式下将忽略这个IP数据包的源地址并尝试选择与能与该地址通信的本地地址.首要是选择所有的网络接口的子网中外出访问子网中包含该目标IP地址的本地地址. 如果没有合适的地址被发现,将选择当前的发送网络接口或其他的有可能接受到该ARP回应的网络接口来进行发送.	

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

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

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

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

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

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

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

不足:LVS-RS间必须在同一个VLAN;RS上绑定VIP,风险大;

 
 

2.3 LVS/TUNNEL模式(常用)

在这里插入图片描述

 
tunnel

在这里插入图片描述

 
 

2.3.1 工作流程

1.当用户请求到达Director Server,此时请求的数据报文会先到内核空间的PREROUTING链。 此时报文的源IP为CIP,目标IP为VIP 。

2.PREROUTING检查发现数据包的目标IP是本机,将数据包送至INPUT链

3.IPVS比对数据包请求的服务是否为集群服务,若是,在请求报文的首部再次封装一层IP报文,封装源IP为为DIP,目标IP为RIP。然后发至POSTROUTING链。 此时源IP为DIP,目标IP为RIP

4.POSTROUTING链根据最新封装的IP报文,将数据包发至RS(因为在外层封装多了一层IP首部,所以可以理解为此时通过隧道传输)。 此时源IP为DIP,目标IP为RIP

5.RS接收到报文后发现是自己的IP地址,就将报文接收下来,拆除掉最外层的IP后,会发现里面还有一层IP首部,而且目标是自己的lo接口VIP,那么此时RS开始处理此请求,处理完成之后,通过lo接口送给eth0网卡,然后向外传递。 此时的源IP地址为VIP,目标IP为CIP

6.响应报文最终送达至客户端

 
 

2.3.2 特性

​ RIP、VIP、DIP全是公网地址
​ RS的网关不会也不可能指向DIP
​ 所有的请求报文经由Director Server,但响应报文必须不能经过Director Server
​ 不支持端口映射
​ RS的系统必须支持隧道

不足:RS配置复杂(IPIP模块等);RS上绑定VIP,风险大;

 
 

2.4 存在的问题

(一)UDP 服务状态检查问题

​ 在不配置服务状态检查(MONITORING SCRIPTS)脚本时,LVS 对 TCP 服务采用发送 SYNC 包来确认服务端口是否正常,但对于无连接状态的 UDP 服务就无法这么做,因此针对 UDP 服务需要编写专门的业务测试脚本来监控应用状态,否则将失去业务故障自动切换功能。

​ 处理方式:编写专用业务应用测试脚本来实现 UDP 服务状态检查的功能。

(二)DR 模式下 UDP 服务问题

​ 在 DR 模式下,由于 UDP 是无连接状态的,当 RS 回应结果时默认采用原先的地址,Client 在转发数据包时,源地址不是原先请求的 IP(VS IP),所以会存在问题。

​ 处理方式:RS 程序在提供相应的 UDP 服务时强制绑定 VS IP(默认是绑定0.0.0.0/*)。

(三)DR 模式下 RS ARP 处理问题

​ 这个问题在 RedHat 的手册中是按照 arptables 来处理,按手册的说明配置,在实际测试中还是存在不稳定的问题。使用修改 linux 内核参数的方式来处理,同样存在问题。这个问题估计是 LVS 软件包的 bug,预计新版本会解决该问题。

​ 处理方式:尽量使用 NAT 模式。

 
 

2.5 FULLNAT

在这里插入图片描述

 
 

2.6 IPVS优化

– 多队列网卡,1个队列绑定到1个cpu核上

– 增大session hash table

– 增大session hash bucket lock个数

– 避免路由cache条目过多

– LOCKLESS

– 硬件:Westmere(第二代nehalem)/bios配置

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值