首页 > 代码库 > 负载均衡之LVS/NAT模式

负载均衡之LVS/NAT模式

1LVSNAT简介

LVS Linux Virtual Server的简称,在实际环境中经常作为B/S结构的网络应用中的负载均衡器来使用,工作在7层网络模型中的网络层,也就是通常说的IP层,由于数据的处理是在Linux内核态完成的,比起在第七层工作的负载均衡设备来说,理论上性能要高一些。

NAT Network AddressTranslation,网络地址转换的简称,借助于NAT,私有(保留)地址的"内部"网络通过路由器发送数据包时,私有地址被转换成合法的IP地址,一个局域网只需使用少量IP地址(甚至是1个)即可实现私有地址网络内所有计算机与Internet的通信需求。

2、简单的LVS/NAT架构

下面是我简单画的LVS/NAT在应用时的部署架构:

 技术分享

我们先假设百度用的是这种架构模型(实际上百度是什么架构我也没有实地调研过)

然后来模拟下用户访问百度的情况。

1.用户在浏览器输入http://www.baidu.com,用户的电脑通过网络询问DNSwww.baidu.com域名的IP地址。

2.DNS服务器通过用户的地址,在服务器列表里选择一个可能是距离用户最近的LVS虚拟服务IP地址或者一个按照轮询策略的地址。

可以用pingwww.baidu.com,能看到会返回一个IP地址,这个IP地址就是我们DNS返回给我们的地址。也可以用dig命令,能够看到www.baidu.com实际对应了3IP地址

3.用户浏览器通过DNS获得的IP地址,访问LVS服务器

4.进入LVS/NAT模式,LVS通过NAT进行转换,将数据包提供给APACHE或者nginx构建的反向代理服务器;

5.反向代理服务器最终将请求送给应用服务器;

6.应用服务器完成用户请求之后,按照从下往上的顺序反馈数据,最终完成一个请求。

3、一些特点和特性

首先,要开启服务器被允许转发数据包:

Echo 1 > /proc/sys/net/ipv4/ip_forward

然后,需要检查实际服务器是否已经将NAT服务器作为默认网关,没有就添加:

Route add default gw 10.0.0.50

10.0.0.50 NAT服务器地址。

 

要用LVS NAT模式,执行这些命令行进行操作:

Ipvsadm –a –t 122.12.12.12:80 –s rr

Ipvsadm –a –t 122.12.12.12:80 –r 10.0.0.100:8000 –m

Ipvsadm –a –t 122.12.12.12:80 –r 10.0.0.101:8000 –m

第一行添加一台虚拟负载均衡调度器;-s rr采用简单轮询的RR调度方法;

后面两行用来为调度器添加实际服务器,其中-m表示采用NAT方式转发数据包。

 

我们在这里使用RR调度策略,是一种静态策略。在实际服务器承载能力相当的情况下,表现良好。如果服务不一样,那么需要调整实际应用服务器的weight值。

 

 

4LVS/NAT模式的缺点

1,要对进入和流出集群的网络包进行改写包头地址的工作,在负荷比较重的时候会影响整个集群的性能,负载均衡器容易成为瓶颈;

2,对提供下载的较大站点,常用的100M带宽就不够了,要么使用更加大的带宽,或者使用硬件设备,但是这些方法花费极大;为了解决NAT模式出现瓶颈,可以使用DR(直接路由)方式来改进。

负载均衡之LVS/NAT模式