百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文

Linux虚拟服务器LVS详解及部署配置实现Web业务访问负载均衡

gudong366 2025-07-25 18:34 6 浏览

LVS是Linux Virtual Server的简称,也就是Linux虚拟服务器,它是我国的章文嵩博士发起的一个开源项目,现在LVS已经是Linux标准内核的一部分。LVS主要用于多服务器的负载均衡,它工作在网络层,可以实现一个高性能,高可用的服务器群集,它具有良好的可靠性、可扩展性和可操作性,即使在集群的服务器中某台服务器无法正常工作,也不影响整体效果。官方站点:http://www.linuxvirtualserver.org。

LVS体系架构

如上图所示,LVS可分为三部分:

  1. Load Balancer:这是LVS的核心部分,位于整个集群系统的最前端,有一台或者多台负载调度器(Director Server)组成,它负责将客户的请求按照一定的算法分发到下一层(Server Array层)不同的应用服务器(Real Server)进行处理,自己本身不做具体业务的处理。
  2. Server Array:该层负责具体业务,由一组实际运行应用服务的机器组成,Real Server可以是WEB服务器、MAIL服务器、FTP服务器、DNS服务器、视频服务器中的一个或者多个,每个Real Server之间通过高速的LAN或分布在各地的WAN相连接。在实际的应用中,上层的Director Server其实也可以同时兼任Real Server的角色。
  3. Shared Storage:为所有Real Server提供共享存储空间和内容一致性的存储区域,在物理上,一般由磁盘阵列设备组成。

LVS基本工作原理

LVS是工作在网络层,LVS通过控制IP来实现负载均衡。IPVS是其具体的实现模块。IPVS的主要作用:安装在Director Server上,在Director Server虚拟一个对外访问的IP(VIP)。用户访问VIP,到达Director Server,Director Server根据一定的规则选择一个Real Server,处理完成后然后返回给客户端数据。

  1. 当用户向负载均衡调度器(Director Server)发起请求,调度器将请求发送至内核空间;
  2. PREROUTING链首先会接收到用户请求,判断目标IP确定是本机IP,将数据包发往INPUT链;
  3. IPVS是工作在INPUT链上的,当用户请求到达INPUT时,IPVS会将用户请求和自己已定义好的集群服务进行比对,如果用户请求的就是定义的集群服务,那么此时IPVS会强行修改数据包里的目标IP地址及端口,并将新的数据包发往POSTROUTING链;
  4. POSTROUTING链接收数据包后发现目标IP地址刚好是自己的后端服务器,那么此时通过选路,将数据包最终发送给后端的服务器。

LVS转发类型

这些步骤产生了一些具体的问题,比如如何选择具体的Real Server,Real Server如何返回给客户端数据等等。IPVS为此有三种转发类型:

  1. VS/NAT(Virtual Server via Network Address Translation)网络地址转换,即网络地址翻转技术实现虚拟服务器。当请求来到时,Diretor server上处理的程序将数据报文中的目标地址(即虚拟IP地址)改成具体的某台Real Server,端口也改成Real Server的端口,然后把报文发给Real Server。Real Server处理完数据后,需要返回给Diretor Server,然后Diretor server将数据包中的源地址和源端口改成VIP的地址和端口,最后把数据发送出去。由此可以看出,用户的请求和返回都要经过Diretor Server,如果数据过多,Diretor Server肯定会不堪重负。
  2. VS/TUN(Virtual Server via IP Tunneling)隧道模型,即IP隧道技术实现虚拟服务器。它跟VS/NAT基本一样,但是Real server是直接返回数据给客户端,不需要经过Diretor server,这大大降低了Diretor server的压力。
  3. VS/DR(Virtual Server via Direct Routing)直接路由模型,即用直接路由技术实现虚拟服务器。跟前面两种方式,它的报文转发方法有所不同,VS/DR通过改写请求报文的MAC地址,将请求发送到Real Server,而Real Server将响应直接返回给客户端,免去了VS/TUN中的IP隧道开销。这种方式是三种负载调度机制中性能最好的,应用比较广泛。

LVS-DR模型的工作原理:

  1. 当用户请求到达Director Server,此时请求的数据报文会先到内核空间的PREROUTING链。 此时报文的源IP为CIP(Client IP),目标IP为VIP;
  2. PREROUTING检查发现数据包的目标IP是本机,将数据包送至INPUT链;
  3. IPVS比对数据包请求的服务是否为集群服务,若是,将请求报文中的源MAC地址修改为DIP(Director Server IP)的MAC地址,将目标MAC地址修改RIP(Real Server IP)的MAC地址,然后将数据包发至POSTROUTING链。 此时的源IP和目的IP均未修改,仅修改了源MAC地址为DIP的MAC地址,目标MAC地址为RIP的MAC地址;
  4. 由于DS和RS在同一个网络中,所以是通过二层来传输。POSTROUTING链检查目标MAC地址为RIP的MAC地址,那么此时数据包将会发至Real Server;
  5. RS发现请求报文的MAC地址是自己的MAC地址,就接收此报文。处理完成之后,将响应报文通过lo接口传送给eth0网卡然后向外发出。 此时的源IP地址为VIP,目标IP为CIP;
  6. 响应报文最终送达至客户端。

LVS调度算法

我们都知道Director Server要选择不同的Real server,那么它具体如何选择Real Server以达到负载均衡的呢,IPVS支持十种调度方法。

一)静态调度:

①RR(Round Robin):轮询调度

轮询调度算法的原理是每一次把来自用户的请求轮流分配给内部中的服务器,从1开始,直到N(内部服务器个数),然后重新开始循环。算法的优点是其简洁性,它无需记录当前所有连接的状态,所以它是一种无状态调度

②WRR:weight:加权轮询

由于每台服务器的配置、安装的业务应用等不同,其处理能力会不一样。所以,我们根据服务器的不同处理能力,给每个服务器分配不同的权值,使其能够接受相应权值数的服务请求。

③SH:source hashing:源地址散列

根据请求的源IP地址,作为散列键(Hash Key)从静态分配的散列表找出对应的服务器。

④DH:Destination hashing:目标地址散列

根据请求的目标IP地址,作为散列键(Hash Key)从静态分配的散列表找出对应的服务器。

二)动态调度:

①LC(Least-Connection):最少连接

最少连接调度算法是把新的连接请求分配到当前连接数最小的服务器,最小连接调度是一种动态调度短算法,它通过服务器当前所活跃的连接数来估计服务器的负载均衡。

②WLC(Weighted Least-Connection Scheduling):加权最少连接。

加权最小连接调度算法是最小连接调度的超集,各个服务器用相应的权值表示其处理性能。服务器的缺省权值为1,系统管理员可以动态地设置服务器的权限,加权最小连接调度在调度新连接时尽可能使服务器的已建立连接数和其权值成比例。

③SED(Shortest Expected Delay):最短期望延迟

基于wlc算法,简单算法:(active+1)*256/weight 【(活动的连接数+1)*256/除以权重】

④NQ(never queue):永不排队(改进的sed)

无需队列,如果有台realserver的连接数=0就直接分配过去,不需要再进行sed运算。

⑤LBLC(Locality-Based Least Connection):基于局部性的最少连接

基于局部性的最少连接调度算法根据请求的目标IP地址找出该目标IP地址最近使用的RealServer,若该Real Server是可用的且没有超载,将请求发送到该服务器;若服务器不存在,或者该服务器超载且有服务器处于一半的工作负载,则用“最少链接”的原则选出一个可用的服务器,将请求发送到该服务器。

⑥LBLCR(Locality-Based Least Connections withReplication):带复制的基于局部性最少链接

带复制的基于局部性最少链均衡,该算法根据请求的目标IP地址找出该目标IP地址对应的服接调度算法也是针对目标IP地址的负载务器组,按“最小连接”原则从服务器组中选出一台服务器,若服务器没有超载,将请求发送到该服务器;若服务器超载,则按“最小连接”原则从这个集群中选出一台服务器,将该服务器加入到服务器组中,将请求发送到该服务器。

LVS具体配置操作

实验环境三台Linux主机

Diretor server:192.168.52.20

Real server1:192.168.52.121

Real server2:192.168.52.122

下面我们VS/DR介绍详细的配置过程:

在Real server 1和2上面,配置web服务。

yum install httpd -y #安装http服务

echo “This is 192.168.52.12x!!!” > /var/www/html/index.html #配置两台web文件用于测试显示效果

systemctl start httpd #启动http服务

通过浏览器输入IP访问效果如下。


Diretor server上安装LVS。

yum install ipvsadm -y

Director Server上绑定一个虚拟VIP地址192.68.52.250,此IP用于对外提供服务。

ifconfig ens33:0 192.168.52.250 broadcast 192.168.52.250 netmask 255.255.255.255 up

添加路由,访问192.168.52.250都走ens33:0这块网卡。

route add -host 192.168.52.250 dev ens33:0

启用系统的包转发功能。

echo "1">/proc/sys/net/ipv4/ip_forward

如果之前配置过LVS,可先清除ipvsadm以前的设置。

ipvsadm -C

添加一个新的虚拟IP记录192.168.52.250,设置算法为rr轮询算法。
ipvsadm -A -t 192.168.52.250:80 -s rr

在新增的虚拟IP记录中新增两条real server记录,-g即为使用VS/DR模式
ipvsadm -a -t 192.168.52.250:80 -r 192.168.52.121:80 -g
ipvsadm -a -t 192.168.52.250:80 -r 192.168.52.122:80 -g

启用LVS服务。

ipvsadm

两台real server上的配置:
在环回口上绑定了虚拟IP地址,并添加路由。

ifconfig ens33:0 192.168.52.250 broadcast 192.168.52.250 netmask 255.255.255.255 up

route add -host 192.168.52.250 dev lo:0
禁用本机的ARP请求。

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

最后在其他客户端机子上面,访问http://192.168.52.250/,则可以看到结果了,外部客户端的请求被均衡的分配到两台Real Server上,出现不同的界面。

相关推荐

怎么利用Python实现一个远程监控多台Linux主机资源的管理工具

摘要:这款基于Python和Flask设计的监控软件,主要是为了实现多主机Linux系统资源监控的目的,支持对本机及远程主机的资源进行监控。不但能定时收集包括CPU、内存、磁盘、IO和网络在内的关键数...

Linux 流量监控怎么玩?5 个工具 + 3 个维度,保姆级教程来了

在数字化运维场景中,Linux服务器因其稳定性和开放性,成为承载核心应用与网络管理的主流平台。而高效监控网络流量,不仅是保障系统性能的关键,更是抵御安全威胁的第一道防线。本文将系统拆解Linux...

Linux系统监控工具,你知道几个?(linux监控平台有哪些)

常用的Linux系统监控工具,可帮助您监视系统性能、资源利用率和进程活动等方面的信息:top:top是一个命令行工具,用于实时监视系统的进程活动和系统资源使用情况。它提供了CPU、内存、磁盘和网络等方...

Linux服务器上监控网络带宽的18个常用命令和工具

一、如何查看CentOS的网络带宽出口检查维护系统的时候,经常会要查看服务器的网络端口是多大的,所以需要用到Linux的一个命令。如何查看CentOS的网络带宽出口多大?可以用下面的命令来查看。#e...

查看MySQL所有数据库列表(mysql怎样查看数据库)

请关注本头条号,每天坚持更新原创干货技术文章。如需学习视频,请在微信搜索公众号“智传网优”直接开始自助视频学习1.前言本文主要讲解如何在Linux系统上查看MySQL所有数据库列表。在管理MySQL...

Linux系统中的who命令你真的会用吗?

请关注本头条号,每天坚持更新原创干货技术文章。如需学习视频,请在微信搜索公众号“智传网优”直接开始自助视频学习1.前言本教程主要介绍如何使用who命令检查用户登录信息。Linux中的who命令列出了...

Linux系统中,查看CPU信息的多样方法

一、命令行工具(适合所有Linux发行版)1.lscpu命令功能:显示CPU架构、核心数、线程数、缓存、NUMA节点等详细信息。使用:bashlscpu示例输出:Architecture:x86_...

Linux系统 用户信息的显示:users、w、who

前言在Linux系统中,当我们需要查看登入系统的用户相关信息的时候,可以通过如下三条命令来查看:【users|w|who】。本文来具体学习一下这三条命令。目录一、命令描述二、命令常用选项三...

Linux 用户、用户组、文件权限、文件查找

3-linux用户、用户组、文件权限、文件查找概述在Linux操作系统中,用户与权限管理是系统安全和稳定运行的核心环节。Linux是典型的多用户操作系统,每个使用系统的人都需要拥有独立的用...

使用linux中.ssh/config配置客户端host

~/.ssh/config文件是一个很有用的文件,它用于配置客户端的参数在~/.ssh/config中可以定义ssh的参数,这个文件在当前用户的目录下面,即该配置只能被当前用户使用,其他用户使用不了!...

「技术干货」Ip头udp数据包ARP协议(代码实现netmap)

协议栈数据组成格式用户层:用户数据传输层:8个字节udp头+用户层网络层:20个字节的ip头+传输层链路层:14个字节的以太网头+网络层网卡(在链路层和物理层之间):将链路层数据经过DA转换,...

uboot常用命令汇总(uboot详解)

我们经常使用uboot命令,虽然资料光盘->常见问题目录有U-boot常用命令汇总文档,但从大家的反馈来看,并没有很多人注意到这个文档,所以把它挪到这里。如此全的uboot命令汇总,建议收藏。注...

腾讯面试中的TCP/IP协议简述+经典面试题

面试题有福利TCP/IP协议简述+TCP握手协议在TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手建立一个连接.第一次握手:建立连接时,客户端发送syn包(syn=j)到服务器,并进入...

socket连接数受端口号的限制?谬论

初学网络的同学对socket可能会有误解:服务器能接受的最大连接数跟端口的个数65536有关系!为什么会有这样的误会?服务器端的程序无非是这样的:socket();//创建sock...

研究发现近期零日IP漏洞激增,被利用攻击 Mac 和 Linux 计算机

据pcmag网8月8日报道,据悉,使用0.0.0.0IP地址的零日漏洞近几个月来出现激增,并被黑客利用,可能使MacOS或Linux上Safari、Chrome和Firefox等...