LVS负载均衡知识总结
表示 edit,用于编辑一个已经存在的虚拟服务,如图将之前创建的监听在 192.168.1.141:80 的虚拟服务的调度算法修改为加权轮询wrr。#添加一个基于 TCP 协议、监听在 192.168.1.141:80 的虚拟服务,并使用轮询的负载均衡调度算法。为了方便观察命令的效果,可以同时开启两个窗口(同一个LVS主机),一个窗口输入命令,另一个窗口查看流程。会分成上下两个窗口,这里我是上面观
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
更多推荐
所有评论(0)