LVS, IPVS

Table of Contents

1. LVS 简介

LVS (Linux Virtual Server) 是由章文嵩主导的开源负载均衡项目,已经被集成到 Linux 内核模块中,它实现了 Level 4 (即运输层)的负载均衡。

LVS 的 IP 负载均衡技术是通过 IPVS (IP Virtual Server)模块来实现的,本文不区分 LVS 和 IPVS。

The Linux Virtual Server Project (LVS) implements layer 4 switching in the Linux Kernel. This allows TCP and UDP sessions to to be load balanced between multiple real servers.

摘自:http://www.ultramonkey.org/papers/lvs_tutorial/html/

An LVS is a group of servers with a director that appear to the outside world (a client on the internet) as one server.

摘自:http://www.austintek.com/LVS/LVS-HOWTO/mini-HOWTO/LVS-mini-HOWTO.html#what

1.1. 安装 ipvsadm

LVS 已经在 Linux 的内核层支持了,不用额外安装软件。不过,我们需要安装一个用户层的 LVS 管理工具 ipvsadm

$ sudo yum install ipvsadm

1.2. 基本术语

下面介绍在 LVS 中常使用的一些术语:
Linux Director: Host with Linux and LVS installed which receives packets from end users and forwards them to real servers.
End User: Host that originates a connection.
Real Server: Host that terminates a connection. This will be running some sort of daemon such as Apache.
Virtual IP Address (VIP): The IP address assigned to a service that a Linux Director will handle.
Real IP Address (RIP): The IP address of a Real Server.

2. LVS 工作模式

LVS 有三种转发数据包的方式:1、LVS NAT,2、Direct Routing,3、IP-IP Encapsulation (Tunnelling)。

LVS NAT 的工作原理如图 1 所示,发往“Linux Director”的数据报文(根据一定负载均衡调度算法,如轮询调度、加权轮询调度、最少连接调度等等)被转发到某一台“Real Server”,做完这个决定后要记下来,以后同一个连接的后续报文都会发往同一台“Real Server”。数据报文从“Real Server”发往“End User”时,也都会经过“Linux Director”。

lvs_nat.png

Figure 1: LVS NAT

LVS NAT 模式有个缺点:无论是请求的数据报文,还是返回的数据报文,都会经过“Linux Director”,请求的数据包一般内容较少,问题不是很大,而返回的数据包,很可能是图片,视频等等,这会给“Linux Director”带来压力。

LVS DR (Direct Routing) 的工作原理如图 2 所示,它的请求数据报文会经过“Linux Director”,而返回数据报文不会经过“Linux Director”。不过,LVS DR 要求“Linux Director”和所有“Real Server”必须在一个广播域,也可以简单的理解为在同一台交换机上。

lvs_dr.png

Figure 2: LVS Direct Routing

关于 LVS 各种工作模式的详细原理,可以参考网文:图解LVS的工作原理

3. LVS NAT 配置实例

下面介绍 LVS NAT 的配置实例,如图 3 所示。

lvs_nat_example.png

Figure 3: LVS NAT Example

“Linux Director”的配置:
1、打开“Linux Director”服务器的 IP 数据报文转发功能(默认是没有打开的):

$ sudo echo 1 > /proc/sys/net/ipv4/ip_forward

2、配置 LVS 的规则列表。
添加一个虚拟服务( -A 表示添加一个虚拟服务, -t 表示虚拟服务监听地址):

$ sudo ipvsadm -A -t 172.17.60.201:80

添加两台“Real Server”,并指定为 NAT 模式( -a 表示添加“Real Server”, -t 表示添加到哪个组, -r 指定真实服务器, -m 表示指定为 NAT 模式):

$ sudo ipvsadm -a -t 172.17.60.201:80 -r 192.168.6.4:80 -m
$ sudo ipvsadm -a -t 172.17.60.201:80 -r 192.168.6.5:80 -m

“Real Server”的配置:
1、为保证返回的数据报文经过“Linux Director”,两台“Real Server”的网关必须配置为“Linux Director”的 IP(这里是“192.168.6.1”)。使用 netstat -rn 可以查看默认网关。使用 route add default gw 可以添加默认网关,如:

$ sudo route add default gw 192.168.6.1 eth0

2、启动进程监听在 80 端口,以提供服务。

调试 Tips:在“Linux Director”上使用 ipvsadm -L -n 可以查看实际的连接数量,如:

$ sudo ipvsadm -L -n
IP Virtual Server version 1.0.9 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  172.17.60.201:80 rr
  -> 192.168.6.5:80               Masq    1      7          3
  -> 192.168.6.4:80               Masq    1      8          4

4. 参考

Author: cig01

Created: <2018-10-28 Sun>

Last updated: <2019-06-08 Sat>

Creator: Emacs 27.1 (Org mode 9.4)