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”。
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”必须在一个广播域,也可以简单的理解为在同一台交换机上。
Figure 2: LVS Direct Routing
关于 LVS 各种工作模式的详细原理,可以参考网文:图解LVS的工作原理
3. LVS NAT 配置实例
下面介绍 LVS NAT 的配置实例,如图 3 所示。
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. 参考
Linux Virtual Server Tutorial: http://www.ultramonkey.org/papers/lvs_tutorial/html/
LVS-mini-HOWTO: http://www.austintek.com/LVS/LVS-HOWTO/mini-HOWTO/LVS-mini-HOWTO.html