dpvs 的几种模式
FNAT在两个接口之间进行转发。假设一个是WAN接口(dpdk1),另一个是LAN接口(dpdk0)
配置包括:
(1)用于DPDK局域网(LAN)/广域网(WAN)的ip地址和路由。
(2)WAN接口上的VIP(dpdk1)。
(3)FNAT服务(vip:vport)及相关RS(Real Server)。
(4)FNAT模式至少需要一个局域网接口(dpdk0)。
FNAT转换需要LIP或Local-IP,客户的CIP:cport将替换为LIP:lport,而VIP:vport将被翻译成RS的RIP:rport
- NAT技术将请求的报文和响应的报文都需要通过LB进行地址改写,因此网站访问量比较大的时候LB负载均衡调度器有比较大的瓶颈,一般要求最多之能10-20台节点
- 只需要在LB上配置一个公网IP地址就可以了。
- 每台内部的节点服务器的网关地址必须是调度器LB的内网地址。
- NAT模式支持对IP地址和端口进行转换。即用户请求的端口和真实服务器的端口可以不一致。
DNAT 模式
DNAT为双臂模式。
拓扑: 如上图所示,各节点的IP地址如下:
- client: 192.168.0.46
- VIP: 192.168.0.89
- DPVS local ip: 192.168.0.66, 10.140.31.48
- RS1: 10.140.18.33
- RS2: 10.140.18.33
可见,所有的IP地址都在一个局域网内。
DR模式
DR是 Direct Routing 的缩写。DR模式是单臂模式。
DR模式中,DPVS改写请求报文的 dst_mac
,将请求发给RS,RS响应后的处理结果直接返回给客户端用户。
拓扑: 如上图所示,各节点的IP地址如下:
- client: 192.168.100.26
- VIP: 192.168.100.254
- DPVS local ip: 192.168.100.1
- RS1: 192.168.100.2, lo接口IP配置为VIP
- RS2: 192.168.100.3,lo接口IP配置为VIP
可见,所有的IP地址都在一个局域网内。
优势:
采用NAT模式时,由于请求和响应的报文必须通过调度器地址重写,当客户请求越来越多时,调度器处理能力将成为瓶颈。
DR模式中,RS将响应处理后的数据直接返客户端。这样调度器就只处理请求入站报文,由于一般网络服务应答数据比请求报文大很多,采用DR模式,集群系统的最大吞吐量可以提高10倍。
DR模式小结:
- 通过在调度器LB上修改数据包的目的MAC地址实现转发。注意源地址仍然是CIP,目的地址仍然是VIP地址。
- 请求的报文经过调度器,而RS响应处理后的报文无需经过调度器LB,因此并发访问量大时使用效率很高(和NAT模式比)
- 因为DR模式是通过MAC地址改写机制实现转发,因此所有RS节点和调度器LB只能在一个局域网里面
- RS主机需要绑定VIP地址在LO接口上,并且需要配置ARP抑制。
- RS节点的默认网关不需要配置成LB,而是直接配置为上级路由的网关,能让RS直接出网就可以。
- 由于DR模式的调度器仅做MAC地址的改写,所以调度器LB就不能改写目标端口,那么RS服务器就得使用和VIP相同的端口提供服务。。
TUN模式
NAT模式不同,TUN与DR模式一样,LB和RS之间的传输不用改写IP地址。
TUN模式把客户请求包封装在一个IP tunnel里面,然后发送给RS节点服务器,节点服务器接收到之后解开IP tunnel,处理响应,然后直接把包通过自己的外网地址发送给客户,不需要经过DPVS。
拓扑: 如上图所示,各节点的IP地址如下:
- client: 10.138.85.23/22
- VIP: 10.140.31.48/32
- DPVS: 10.140.31.254/32 为隧道地址,
- RS1: 10.140.31.48/32 为隧道地址,eth0 10.140.18.33/20
- RS2: 10.140.31.48/32 为隧道地址, eth0 10.40.84.170/21
与underlay DR模式不同,隧道模式中同网段是DPVS与RS之间的隧道地址,通过dpvs和RSs之间的ipip隧道在L2网络上转发数据包。
采用NAT模式时,由于请求和响应的报文必须通过调度器地址重写,当客户请求越来越多时,调度器处理能力将成为瓶颈。为了解决这个问题,调度器把请求的报文通过IP隧道转发到真实的服务器。真实的服务器将响应处理后的数据直接返回给客户端。这样调度器就只处理请求入站报文,由于一般网络服务应答数据比请求报文大很多,采用VS/TUN模式后,集群系统的最大吞吐量可以提高10倍。
Lvs的调度算法决定了如何在集群节点之间分布工作负荷。当director调度器收到来自客户端访问VIP的上的集群服务的入站请求时,director调度器必须决定哪个集群节点应该处理请求。Director调度器用的调度方法基本分为两类:
固定调度算法:rr,wrr,dh,sh
动态调度算法:wlc,lc,lblc,lblcr
算法说明
RR(Round Robin Scheduling)
轮询算法,它将请求依次分配给不同的rs节点,也就是RS节点中均摊分配。这种算法简单,但只适合于RS节点处理性能差不多的情况
WRR(Weighted Round-Robin Scheduling)
加权轮询调度,它将依据不同RS的权值分配任务。权值较高的RS将优先获得任务,并且分配到的连接数将比权值低的RS更多。相同权值的RS得到相同数目的连接数。
WLC(Weighted Least-Connection Scheduling)
加权最小连接数调度,假设各台RS的全职依次为Wi,当前tcp连接数依次为Ti,依次去Ti/Wi为最小的RS作为下一个分配的RS
DH(Destination Hashing Scheduling)
目的地址哈希调度以目的地址为关键字查找一个静态hash表来获得需要的RS
SH(Source Hashing Scheduling)
源地址哈希调度以源地址为关键字查找一个静态hash表来获得需要的RS
LC(Least-Connection Scheduling)
最小连接数调度,IPVS表存储了所有活动的连接。LB会比较将连接请求发送到当前连接最少的RS.
LBLC(Locality-Based Least Connections Scheduling)
基于地址的最小连接数调度:将来自同一个目的地址的请求分配给同一台RS,此时这台服务器是尚未满负荷的。否则就将这个请求分配给连接数最小的RS,并以它作为下一次分配的首先考虑。
LBLCR(Locality-Based Least Connections with Replication Scheduling)
带复制的基于局部性最少链接调度算法也是针对目标IP地址的负载均衡。LBLCR算法先根据请求的目标IP地址找出该目标IP地址对应的服务器组;按“最小连接”原则从该服务器组中选出一台服务器,若服务器没有超载, 将请求发送到该服务器;若服务器超载;则按“最小连接”原则从整个集群中选出一台服务器,将该服务器加入到服务器组中,将请求发送到该服务器。同时,当该 服务器组有一段时间没有被修改,将最忙的服务器从服务器组中删除,以降低复制的程度。
LVS调度算法的生产环境选型:
- 一般的网络服务,如http,mail,mysql等常用的LVS调度算法为:
- 基本轮询调度RR
- 加权最小连接调度WLC
- 加权轮询调度WRR
- 基于局部性的最小连接LBLC和带复制的给予局部性最小连接LBLCR主要适用于web cache和DB cache
- 源地址散列调度SH和目标地址散列调度DH可以结合使用在防火墙集群中,可以保证整个系统的出入口唯一。
实际适用中这些算法的适用范围很多,工作中最好参考内核中的连接调度算法的实现原理,然后根据具体的业务需求合理的选型。