lvs负载均衡

一、相关概念

lvs即linux virtual server,是基于集群的方式实现。

1.集群与分布式

相同的应用部署在不同的服务器上,提供统一的服务,以及同样的功能。机器的性能大致相同。

把不同的组件部署在不同的服务器上,组件之间(应用)之间依靠网络进行通信,实现定制化的功能。

2.系统性能扩展方式

单节点的扩展方式:

垂直扩展,向上扩展,依靠提高计算机的性能(硬件性能)。性能提升是有瓶颈的。

水平扩展,向外扩展,增加设备的方式提供性能。这就是集群的由来。

3.集群的类型

负载均衡 LB load balance

HA high Availiablity 高可用

  • 负载均衡高可用
  • 主备高可用 (keepalive 用的就是vrrp协议)

4.系统的可靠性指标

值范围:0-1

MTBF:平均无故障时间

MTTR:平均故障恢复时间

A=MTBF/(MTBF+MTTR)*100%

A的值要无限接近于1

停机时间:不算在故障时间范围之内

计划内停机时间,这个不算在故障时间;计划外的停机时间,算在故障时间内。

3个9(99.9%)

  • 含义:系统在一年内最多可能有8.76小时的故障时间。
  • 换算:相当于每天约18分钟。
  • 适用场景:适用于大多数企业的日常运营需求。

4个9(99.99%)

  • 含义:系统在一年内最多可能有52.56分钟的故障时间。
  • 换算:相当于每天不到1分钟的中断时间。
  • 适用场景:对业务连续性要求较高的企业,如电信、电子商务等。

5个9(99.999%)

  • 含义:系统在一年内最多可能有5.26分钟的故障时间。
  • 换算:相当于每天约5秒钟的中断时间。
  • 适用场景:对系统的可靠性有着严格的要求,比如电信网络、银行、证券交易所等金融机构等。

二、LVS

1.LVS介绍

LVS(Linux Virtual Server)是一个开源的负载均衡解决方案,由章文嵩博士于1998年创建 1 。它通过将网络流量分发到多台后端服务器,提高系统的处理能力和可用性。LVS的架构包括负载均衡器(Director)、后端服务器(Real Server)和客户端三部分。

2.LVS的工作原理

LVS的工作原理基于内核中的IPVS模块,根据预设算法转发请求。它支持多种负载均衡算法,如轮询、加权轮询、最少连接和最少连接加权

3.LVS的组成部分

  • ipvsadm:用户空间管理工具,用于配置和管理LVS。
  • ipvs:内核空间模块,负责请求的转发。

4.LVS的工作模式

LVS提供三种主要的工作模式:

(1)NAT模式

是最常用的负载均衡方式之一 ,通过修改请求报文的目标IP地址实现负载均衡。

NAT的性能较差,第一要进行转换,第二要进行数据包的路由。

NAT模式的后端真实服务器的数量一般10-30台。

(2)DR模式

直连(接)路由模式就是二层转发,性能是最高的。通过操纵封装新的MAC地址实现负载均衡。DR模式虚拟出一个ip,通过虚拟ip来访问。客户端都是访问虚拟ip地址。

虚拟ip地址也是在调度器上,调度器根据均衡算法选择一条RS,RS处理完请求之后直接响应给客户端,不是由调度器再来响应客户端。

DR模式的特点
  • 调度器和真实服务器必须要在同一个网段。
  • 真实服务器的地址可以是内网也可以是公网,如果RIP是公网可以直接用于实现不同网络之间的路由信息交换。
  • vip地址在调度器上有,在真实服务器也需要配置。

ARP根据MAC地址,找到对应的ip地址。如果不配置,调度器和真实服务器之间无法进行通信。通过修改内核的方式,让真实的物理地址来响应请求。

  • 所有真实服务器的网关不能指向到调度器的ip地址。

(3)TUN模式

在原请求IP报文之外新加一个IP首部实现负载均衡。

5.LVS的应用场景

LVS适用于需要高性能、高可用的负载均衡场景,如大型网站或重要的服务。它的抗负载能力强,性能高,能够处理大量并发请求,且工作在网络四层,具有较好的稳定性和可靠性。

6.LVS集群的术语

|----------------------|-------------------------------------------------------|
| 术语 | 意思 |
| VS (virtual server) | lvs的逻辑名字,外部访问lvs的ip地址和端口 |
| DS (director server) | lvs集群当中的主服务器,调度器,是整个集群的核心,接受客户端的请求然后根据负载均衡的算法转发到后端的RS |
| RS (real server) | lvs集群中的真实服务器,也就是后端的服务器,接受调度器转发过来的请求 |
| CIP (client ip) | 客户端的ip地址 |
| VIP (virtual ip) | 集群对外提供的虚拟ip地址 |
| DIP (director ip) | 调度器的ip地址 |
| RIP | 后端服务器的ip地址 |

三、NAT和DR实例

1.ipvsadm的操作命令

|----|-------------------------------------|
| 选项 | 说明 |
| -A | 添加虚拟服务器 |
| -D | 删除整个虚拟服务器,虚拟服务器对应的就是后台的真实服务器 |
| -s | 指定负载均衡的算法(rr wrr lc wlc),加载时必须要声明算法 |
| -a | 添加真实服务器 |
| -m | 表示集群使用的是NAT模式 |
| -g | 表示使用DR模式 |
| -i | 表示使用隧道模式 |
| -w | 设置权重 |
| -l | 列表形式 |
| -n | 数字化的显示ip和端口 |
| -t | 指定调度器的vip地址的ip和端口 |
| -r | 指定RIP的ip和端口 |

2.NAT实验

客户端(一般是外网)

调度器nginx1 ens33:192.168.206.60 ens37:12.0.0.10

rs1 nginx2 192.168.206.70

rs2 nginx3 192.168.206.80

nginx2和3网关要修改成192.168.206.60

#主要配置调度器

apt -y install ipvsadm

modprobe ip_vs #手动加载ip_vs模块

cat /proc/net/ip_vs

ipvsadm -version #查看ipvs版本

vim /etc/netplan/01-network-manager-all.yaml

#添加网卡

ens37:

dhcp4: no

addresses: 12.0.0.10/24

systemctl restart ipvsadm

systemctl status ipvsadm

#轮询

ipvsadm -A -t 12.0.0.10:80 -s rr

ipvsadm -a -t 12.0.0.10:80 -r 192.168.206.70:80 -m #当访问12.0.0.10时,数据包可以转发到的真实服务器之一,使用的是NAT模式

ipvsadm -a -t 12.0.0.10:80 -r 192.168.206.80:80 -m

ipvsadm -ln #查看策略

vim /etc/sysctl.cnf

:set nu

28行 取消注释

sysctl -p #立即生效

#地址转换(公网访问私网一定要做)

iptables -t nat -A POSTROUTING -s 192.168.206.0/24 -o ens36-j SNAT --to 12.0.0.10

#因为使用的是私网模拟该实验,所以不用加iptables规则,但是客户端的ip要和调度器的网段一致,网关要指向调度器。

#客户端测试是否连通

curl 12.0.0.10
ipvsadm -ln #l和n的顺序不能改,否则会报错

ipvsadm -d -r 192.168.206.70:80 -t 12.0.0.10:80 #删除节点服务器

ipvsadm -C #清空所有

#权重轮询

ipvsadm -A -t 12.0.0.10:80 -s wrr

ipvsadm -a -t 12.0.0.10:80 -r 192.168.206.70:80 -m -w 3

ipvsadm -a -t 12.0.0.10:80 -r 192.168.206.80:80 -m -w 1

3.DR实验

调度器nginx1

rs1 nginx2 192.168.206.70

rs2 nginx3 192.168.206.80

客户端

nginx1、nginx2和nginx3添加一个网卡(ens36)

vim /etc/netplan/01-network-manager-all.yaml

#添加网卡

ens36:

dhcp4: no

addresses: 192.168.206.100/24

nginx1:

vim /etc/sysctl.conf

#最底下添加以下三行

net.ipv4.conf.all.send_redirects = 0

net.ipv4.conf.default.send_redirects = 0

net.ipv4.conf.ens36.send_redirects = 0

sysctl -p #立即生效

#添加轮询规则

ipvsadm -A -t 192.168.206.100:80 -s rr

ipvsadm -a -t 192.168.206.100:80 -r 192.168.206.70:80 -g

ipvsadm -a -t 192.168.206.100:80 -r 192.168.206.80:80 -g

#添加路由规则

route add -host 192.168.206.100 dev ens36

systemctl restart ipvsadm

nginx2和3一样:

vim /etc/sysctl.conf

#最底下添加以下四行

net.ipv4.conf.ens36.arp_ignore = 1

net.ipv4.conf.ens36.arp_announce = 2

net.ipv4.conf.ens36.arp_ignore = 1

net.ipv4.conf.ens36.arp_announce = 2

sysctl -p #立即生效

route add -host 192.168.206.100 dev ens36

#客户机上测试

curl 192.168.206.100

总结:LVS模式的比较

|-----------|-------|----------------------|--------------|
| 比较点 | NAT | DR | TUN |
| 优点 | 配置简单 | 性能最好(后端真实服务器直接响应客户端) | vpn |
| 缺点 | 性能低 | 不支持跨网段 | 只能用vpn进行隧道模式 |
| 对真实服务器的要求 | 任意 | 必须要屏蔽ARP的响应 | 必须要有vpn |
| 支持的网络类型 | 内网 | 内网 | 内网/外网 |
| 真是服务器的数量 | 10-30 | 100 | 100 |

相关推荐
Avan_菜菜2 小时前
FRP 内网穿透完整实战:从 HTTP 映射到 HTTPS 自签代理
运维·nginx·https
SelectDB1 天前
Litefuse 开源并推出单进程轻量模式,25 秒就能跑起来的 Agent 可观测与评估平台
运维·后端·自动化运维
XIAOHEZIcode2 天前
Linux系统鼠标偏移常见原因以及修复方案
linux·运维·游戏
用户0328472220703 天前
如何搭建本地yum源(上)
运维
大树886 天前
金刚石散热越强,管路越先见顶
大数据·运维·服务器·人工智能·ai
摇滚侠6 天前
Linux CentOS7 rpm 安装 MySQL 5.7
linux·运维·mysql
霸道流氓气质6 天前
领域驱动设计(DDD)在 Spring Boot 微服务中的实践指南
运维·spring boot·微服务
Inhand陈工6 天前
基于台达PLC与映翰通IG502的智慧水产养殖精准投喂与远程运维解决方案
运维·人工智能·物联网·阿里云·信息与通信
酣大智6 天前
ARP代理--工作原理
运维·网络·arp·arp代理
shushangyun_6 天前
2026年快消品B2B系统推荐:支持终端门店订货、促销政策自动化的工具?
java·运维·网络·数据库·人工智能·spring·自动化