总结一下学到的 LVS 相关知识( NAT 模式)

LVS,即 Linux Virtual Server 的简称,是 Linux 下用来实现负载均衡的一个项目。它支持三种负载模式,分别为 NAT 、 DR 以及 TUN 。

注意,我这里讲的都是针对的 2.6 的内核, 2.4 、 2.2 、 2.0 版内核的实现方法和配置方法都各有不一样的地方。还好我不需要维护历史遗留系统(擦汗)。

首先是最简单的 NAT 模式。这种模式跟普通的 NAT 防火墙的原理差不多,只不过它会根据指定的分配策略,为每一个新的客户端连接选择一个不同的真实服务,而不是像 NAT 防火墙那样只映射到后台的同一个真实服务。

这种模式下最常用的部署方式为,负载均衡机器上分别启用两块网卡,一块外网,一块内网。当然一块网卡也可以,然后在这块网卡上配两个地址。这里假设外网地址为 192.168.0.1 ,内网地址为 192.168.1.1 。两个真实服务器的地址分别为 192.168.1.2 以及 192.168.1.3

这样,要对两台服务器的 SSH 服务进行负载均衡的话,负载机器上要执行的命令如下(当然你得先安装 ipvsadm 这个命令才行。负载功能的实现还是在内核中做的,跟 iptables 一样):

1
$ sudo ipvsadm -A -t 192.168.0.1:22 -s rr

-A 表示增加一个新的负载均衡服务,一台负载均衡器上可以同时对多个服务进行负载; -t 表示这是一个 TCP 服务; -s rr 表示选择 Round Robin 分配策略。 Round Robin 是最简单的一种分配策略,表示在每台真实服务器间进行轮流选择;其他还有最少连接等策略。

1
$ sudo ipvsadm -a -t 192.168.0.1:22 -r 192.168.1.2:22 -m

-a 表示为指定的负载服务增加一个新的真实服务; -t 同上; -r 指定真实服务的地址和端口; -m 则表示这个真实服务采用的是 NAT 模式的负载均衡。

1
$ sudo ipvsadm -a -t 192.168.0.1:22 -r 192.168.1.3:22 -m

这样负载均衡服务就配置好了。当然,记得还要打开系统的 IP 转发功能,不管你用的是哪种负载均衡。真实服务器上则还需要配置路由规则,把回给客户端的路由通过 192.168.1.1 这个网关进行发送(不指定网关地址,只指定网口是不行的):

1
$ sudo route add -net 192.168.0.0/24 gw 192.168.1.1

这种模式的优点,当然就在于配置简单啦,跟配置 NAT 防火墙基本相同,缺点是有对网络报文的额外处理(替换目的地址)的开销。不过据说 2.6 的内核其开销已经很小了。

用如下命令可以查看当前的负载状态:

1
$ sudo ipvsadm -l -n

这里有一点要说的是,当负载的是 UDP 服务(如 OpenVPN )时,建立起来的连接会显示在“非活动连接”那一栏,不知道为什么。

 
comments powered by Disqus