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 |

相关推荐
乌鸦乌鸦你的小虎牙3 分钟前
linux 抓包工具tcpdump使用小记(使用时注意权限和系统资源)
linux·运维·tcpdump
小小寂寞的城13 分钟前
Jenkins里构建一个简单流水线
java·运维·jenkins
*郑*33 分钟前
nginx配置反向代理支持CORS跨域请求
运维·nginx
VirusVIP3 小时前
Windows CMD通过adb检查触摸屏Linux驱动是否被编译
linux·运维·adb
chennalC#c.h.JA Ptho3 小时前
ubuntu studio 系统详解
linux·运维·服务器·经验分享·ubuntu·系统安全
yt948327 小时前
Docker-基础(数据卷、自定义镜像、Compose)
运维·docker·容器
水银嘻嘻9 小时前
web 自动化之 KDT 关键字驱动详解
运维·自动化
Vone_669 小时前
node.js 邮箱验证服务器搭建
运维·服务器·node.js
丢丢丢丢丢丢~10 小时前
apache2的默认html修改
linux·运维·服务器
wusam10 小时前
Linux系统管理与编程20:Apache
linux·运维·服务器·apache·shell编程