1.负载均衡概述

负载均衡,全称是Load Balancing,很多时候称为 "LB",可以在多个服务器。或者其他资源之间,分配工作负载,当前请求量过多单个服务器无法处理多个资源

三款负载均衡软件相比

特性 LVS HAProxy Nginx
性能等级 极高(内核态,百万级并发,微秒级延迟) 高(用户态,数十万并发,毫秒级延迟) 中高(用户态,数万到数十万并发)
资源消耗 极低(仅改 IP / 端口,不拆包解析) 低(事件驱动,单进程模型) 中(多进程模型,处理应用层内容)
转发模式 支持 DR、NAT、TUN、FullNAT 四种模式(DR 性能最佳) 四层:TCP 转发;七层:HTTP/HTTPS 代理 四层:stream 模块;七层:http 模块
瓶颈 网卡带宽与 CPU 的 NAT 计算能力(NAT 模式) 进程内存与 CPU 处理能力 应用层解析与处理开销

LVS:综合性能比最好,配置复杂

HAProxy:转发快,CPU占用高,配置简单

Nginx:转发没有haproxy快,凡是CPU占用比haproxy低

2.LVS负载均衡概述

  1. 全称与定位LVS(Linux Virtual Server)是基于 Linux 系统的高性能、可扩展负载均衡器,负责将客户端请求分发至多台后端服务器,实现集群负载均衡与服务高可用。

  2. 工作层级工作在 OSI 模型传输层,属于四层负载均衡

  3. 两大核心组成

  • IPVS:运行在内核空间,是 LVS 核心内核模块。负责拦截、重定向网络连接,实现负载调度算法与连接管理,将请求转发给后端真实服务器。
  • ipvsadm:运行在用户空间,是命令行管理工具。用于增删、修改虚拟服务、后端节点与负载均衡规则,完成 IPVS 的整体配置运维。

相关名词

DS:前端负载均衡器节点

RS:后端真实的工作服务器

VIP:向外部直接面向用户请求,作为用户请求的目标IP地址

DIP:主要用于和内部主机通讯的IP地址

RIP:后端服务器IP地址

CIP:客户端IP

LVS四种工作模式

  • NAT 模式(网络地址转换)请求、响应双向流量全部经过 LVS,调度器修改数据包源 / 目的 IP。支持跨网段,性能偏低。
  • DR 模式(Direct Routing 直接路由)只修改数据包 MAC 地址,后端 RS 响应直接回客户端,不经过 LVS,性能天花板。要求 VS 和 RS 必须在同一局域网。
  • TUN 模式(IP 隧道模式)IP 报文封装隧道转发,支持跨公网、异地跨网段服务器,适合多地分布式集群。
  • FullNAT 全 NAT 模式云服务器专用方案,双向地址转换,解决 DR 模式必须同网段的限制,兼容云厂商虚拟网络。

NAT模式

路由转发模式,负载均衡器既要修改请求报文的目标地址,还需要修改响应报文的原地址,适合小规模集群

lvs会修改两次TCP报文的IP包头,第一次就是用户传过来的TCP报文的IP包头修改为后端IP和端口,然后后端处理完请求后再次修改TCP报文在返回给客户端,全程只有一次TCP连接

DR模式

直接路由模式,该模式下,负载均衡只修改请求报文的目标MAC地址,而不修改IP地址。后端直接将报文发松给客户端

LVS实验

lvs常用指令

1.集群增删管理
参数 作用
-A 新增一条 ** 虚拟服务器(VIP)** 配置
-D 删除一条 ** 虚拟服务器(VIP)** 配置
-a 给指定 VIP,新增一台后端真实节点(RS)
-d 从指定 VIP,删除一台后端真实节点(RS)
-C 一键清空 IPVS 表里所有 LVS 集群配置
2.信息查看
参数 作用
-L 列出全部 IPVS 集群表(VIP + 所有后端 RS 配置)
-n 纯数字格式显示 IP 地址、端口,不做域名反向解析
3.地址 & 协议指定
参数 作用
-t <VIP:Port> 指定 TCP 协议的虚拟 IP + 端口(VIP 对外访问地址)
-r <RIP:Port> 指定后端真实服务器 IP + 端口(RS 业务地址)
4.调度算法

-s <算法名>:指定 LVS 负载均衡调度策略

  • rr:轮询
  • wrr:加权轮询
  • lc:最少连接
  • wlc:加权最少连接
5.工作模式
参数 对应模式
-g DR 直接路由模式(最常用、高性能)
-m NAT 网络地址转换模式
-i TUN IP 隧道模式
6.节点权重

-w <权重数值>设置后端 RS 节点权重,权重越高,分配到的用户请求越多,配合加权调度算法生效

lvs-NAT模式配置

1.tomcat-user与tomcat-admin准备不同的页面显示,用于后续观测负载均衡

修改apache目录下的webapps下面的ROOT文件,此前已经配置过

2.配置真实服务器的路由信息

告诉tomcat如果要将数据转发到外网就告诉他们同一网段的,配置的了两张网卡的lvs服务器,也就是内网网址为192.168.248.129的服务器

#添加服务器路由信息
user:    route add -net 192.168.22.0/24(外网) gw 192.168.248.129(内网)
admin:   route add -net 192.168.22.0/24(外网) gw 192.168.248.129(内网)

# 若添加错误直接将add修改为del就可以直接删除

3.lvs服务器安装ipvsadm软件

这里就直接yum安装即可

yum install -y ipvsadm

4.lvs服务器启动路由功能

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

5.lvs添加添加虚拟服务器配置及指定负载策略

ipvsadm -A -t 192.168.22.139:80 -s rr

6.lvs添加真实服务器配置

# 修改tcp报文ip包头的目的ip和端口发送到后端服务器
ipvsadm -a -t 192.168.22.139:80 -r 192.168.248.130:8080 -m

# 修改tcp报文ip包头的目的ip和端口发送到后端服务器
ipvsadm -a -t 192.168.22.139:80 -r 192.168.248.128:8080 -m

这时候lvs负载均衡器会将目的地ip的VIP(负载均衡器)修改为RIP(后端服务器)

7.查看当前IPVS表确认配置

ipvsadm -Ln

上述几个参数分别为

字段名 全称 含义 & 你的截图解读
Prot Protocol 协议类型,你的截图是TCP,还支持UDP/SCTP,对应你之前用的-t(TCP)、-u(UDP)参数
LocalAddress:Port 本地地址:端口 LVS 的 VIP(虚拟 IP)+ 对外服务端口,也就是客户端访问的目标地址。截图里是192.168.22.139:80,客户端就是访问这个地址来触发负载均衡
Scheduler 调度算法 你配置的 LVS 负载均衡调度策略,你的截图是rr(轮询),和你之前学的wrr加权轮询、lc最少连接、wlc加权最少连接完全对应,就是-s参数配置的内容
Flags 标志位 额外功能标记,你的截图为空。常见的比如P(Persistent,持久连接 / 会话保持)、H(按源 IP 哈希)等,默认无特殊配置则为

8.访问测试

在浏览器里面测试容易被游览的长连接影响直接用lvs服务器测试负载均衡是否生效

负载均衡生效

lvs-DR负载配置

在dr负载模式下,后端的两个主句必须通外网,因为后端在接收到负载均衡器的包后会直接将包发送给客户端因此需要通外网

1.lvs添加一个虚拟IP(VIP)

ifconfig ens33:0 192.168.22.121 broadcast 192.168.22.255 netmask 255.255.255.0 up

2.lvs主机设置路由转发

route add -host 192.168.22.121 dev ens33:0

vim /etc/sysctl.conf


添加 / 修改以下参数:
# 开启IPv4路由转发功能
net.ipv4.ip_forward = 1
# 关闭全网卡ICMP重定向
net.ipv4.conf.all.send_redirects = 0
# 关闭ens33网卡ICMP重定向
net.ipv4.conf.ens33.send_redirects = 0
# 关闭默认网卡ICMP重定向
net.ipv4.conf.default.send_redirects = 0

# 保存退出后,执行命令配置生效
sysctl -p

这里的ens33可能因配置而各异,我的22网段在ens33这个网卡,另外的配置也可能在ens36

3.lvs添加虚拟服务器配置及指定策略负载

ipvsadm -A -t 192.168.22.121 -s rr

4.lvs添加真实服务器配置

ipvsadm -a -t 192.168.22.121:80 -r 192.168.22.142:80 -g
ipvsadm -a -t 192.168.22.121:80 -r 192.168.22.143:80 -g

这里不修改端口是因为DR模式只修改MAC地址

5.lvs配置永久生效

ipvsadm-save > /etc/sysconfig/ipvsadm
systemctl enable ipvsadm

设置永久生效,切开机自启动ipvsadm

6.tomcat服务器的lo网卡设置为子网掩码32位vip

admin:    ifconfig lo:0 192.168.22.121/32
user:     ifconfig lo:0 192.168.22.121/32

两台tomcat服务器都设置lo网卡,当两台服务器都收到包,因为lvs负载均衡器只修改MAC地址传到后端服务器,而后端服务器发现目的ip不为自己的话就会不响应,但是添加一个和lvs负载均衡器一样的ip地址就会响应

7.tomcat服务器设置内核参数

为了防止3台服务器有相同的ip导致出现错误,在tomcat里面设置以下操作

# 当客户端访问局域网内的VIP时候不回应,让lvs负载均衡器回应
echo "1" > /proc/sys/net/ipv4/conf/lo/arp_ignore

# 当主动对外发数据时候,不在局域网内广播自己的存在
echo "2" > /proc/sys/net/ipv4/conf/lo/arp_announce

8.客户端测试

在测试之前需要修改tomcat的server端口,将其修改为80端口在server.xml文件,将8080端口修改为80

找到8080将他们都修改为80就可以了

配置生效

Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐