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
一样):
|
|
-A
表示增加一个新的负载均衡服务,一台负载均衡器上可以同时对多个服务进行负载; -t
表示这是一个 TCP 服务; -s rr
表示选择 Round Robin 分配策略。 Round Robin 是最简单的一种分配策略,表示在每台真实服务器间进行轮流选择;其他还有最少连接等策略。
|
|
-a
表示为指定的负载服务增加一个新的真实服务; -t
同上; -r
指定真实服务的地址和端口; -m
则表示这个真实服务采用的是 NAT 模式的负载均衡。
|
|
这样负载均衡服务就配置好了。当然,记得还要打开系统的 IP 转发功能,不管你用的是哪种负载均衡。真实服务器上则还需要配置路由规则,把回给客户端的路由通过 192.168.1.1
这个网关进行发送(不指定网关地址,只指定网口是不行的):
|
|
这种模式的优点,当然就在于配置简单啦,跟配置 NAT 防火墙基本相同,缺点是有对网络报文的额外处理(替换目的地址)的开销。不过据说 2.6 的内核其开销已经很小了。
用如下命令可以查看当前的负载状态:
|
|
这里有一点要说的是,当负载的是 UDP 服务(如 OpenVPN )时,建立起来的连接会显示在“非活动连接”那一栏,不知道为什么。