LVS核心概念

  • 本质:Linux内核级负载均衡技术,通过将客户端请求分发到后端多个真实服务器(Real Server),实现高可用性和横向扩展能力。
  • 核心角色
    • VS(调度器):接收请求并转发至后端服务器。
    • RS(真实服务器):实际处理请求的节点。

关键术语

  • CIP:客户端IP
  • VIP:对外服务的虚拟IP(外网)
  • DIP:调度器与RS通信的内网IP
  • RIP:真实服务器IP
  • 访问流程:CIP <--> VIP == DIP <--> RIP

nat模式访问为例:

客户端发起访问请求-->外网

CIP → VIP

调度器接受请求后选择后端RS

VIP → Rs(RIP)

RS直接响应客户端

Rs(VIP) → CIP
 


集群类型

  • LB集群:均摊访问压力(如LVS)。
  • HA集群:避免单点故障(如Keepalived)。
  • HPC集群:高性能计算(非LVS范畴)。

LVS工作模式对比

模式 转发方式 特点
NAT 修改目标IP

- 请求/响应均经VS,性能较低,;

- RIP与DIP需同网段,RS网关指向DIP

DR 改写MAC地址(默认模式)

- 仅请求经VS,Rs直接响应客户端;

- VS/RS需配置VIP,且同网段

TUN IP隧道封装(通过封装IP包实现跨网络转发)

- 请求经VS,响应直通客户端

- VIP/RIP需公网,RS需支持隧道协议

FULLNAT 同时修改源/目标IP

- 内核默认不支持

- RIP/DIP可跨网段,请求/响应均经VS


集群 vs 分布式

  • 集群:多节点(主机)做同一业务,提升吞吐量(如LVS),每个主机只承担一部分访问。
  • 分布式:拆分业务到不同节点,缩短任务时间。

实验准备

需要四台虚拟机(环境仓库已搭建,可以正常下载服务)

1.网卡配置如下

LVS->nat+仅主机
client->nat
两台server->仅主机(命名为R1,R2)

 2.配置IP地址

LVS 192.168.1.141/24

同网段即可

实验步骤

3.R1,R2配置

先确认LVS能否正常访问R1,R2

下载hpptd

停止防火墙

输入IP地址到index.html看能否正常访问

[root@Rl~]# dnf install httpd
[root@Rl~]# systemctl disable --now firewalld
Removed "/otc/systemd/systen/multi.user,targot,wants/firewalld,service"
Removed "/etc/systemd/systen/dbus-org.fedoraproject.FirewallDl.service"

[root@Rl~]# echo Rl"192.168.0.10 > /var/www/html/index.html
[root@Rl~]# systomctl enable --now httpd
Created symlink /etc/systend/systen/multi-user,targot.wants/httpd,sorvice . /usr/lib/systemd/system/httpd.service.


配置完成,接下来这两台服务器就可以不管了

4.LVS配置

看能否正常访问服务器

[root@Rl~] curl 192.168.229.100
R1  192.168.0.10
#输入R1,R2服务器的IP访问

[root@Rl~]sysctl -a | grep ip_forward

查看IP_forward

启用内核路由功能

LVS集群中的增删查改

增删查改小实验

实验准备

为了方便观察命令的效果,可以同时开启两个窗口(同一个LVS主机),一个窗口输入命令,另一个窗口查看流程

随后选择Split——horlzontal——home——相应主机

会分成上下两个窗口,这里我是上面观察,下面输入命令,所以在上面窗口输入

watch -nl ipvsadm -Ln# 查看命令实时流程

效果如下

随后只在下面窗口输入命令就可以在上面窗口查看状态了 

实验步骤(参数的运用)

语法

ipvsadm -a|e   -t|u|f     service-address    -r realserver-address  [-g|i|m]     [-w weight]

添加调度策略

先下载ipvsadm

dnf install ipvsadm -y

1.首先创建虚拟服务

在使用 ipvsadm -a 添加真实服务器之前,必须先创建对应的虚拟服务

ipvsadm -A -t 192.168.1.141:80 -s rr

#添加一个基于 TCP 协议、监听在 192.168.1.141:80 的虚拟服务,并使用轮询的负载均衡调度算法。

2. 创建后的编辑——修改

-E:表示 edit,用于编辑一个已经存在的虚拟服务,如图将之前创建的监听在 192.168.1.141:80 的虚拟服务的调度算法修改为加权轮询wrr

3.添加真实服务器(R1,R2)

ipvsadm -a -t 192.168.1.141:80 -s rr 服务器IP:端口  [-g|i|m]     [-w weight] -m

ipvsadm -A -f 文件编号 #添加服务,66是防火墙

                -D -f 文件编号 #删除



修改为权重调用算法

4. 命令清除、保存与恢复

简单保存

 保存到指定文件(备份防止后面误删方便恢复

清除所有命令-C

命令恢复

 

以上操作均为临时,如果想开机生效(开机时加载策略)

systemctl status ipvsad.service

ipvsadm-save - n > /etc/sysconfig/ipvsadm

ipvsadm -C
 
systemctl enable --now ipvsadm.service

NAT模式实验

实验目标:搭建LVS-NAT模式的负载均衡环境,验证请求分发和响应返回流程。

实验拓扑

  • 1台LVS调度器(双网卡:VIP公网IP,DIP内网IP)
  • 2台后端真实服务器(RIP,内网IP)
  • 1台客户端(模拟请求)

1.添加虚拟服务器(LVS的IP),添加后端(两个RIP),选择nat模式 

查看访问状态

ipvsadm -Ln

 

 2.关闭lvs防火墙

3.客户机访问测试

curl 192.168.229.100

4.错误查找

查找问题:crul测试LVS的IP,能访问,curl服务器失败,客户机访问LVS没有问题,但是访问RS无法成功,说明和调度器的访问没有问题,但是数据从服务器回来有问题,着重检查RS2配置网段,防火墙、端口有无问题


访问卡住(超时,什么信息都没有?说明能运行但是流通出了问题

调度器curl访问成功,说明调度器干活

在调度器查看R1,R2,后面有数字说明数据没有成功流通

 

调度器有两个ip,这里它访问使用的是是直连网段,但数据访问经过,回来,两个IP(DIP,VIP)都要使用,所以要确保它们的网关与服务器的在同一个网段

正常流通后ActiveConn(过去)InActConn(回来)都为0,当访问出问题是,查看状态,可以看到RS2后面出现了问题,ActiveConn 1 过去没问题,说明回来通过DIP出现了问题,那么我们就要看服务器网关和LVS的DIP的网段是否一致,不一致的话就要将服务器的网关指定到DIP一样

哪个是DIP?

 

检查网段

route -n 


进入R1,R2文件修改网关

重启使生效

nmcli connection reload

nmcli connection up ens160

查看是否生效route -n

再次访问,成功。R2同理             

DR模式出现原理

但是模式(NAT)后端服务器最多不超过十个,否则调度器可能会出现问题

那怎么解决呢?

最大的问题是啥?数据流经太多

那不经过就好了,也就是给他安装一条直连路由DR

也就是DR模式

CIP:客户端真实地址,DR模式中服务器直接向CIP返回响应。

VIP:虚拟服务地址,客户端通过VIP访问服务。

到达服务器后VIP==>RIP(变成),IP没变,MAC地址变成了服务器的mac地址

就从CIP--->VIP变成了CIP--->RIP

主要是mac地址的转换,所以是二层的,不能跨网段,跨网段是三层的


DR模式实验

实验准备

Client通过ROUTER连接调度器LVS,再用LVS调度访问策略,到达服务器

#因此注意:client的网段和router要能连上,LVS和两台服务器同理,模式也要对应

  • 上个实验的LVS调度器改名为ROUTER,充当路由器的作用(双网卡:VIP公网IP,DIP内网IP)
  • 2台后端真实服务器
  • 1台客户端(模拟请求)
  • 新增1台调度器DR_LVS,网卡:仅主机模式(其他网卡不变)

IP配置

#启用脚本配置IP地址和主机名字

#脚本前面没有提到,方便自己配置的,也可以用其他命令配置

vmset.sh ens160 192.168.229.133 DR_LVS.timinglee.org

确认能否访问后端服务器IP  ping


LVS和服务器三台主机只有一个网卡,但是需要VIP,所以用环回来做

先给DR_LVS添加VIP

如图,192.168.229.133是本机自己的IP,下面的address2就是新增的VIP,后服务器的网段要和VIP一致

cd /etc/NetworkManager/system-connection/

三台机器都需要添加环回

cd /etc/NetworkManager/system-connection/
cp -p ens160.nmconnection lo.nmconnection
vi lo.nmconnection

address2就是添加的环回地址,环回子网掩码必须是32

 重启生效

接口冲突IP未生效

如果两个接口冲突,我们需要的接口被占用,lo未生效(绿色是生效),就删掉原始接口


确认router和client的网关有没有问题

client的网关要改为ROUTER两个IP的其中一个(和自己是同一个网段的

 


重启使生效

nmcli connection reload

Nmcli connection up ens160

查看是否生效

 这样就可以保证client的所有消息都发给ROUTER


而中间器ROUTER不需要网关,它充当路由器的作用

将ROUTER两个IP存放文件里的网关都删掉

同样重启生效

随后打开内核路由功

永久打开火墙,地址伪装也打开

 现在ROUTER就设置完毕了

注意:这里设置完毕后防火墙千万不要关掉!!


DR_LVS配置

上个实验设了环回,这里就不需要用到环回,直接用自己接口的IP作为承载就可以了

LVS的网关要改为和ROUTER同一个网段的IP

重启生效


R1和R2配置和net模式一样,就不需要修改了

检查环回网关IP网关是否和VIP在同一个网段(前三位)

重启生效nmcli connection reload

nmcli connection up lo

ip a

查看是否生效,如果没生效nmcli connection show找一下看是不是接口被占用了,把多余的接口删掉


这些环回IP只在封装的时候起效,其他的时候都不用

那么我们就要在服务器上对ARP实施响应管控

默认值都为0


接下来在LVS中写路由策略

先将之前的清除

ROUTER的也要清除

添加策略

ipvsadm -C  #检查

测试是否互通

 测试client能否正常访问DR_LVS的VIP到达服务器

[root@client ~]# for i in {1..10}
>do
>curl 192.168.229.200
>done

Logo

助力广东及东莞地区开发者,代码托管、在线学习与竞赛、技术交流与分享、资源共享、职业发展,成为松山湖开发者首选的工作与学习平台

更多推荐