Linux虚拟服务器(LVS)是一个在Linux内核中实现的、高性能、高可用的负载均衡解决方案,它通过将客户端的请求根据预设的调度算法转发到后端的一组真实服务器上,从而构建一个强大的虚拟服务器集群,LVS以其卓越的性能和稳定性,在众多大型网站和应用中得到了广泛应用,本文将详细介绍在CentOS系统下配置LVS的步骤,特别是最常用且性能最高的DR(Direct Routing)模式。
LVS的核心概念与工作模式
在深入配置之前,理解LVS的几个核心组件和工作模式至关重要,LVS主要由两部分组成:负载调度器(Director)和真实服务器池(Real Server Pool),调度器是整个集群的前端,负责接收并分发所有进入的请求;真实服务器则负责实际处理请求。
LVS支持三种主要的工作模式:
- NAT(Network Address Translation)模式:调度器将请求报文的目标地址修改为某个真实服务器的地址,返回的报文再经过调度器修改源地址后发回客户端,优点是配置简单,真实服务器可以使用任何支持TCP/IP的操作系统,缺点是所有流量都必须经过调度器,容易成为性能瓶颈。
- TUN(IP Tunneling)模式:调度器将请求报文封装在另一个IP报文中,再转发给真实服务器,真实服务器解封后直接处理请求,并将响应直接返回给客户端,优点是扩展性好,真实服务器可以分布在不同的网络中,缺点是需要所有服务器支持IP隧道协议。
- DR(Direct Routing)模式:这是性能最高的模式,调度器仅修改请求报文的MAC地址,将其转发到同一局域网内的真实服务器,真实服务器处理请求后,直接将响应报文返回给客户端,不再经过调度器,优点是性能极高,调度器只处理一半的流量,缺点是要求调度器和所有真实服务器必须在同一个物理网段。
配置LVS/DR模式前的准备工作
我们将以一个典型的DR模式为例进行配置,假设我们有以下服务器环境:
角色 | 主机名 | IP地址 | 网卡 | 说明 |
---|---|---|---|---|
调度器 (Director) | lvs-dir | 168.1.10 (DIP) | eth0 | 对外提供服务的VIP也配置在此 |
168.1.100 (VIP) | eth0:0 | 虚拟IP,客户端访问的地址 | ||
真实服务器1 (RS1) | rs-01 | 168.1.20 (RIP) | eth0 | 真实处理请求的服务器 |
168.1.100 (VIP) | lo:0 | 在环回接口上配置VIP | ||
真实服务器2 (RS2) | rs-02 | 168.1.21 (RIP) | eth0 | 真实处理请求的服务器 |
168.1.100 (VIP) | lo:0 | 在环回接口上配置VIP | ||
客户端 | client | 168.1.200 | 用于访问和测试 |
关键点:所有服务器(调度器和真实服务器)必须在同一个VLAN或物理网络内。
CentOS下LVS/DR模式配置详解
调度器(Director Server)配置
安装ipvsadm管理工具
ipvsadm
是LVS的管理命令行工具。yum install -y ipvsadm
配置网络并开启IP转发
确保DIP(192.168.1.10)已正确配置在eth0
上,配置VIP。# 临时配置VIP,重启后失效 ifconfig eth0:0 192.168.1.100 broadcast 192.168.1.100 netmask 255.255.255.255 up # 开启内核的IP转发功能 echo 1 > /proc/sys/net/ipv4/ip_forward
为了永久生效,需要修改
/etc/sysctl.conf
文件:net.ipv4.ip_forward = 1
然后执行
sysctl -p
使配置生效。配置LVS转发规则
使用ipvsadm
命令来创建虚拟服务并添加后端真实服务器。# 清空现有规则 ipvsadm -C # 添加一个虚拟服务,-t表示TCP,-s rr表示使用轮询调度算法 ipvsadm -A -t 192.168.1.100:80 -s rr # 添加真实服务器到虚拟服务中,-g表示使用DR模式 ipvsadm -a -t 192.168.1.100:80 -r 192.168.1.20:80 -g ipvsadm -a -t 192.168.1.100:80 -r 192.168.1.21:80 -g # 查看配置的规则 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.1.100:80 rr -> 192.168.1.20:80 Route 1 0 0 -> 192.168.1.21:80 Route 1 0 0
保存配置
为了让规则重启后依然存在,需要保存。ipvsadm-save > /etc/sysconfig/ipvsadm
真实服务器(Real Server)配置
真实服务器的配置有两个关键点:在环回接口上配置VIP,并抑制ARP响应。
配置VIP到环回接口
在每台真实服务器(rs-01和rs-02)上执行:# 临时配置VIP到lo:0 ifconfig lo:0 192.168.1.100 broadcast 192.168.1.100 netmask 255.255.255.255 up # 添加路由,确保访问VIP的包不会从外部网卡发出 route add -host 192.168.1.100 dev lo:0
抑制ARP响应
这是为了防止真实服务器响应针对VIP的ARP请求,从而避免与调度器发生IP冲突,需要修改内核参数。echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
为了永久生效,同样将这些参数添加到
/etc/sysctl.conf
文件中。安装并启动Web服务
在每台真实服务器上安装httpd
或nginx
,并创建不同的测试页面以便区分。# 在rs-01上 yum install -y httpd echo "This is Real Server 1" > /var/www/html/index.html systemctl start httpd # 在rs-02上 yum install -y httpd echo "This is Real Server 2" > /var/www/html/index.html systemctl start httpd
配置验证与测试
在客户端(192.168.1.200)的浏览器或使用
curl
命令访问VIP:curl http://192.168.1.100
多次执行该命令,应该会看到输出内容在“This is Real Server 1”和“This is Real Server 2”之间交替出现,这证明负载均衡已经生效。
在调度器上再次查看连接状态:
ipvsadm -lcn
可以看到详细的连接记录,包括源IP、目标IP以及被转发到的真实服务器。
停止其中一台真实服务器的Web服务(如
systemctl stop httpd
),再次访问VIP,会发现所有请求都被转发到另一台正常运行的服务器上,体现了基本的容错能力。
LVS调度算法简介
LVS提供了多种调度算法以适应不同的业务场景:
- rr (Round Robin):轮询,将请求平均分配给各台服务器。
- wrr (Weighted Round Robin):加权轮询,根据服务器权重分配请求,性能好的服务器分配更多请求。
- lc (Least Connection):最少连接,将新请求分配给当前连接数最少的服务器。
- wlc (Weighted Least Connection):加权最少连接,在最少连接基础上考虑服务器权重,是默认推荐的算法。
相关问答 (FAQs)
问题1:为什么在DR模式下,真实服务器上的VIP必须配置在环回接口(lo)上,并且需要抑制ARP响应?
解答:这是DR模式设计的核心,VIP配置在环回接口上,是为了让真实服务器能够接收和处理目标地址为VIP的数据包,但这个VIP不会在物理网络上宣告,避免了IP地址冲突,抑制ARP响应至关重要,当客户端访问VIP时,它会在局域网内发送ARP请求,询问“谁是192.168.1.100?”,我们只希望调度器(Director)响应这个请求,如果不抑制真实服务器的ARP响应,它们也会声称自己拥有VIP,导致客户端的ARP缓存表混乱,可能将请求直接发送到某台真实服务器,从而绕过了调度器,负载均衡失效,通过arp_ignore
和arp_announce
参数,我们确保了只有调度器会“认领”VIP,保证了流量入口的唯一性。
问题2:LVS本身如何实现高可用?如果唯一的调度器(Director)宕机了,整个集群不就瘫痪了吗?
解答:您提出了一个非常关键的问题,单点故障是生产环境的大忌,LVS本身不直接提供高可用功能,但它通常与Keepalived
或Heartbeat
等高可用软件结合使用来解决此问题,以Keepalived
为例,它可以实现以下功能:
- VRRP协议:
Keepalived
使用VRRP协议在两台或多台调度器之间运行,生成一个虚拟的浮动IP(即我们的VIP),主调度器持有VIP,当主调度器发生故障时,备份调度器会自动接管VIP,对外服务几乎不受影响。 - 健康检查:
Keepalived
可以定期检查后端真实服务器的健康状态(如检查某个端口是否正常),如果发现某台服务器不可用,它会自动从LVS转发规则中移除该服务器,待其恢复后再重新加入。
通过LVS + Keepalived
的经典组合,可以构建一个既具备高性能负载均衡能力,又具备调度器高可用和后端服务健康检查的完整解决方案。
【版权声明】:本站所有内容均来自网络,若无意侵犯到您的权利,请及时与我们联系将尽快删除相关内容!
发表回复