一、相关概念
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 |