LVS是Linux Virtual Server的简写,意即Linux虚拟服务器,是一个虚拟的
服务器集群系统。本项目在1998年5月由章文嵩博士成立,是中国国内最早出现的自由
软件项目之一。LVS集群采用IP负载均衡技术和基于内容请求分发技术。调度器具有很
好的吞吐率,将请求均衡地转移到不同的服务器上执行,且调度器自动屏蔽掉服务器的
故障,从而将一组服务器构成一个高性能的、高可用的虚拟服务器。整个服务器集群的
结构对客户是透明的,而且无需修改客户端和服务器端的程序。LVS/NAT、LVS/TUN
和LVS/DR技术是LVS集群中实现的三种IP负载均衡技术。
三种转发机制的优缺点
◆Virtual Server via NAT
VS/NAT 的优点是服务器可以运行任何支持TCP/IP的操作系统,它只需要一个IP地址
配置在LVS主机上,服务器组可以用私有的IP地址。缺点是它的扩充能力有限,当服务
器结点数目升到20时,LVS主机本身有可能成为系统的新瓶颈,因为在VS/NAT中请求
和响应封包都需要通过负载平衡LVS主机。
◆Virtual Server via IP Tunneling
在VS/TUN 的集群系统中,负载平衡LVS主机只将请求分配到不同的实际服务器,实际
服务器将应答的资料直接返回给用户。这样,负载平衡LVS主机就可以处理巨量的请
求,而不会成为系统的瓶颈。即使负载平衡LVS主机只有100Mbps的全双工网卡,虚
拟服务器的最大吞吐量可以达到几Gbps。所以,VS/TUN可以极大地增加负载平衡
LVS主机分配的服务器数量,它可以用来构建高性能超级服务器。
◆Virtual Server via Direct Routing
同VS/TUN 一样,VS/DRLVS主机只处理客户到服务器端的连接,响应资料可以直接
从独立的网络路由返回给客户。这可以极大地提高LVS集群系统的伸缩性。同VS/TUN
相比,这种方法没有IP隧道的开销,但是要求负载平衡LVS主机与实际服务器都有一块
网卡连在同一物理网段上,服务器网络设备或者设备别名不作 ARP 响应。
一般来说,LVS集群采用三层结构,其主要组成部分为:
A、负载调度器(load balancer),它是整个集群对外面的前端机,负责将客户的
请求发送到一组服务器上执行,而客户认为服务是来自一个IP地址(我们可称之为虚拟
IP地址)上的。
B、服务器池(server pool),是一组真正执行客户请求的服务器,执行的服务
有WEB、MAIL、FTP和DNS等。
C、共享存储(shared storage),它为服务器池提供一个共享的存储区,这样
很容易使得服务器池拥有相同的内容,提供相同的服务。
调度器是服务器集群系统的唯一入口点(Single Entry Point),它可以采用IP负
载均衡技术、基于内容请求分发技术或者两者相结合。
四种分配方法(Load-balancing Methods)
Round robin (RR)
将工作平均的分配到服务器 (用于实际服务主机性能一致)
Least-connections (LC)
向较少连接的服务器分配较多的工作(IPVS 表存储了所有的活动的连接。用于实际服务
主机性能一致。)
Weighted round robin (WRR)
向较大容量的服务器分配较多的工作。可以根据负载信息动态的向上或向下调整。 (用
于实际服务主机性能不一致时)
Weighted least-connections (WLC)
考虑它们的容量向较少连接的服务器分配较多的工作。容量通过用户指定的砝码来说
明,可以根据装载信息动态的向上或向下调整。(用于实际服务主机性能不一致时)
拓扑图:
配置过程:
虚拟服务器:
打开路由转发功能:
[root@localhost ~]# vim /etc/sysctl.conf
编辑结果:
[root@localhost ~]# sysctl –p
查看内核版本:
[root@localhost ~]# uname -r
2.6.18-164.el5
挂载光盘:
[root@localhost ~]# mkdir /mnt/cdrom
[root@localhost ~]# mount /dev/cdrom /mnt/cdrom
mount: block device /dev/cdrom is write-protected, mounting read-only
[root@localhost ~]# cd /mnt/cdrom
编辑yum服务器:
[root@localhost cdrom]# vim /etc/yum.repos.d/rhel-debuginfo.repo
编辑结果:
安装ipvsadm工具:
[root@localhost cdrom]# yum install ipvsadm
定义虚拟服务器:
[root@localhost cdrom]# ipvsadm -A -t 192.168.100.100:80 -s rr
定义realserver:
[root@localhost cdrom]# ipvsadm -a -t 192.168.100.100:80 -r 192.168.2.100 –m
[root@localhost cdrom]# ipvsadm -a -t 192.168.100.100:80 -r 192.168.2.101 –m
[root@localhost cdrom]# service ipvsadm save
Saving IPVS table to /etc/sysconfig/ipvsadm: [确定]
[root@localhost cdrom]# service ipvsadm start
Clearing the current IPVS table: [确定]
Applying IPVS configuration: [确定]
[root@localhost cdrom]# ipvsadm -ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 192.168.100.100:80 rr
-> 192.168.2.101:80 Masq 1 0 0
-> 192.168.2.100:80 Masq 1 0 0
realser1配置:
服务器的配置:
安装web:
[root@localhost ~]# yum install httpd
[root@localhost ~]# cd /var/www/html/
[root@localhost html]# echo “web1” > index.html
重启web服务:
[root@localhost html]# service httpd restart
realserver2配置:
安装web:
[root@localhost ~]# yum install httpd
[root@localhost ~]# cd /var/www/html/
[root@localhost html]# echo “web2” > index.html
拓扑图:
配置过程:
diretor上的配置:
ip信息:
打开路由转发功能:
[root@localhost ~]# vim /etc/sysctl.conf
编辑结果:
[root@localhost ~]# sysctl –p
查看内核版本:
[root@localhost ~]# uname -r
2.6.18-164.el5
挂载光盘:
[root@localhost ~]# mkdir /mnt/cdrom
[root@localhost ~]# mount /dev/cdrom /mnt/cdrom
mount: block device /dev/cdrom is write-protected, mounting read-only
[root@localhost ~]# cd /mnt/cdrom
编辑yum服务器:
[root@localhost cdrom]# vim /etc/yum.repos.d/rhel-debuginfo.repo
编辑结果:
安装ipvsadm工具:
[root@localhost cdrom]# yum install ipvsadm
增加条目:
[root@localhost ~]# ipvsadm -A -t 192.168.10.100:80 -s rr
[root@localhost ~]# ipvsadm -a -t 192.168.10.100:80 -r 192.168.10.2 –g
[root@localhost ~]# ipvsadm -a -t 192.168.10.100:80 -r 192.168.10.3 –g
[root@localhost cdrom]# service ipvsadm save
Saving IPVS table to /etc/sysconfig/ipvsadm: [确定]
[root@localhost cdrom]# service ipvsadm start
Clearing the current IPVS table: [确定]
Applying IPVS configuration: [确定]
web1服务器上的配置:
Ip信息:
安装web:
[root@localhost ~]# yum install httpd
[root@localhost ~]# cd /var/www/html/
[root@localhost html]# echo “web1” > index.html
重启web服务
[root@localhost html]# service httpd restart
添加下列条目到/etc/sysctl.conf
[root@localhost ~]# echo "net.ipv4.conf.eth0.arp_announce = 2" >>/etc/sysctl.conf
[root@localhost ~]# echo "net.ipv4.conf.eth0.arp_ignore = 1" >>/etc/sysctl.conf
[root@localhost ~]# sysctl –p
[root@localhost ~]# route add -host 192.168.10.100 dev lo:0
web2服务器上的配置:
Ip信息:
安装web服务器:
[root@localhost ~]# yum install httpd
[root@localhost ~]# cd /var/www/html/
[root@localhost html]# echo “web2” > index.html
重启web服务
[root@localhost html]# service httpd restart
添加下列条目到/etc/sysctl.conf
[root@localhost ~]# echo "net.ipv4.conf.eth0.arp_announce = 2" >>/etc/sysctl.conf
[root@localhost ~]# echo "net.ipv4.conf.eth0.arp_ignore = 1" >>/etc/sysctl.conf
[root@localhost ~]# sysctl –p
[root@localhost ~]# route add -host 192.168.10.100 dev lo:0