LVS集群

目录

一、集群概述

(一)LVS集群主要组件组成:

[1、负载调度器(Load Balancer)](#1、负载调度器(Load Balancer))

[2、后端服务器(Real Server)](#2、后端服务器(Real Server))

[3、IP负载均衡(IP Load Balancing)](#3、IP负载均衡(IP Load Balancing))

3.1、负载均衡技术类型:

1)四层负载均衡器:

2)七层负载均衡器:

3)负载均衡实现方式:

[a)硬件负载均衡产品:F5 、深信服 、Radware](#a)硬件负载均衡产品:F5 、深信服 、Radware)

[b)软件负载均衡产品: LVS(Linux Virtual Server)、 Haproxy、Nginx、Ats(apache traffic server)](#b)软件负载均衡产品: LVS(Linux Virtual Server)、 Haproxy、Nginx、Ats(apache traffic server))

[4、调度算法(Scheduling Algorithm)](#4、调度算法(Scheduling Algorithm))

二、LVS结构

(一)LVS结构的核心组件

[1、负载均衡器(Load Balancer)](#1、负载均衡器(Load Balancer))

2、调度器(Scheduler)

[3、后端服务器(Real Server)](#3、后端服务器(Real Server))

4、监控器(Monitor)

(二)三层结构

(三)架构对象

三、LVS工作模式

[1、LVS-NAT模式(NAT mode)](#1、LVS-NAT模式(NAT mode))

[2、LVS-DR模式(Direct Routing mode)直接路由模式、应用最广泛】](#2、LVS-DR模式(Direct Routing mode)直接路由模式、应用最广泛】)

[3、LVS-TUN(IP隧道模式(IP Tunneling mode),不常用)](#3、LVS-TUN(IP隧道模式(IP Tunneling mode),不常用))

4、FULL-NAT模式(双向转换模式,不常用)

[5、TUN模式(Tunneling mode)](#5、TUN模式(Tunneling mode))

四、LVS负载均衡算法

1、静态负载均衡

2、动态负载均衡

五、ipvsadm命令详解

六、LVS配置案例

(一)基础配置

(二)实现NAT模型搭建

1、负载调度器配置

1.1、配置IP地址

1.2、安装ipvsadm

1.3、开启路由转发功能(两种方式)

1.4、加载ip_vs模块

1.5、启动ipvsadm服务

1.6、配置负载分配策略

1.7、保存策略

1.8、查看策略

2、web节点配置

2.1、安装nginx

2.1、启动服务

2.2、更改测试页面进行访问

2.3、使用虚拟机1进行访问测试

(三)实现DR模型搭建

1、负载调度器配置

1.1、调整ARP参数

1.2、配置虚拟IP地址

1.3、安装ipvsadm

1.4、加载ip_vs模块

1.5、启动ipvsadm服务

1.6、配置负载分配策略

1.7、保存策略

1.8、查看策略

2、web节点配置

2.1、调整ARP参数

2.2、配置虚拟IP地址

2.3、重启网络进行查看

2.4、添加回环路由

3、安装nginx

3.1、编辑网页访问文件

3.2、进行测试

3.3、进行抓包查看

总结


一、集群概述

LVS(Linux Virtual Server)是一个基于Linux操作系统的高性能、可扩展的负载均衡技术,用于构建可靠和高性能的服务器集群。LVS通过将客户端请求分发到多个后端服务器,以实现负载均衡,提高系统的性能、可用性和可扩展性。

(一)LVS集群主要组件组成:

1、负载调度器(Load Balancer)

负载调度器是LVS集群的核心组件,负责接收来自客户端的请求,并将请求分发到后端的服务器。它可以根据不同的调度算法(如轮询、最少连接、源地址散列等)来决定将请求发送到哪个后端服务器。常用的负载调度器有LVS/NAT、LVS/DR和LVS/TUN等。

2、后端服务器(Real Server)

后端服务器是承接客户端请求的实际服务器。负载调度器将客户端请求转发给后端服务器来处理,后端服务器可以是真实的物理服务器或虚拟机。后端服务器提供实际的服务,如WEB服务、数据库服务等。

3、IP负载均衡(IP Load Balancing)

负载调度器使用IP负载均衡技术,通过配置虚拟IP(VIP)来处理客户端的请求。VIP是集群的入口,客户端将请求发送到VIP上,负载调度器根据配置的调度算法将请求转发给后端服务器。

3.1、负载均衡技术类型:

1)四层负载均衡器:

也称为 4 层交换机,主要通过分析 IP 层及 TCP/UDP 层的流量实现基于 IP 加端口的负载均衡,如常见的 LVS、F5 等;

2)七层负载均衡器:

也称为 7 层交换机,位于 OSI 的最高层,即应用层,此负载均衡器支持多种协议,如HTTP、FTP、SMTP 等。7 层负载均衡器可根据报文内容,配合一定的负载均衡算法来选择后端服务器,即"内容交换器"。如常见的 HAProxy、Nginx。

3)负载均衡实现方式:
a)硬件负载均衡产品:F5 、深信服 、Radware
b)软件负载均衡产品: LVS(Linux Virtual Server)、 Haproxy、Nginx、Ats(apache traffic server)

4、调度算法(Scheduling Algorithm)

负载调度器使用不同的调度算法来分发客户端请求到后端服务器。常见的算法包括轮询(Round Robin)、最少连接(Least Connections)、源地址散列(Source IP Hashing)等。调度算法的选择取决于具体的应用场景和需求。

LVS集群的优势包括高性能、高可用性、可伸缩性和灵活性。它可以通过添加或删除后端服务器来扩展集群的能力,同时提供故障转移和服务恢复的功能,以确保系统的可用性。LVS是一个开源技术,在Linux操作系统中广泛使用。

二、LVS结构

LVS结构指的是负责网络流量调度和负载均衡的组件结构。LVS是一种基于Linux操作系统的高性能、可扩展的服务器集群方案,通过将客户端请求分发到多个后端服务器上,实现负载均衡和高可用性。

(一)LVS结构的核心组件

1、负载均衡器(Load Balancer)

负载均衡器是整个LVS集群的前端,接收客户端请求并将其转发给后端的实际服务器。负载均衡器可以使用多种算法(如轮询、源地址哈希、最少连接等)来决定请求应该转发到哪个后端服务器上。

2、调度器(Scheduler)

调度器是负载均衡器内部的组件,根据配置的算法和策略,决定将客户端请求分发给哪个后端服务器。常见的调度算法有轮询、加权轮询、源地址哈希等。

3、后端服务器(Real Server)

后端服务器是LVS集群中实际处理客户端请求和提供服务的服务器。负载均衡器将客户端请求经过调度器的处理后,将其转发给一个或多个后端服务器。

4、监控器(Monitor)

监控器负责监测和检测后端服务器的运行状态和可用性。当后端服务器出现故障或不可用时,监控器会将其从负载均衡器的转发列表中移除,确保客户端请求不会发送到不可用服务器上。

LVS结构通过将客户端请求智能地分发给多个后端服务器,实现了负载均衡和高可用性。它可以提高服务器的并发处理能力和可扩展性,提升系统的性能和可靠性。LVS集群广泛应用于Web服务器、应用服务器、数据库服务器等多种应用场景中。

(二)三层结构

负载调度器

服务器池

共享存储

(三)架构对象

VS:Virtual Server,也称为 Director,负载均衡服务器

RS:Real Server,真正的服务器,集群中各节点

VIP:Director 向外部提供服务的 IP

DIP:Director 向内部与 RS 通信的 IP

RIP:真实服务器的 IP

CIP:客户端的 IP

三、LVS工作模式

LVS(Linux Virtual Server)具有多种工作模式,常见的包括以下几种:

1、LVS-NAT模式(NAT mode)

在NAT模式下,负载均衡器作为网络地址转换器(NAT)工作,将客户端请求的目标地址修改为后端服务器的地址,并将响应从后端服务器返回给客户端。这种模式可以隐藏后端服务器的真实地址,提高系统的安全性。

2、LVS-DR模式(Direct Routing mode)直接路由模式、应用最广泛】

在DR模式下,负载均衡器将客户端请求转发到后端服务器,但响应直接由后端服务器返回给客户端,负载均衡器不参与数据的转发。这种模式需要将负载均衡器和后端服务器处于同一个子网中,以便客户端能够直接访问后端服务器。

3、LVS-TUN(IP隧道模式(IP Tunneling mode),不常用)

在IP隧道模式下,负载均衡器通过IP隧道技术,将客户端请求封装在IP包中,并通过隧道转发给后端服务器。后端服务器处理请求后,将响应通过隧道发回给负载均衡器,再由负载均衡器返回给客户端。与TUN模式相比,IP隧道模式使用不同的隧道实现。

4、FULL-NAT模式(双向转换模式,不常用)

FULL-NAT模式是一种双向转换模式,通过在网络边界设备上进行地址映射来实现公网IP地址与内部IP地址的相互转换。在FULL-NAT模式下,数据包在进出网络边界设备时会进行地址转换,使得内部IP地址能够与公网IP地址进行通信。FULL-NAT模式相对于TUN模式来说,更加复杂且不常用。

5、TUN模式(Tunneling mode)

TUN模式是一种基于IP层的隧道模式,在TUN模式下,负载均衡器通过建立隧道(tunnel)技术,将客户端请求封装在IP包中,数据包在隧道传输过程中不做地址转换,仅进行封装和解封装操作,并通过隧道转发给后端服务器。后端服务器处理请求后,将响应通过隧道发回给负载均衡器,再由负载均衡器返回给客户端。TUN模式常用于虚拟私有网络(VPN)的实现。

这些工作模式可以根据实际需求和网络环境选择,每种模式都有自己的特点和适用场景。根据工作模式的选择,配置正确的网络环境和路由设置,LVS可以实现高性能的负载均衡和高可用性的服务。

四、LVS负载均衡算法

1、静态负载均衡

rr(round robin,轮询 )

wrr(weight round robin,加权轮询)

sh(source hashing,源地址散列算法(HASH))

dh(destination hashing,目标地址 HASH)

2、动态负载均衡

lc(leash-connection,最少连接 )

简单算法:active * 256 + inactive (谁的小选谁)

wlc(加权最少连接)

简单算法:(active * 256 + inactive) / weight(谁的小选谁)

sed(最少期望延迟)

简单算法:(active + 1) * 256 / weight (谁的小选谁)

nq(never queue,永不排队)

LBLC(基于局部性的最少连接 )

LBLCR(基于局部性的带复制功能的最少连接)

五、ipvsadm命令详解

|----|-------------|
| -A | 添加虚拟服务节点 |
| -D | 删除虚拟服务节点 |
| -L | 查看虚拟服务节点列表 |
| -a | 添加真实服务节点 |
| -d | 添加真实服务节点 |
| -l | 添加真实服务节点 |
| -t | 指定虚拟服务器IP地址 |
| -s | 指定虚拟服务器IP地址 |
| -r | 指定虚拟服务器IP地址 |
| -w | 指定权重值 |
| -g | 直接路由模式(默认) |
| -i | 直接路由模式(默认) |
| -m | NAT模式 |

六、LVS配置案例

(一)基础配置

关闭防火墙

systemctl stop firewalld && systemctl disable firewalld

关闭Selinux

setenforce 0

关闭Networkmanager

systemctl stop NetworkManager && systemctl disable NetworkManager

配置IP地址

实验要求准备三台虚拟机,同时可以使用主机与虚拟机之间的通联

虚拟机1:

第一块网卡ens33:192.168.11.101

第二块网卡ens36:192.168.1.100

虚拟机2:

192.168.11.102

虚拟机3:

192.168.11.103

(二)实现NAT模型搭建

拓补图

1、负载调度器配置

1.1、配置IP地址

增加一块网卡然后查看第二块网卡名称

ip a

配置ip地址

cd /etc/sysconfig/network-scripts/
cp ifcfg-ens33 ifcfg-ens36
vim ifcfg-ens36

网卡参数为:

TYPE=Ethernet
BOOTPROTO=static
NAME=ens36
DEVICE=ens36
ONBOOT=yes
IPADDR=192.168.1.100
PREFIX=24
GATEWAY=192.168.1.2
DNS1=192.168.1.2

为了达到使用效果,将主机的VMnet5默认网关地址改为第一台虚拟机的ens36的网卡IP地址,进行访问。

虚拟机之间互ping网络测试

ping主机

1.2、安装ipvsadm

yum install -y ipvsadm

解析:

ipvsadm是一个Linux系统中的工具,用于配置和管理IPVS(IP Virtual Server)服务。IPVS是一个网络负载均衡技术,它可以将来自客户端的请求分发到多个后端服务器上,以实现负载均衡和高可用性。通过ipvsadm工具,可以配置和管理IPVS的调度算法、虚拟服务、后端服务器等参数。

1.3、开启路由转发功能(两种方式)

vim /etc/sysctl.conf

vim /etc/sysctl.d/route.conf

须知:

/etc/sysctl.d/是没有这个文件的,需要我们手动vim进行创建并编辑内容

添加内容如下:

net.ipv4.ip_forward = 1

解析:

"net.ipv4.ip_forward = 1"是Linux内核中的一个网络配置参数,它的作用是启用IP数据包的转发功能。当这个参数的值设置为1时,表示允许Linux系统将收到的IP数据包转发到其他网络接口,实现数据包在不同网络之间的传递。

使用命令使其生效 (分别对应上述两种方式)

sysctl -p

sysctl -p /etc/sysctl.d/route.conf 

1.4、加载ip_vs模块

modprobe ip_vs
lsmod | grep ip_vs

命令解析:

modprobe: 这是一个命令,用于加载内核模块。

ip_vs: IP_VS是一种内核模块,它实现了Linux上的虚拟服务器技术。

lsmod: 这是一个命令,用于列出已加载的内核模块。

|: 这是一个管道符号,用于将一个命令的输出作为另一个命令的输入。

grep: 这是一个命令,用于在输入中搜索指定的模式(或正则表达式)并返回匹配的行。

综上所述,modprobe ip_vs命令会加载IP_VS内核模块,而lsmod | grep ip_vs命令会列出已加载的内核模块,并过滤出包含"ip_vs"关键词的部分。这样可以查看系统中是否已加载了IP_VS模块。

1.5、启动ipvsadm服务

systemctl start ipvsadm

这里显示启动服务失败,主要原因是缺少这个文件

创建这个缺失的文件

touch /etc/sysconfig/ipvsadm

1.6、配置负载分配策略

ipvsadm -A -t 192.168.1.100:80 -s rr
ipvsadm -a -t 192.168.1.100:80 -r 192.168.11.102:80 -m
ipvsadm -a -t 192.168.1.100:80 -r 192.168.11.103:80 -m

命令解析:

"-A"表示添加一个新的虚拟服务或者后端服务器,"-t"指定了目标地址和端口,"-s"指定了调度算法,"-r"指定了后端服务器的地址和端口,"-m"用于指定调度算法的参数。

  • 第一条命令:添加一个新的虚拟服务,目标地址为192.168.1.100,监听端口为80,使用rrip算法作为调度算法。
  • 第二条命令:添加一个新的后端服务器到虚拟服务中,虚拟服务的目标地址为192.168.1.100,监听端口为80,后端服务器的地址为192.168.11.102,服务端口为80,使用默认的调度算法。
  • 第三条命令:添加一个新的后端服务器到虚拟服务中,虚拟服务的目标地址为192.168.1.100,监听端口为80,后端服务器的地址为192.168.11.103,服务端口为80,使用默认的调度算法。

1.7、保存策略

ipvsadm-save > /etc/sysconfig/ipvsadm

命令解析:

IPVS(IP Virtual Server)是Linux内核中的一个模块,提供了一种负载均衡和集群的解决方案。IPVSADM是一个与IPVS交互的工具,用于配置和管理IPVS的规则和设置。 该命令的作用是将当前IPVS的配置保存到指定的文件中,以便在需要时可以重新加载配置。

1.8、查看策略

ipvsadm -Ln
cat /etc/sysconfig/ipvsadm

2、web节点配置

2.1、安装nginx

yum install -y nginx

2.1、启动服务

systemctl start nginx

2.2、更改测试页面进行访问

在第二台虚拟机上进行操作:

echo nginx1 > /usr/share/nginx/html/index.html

在第三台虚拟机上进行操作:

echo nginx2 > /usr/share/nginx/html/index.html

2.3、使用虚拟机1进行访问测试

curl 192.168.11.102
curl 192.168.11.103

2.4、使用主机进行访问测试:

注: 使用 ctrl+F5 深度刷新,通过利用 nginx 的方式,实现 LVS 的负载均衡

(三)实现DR模型搭建

实验拓补图

实验要求

准备三台虚拟机,同时可以使用主机与虚拟机之间的通联

虚拟机1:

ens33:192.168.11.101

ens33:0:192.168.11.200

注:网卡信息在下方

虚拟机2:

192.168.11.102

虚拟机3:

192.168.11.103

ping虚拟机之间网络

ping主机

1、负载调度器配置

第一台虚拟机上的配置:

1.1、调整ARP参数

vim /etc/sysctl.conf
net.ipv4.conf.all.send_redirects = 0 
net.ipv4.conf.default.send_redirects=0
net.ipv4.conf.ens33.send_redirects = 0
sysctl -p

1.2、配置虚拟IP地址

cd /etc/sysconfig/network-scripts/

cp ifcfg-ens33 ifcfg-ens33:1
vim ifcfg-ens33:1

重启网络

systemctl restart network

1.3、安装ipvsadm

yum install -y ipvsadm

1.4、加载ip_vs模块

modprobe ip_vs
lsmod | grep ip_vs

1.5、启动ipvsadm服务

touch /etc/sysconfig/ipvsadm
systemctl start ipvsadm

注:跟上个NET做法一样,没有这个文件的话是启动不了服务的

1.6、配置负载分配策略

ipvsadm -A -t 192.168.11.200:80 -s rr
ipvsadm -a -t 192.168.11.200:80 -r 192.168.11.102:80 -g
ipvsadm -a -t 192.168.11.200:80 -r 192.168.11.103:80 -g

1.7、保存策略

ipvsadm-save > /etc/sysconfig/ipvsadm

1.8、查看策略

ipvsadm -Ln
cat /etc/sysconfig/ipvsadm

2、web节点配置

第二台虚拟机和第三台机器配置

2.1、调整ARP参数

vim /etc/sysctl.conf

net.ipv4.conf.all.arp_ignore=1 
net.ipv4.conf.all.arp_announce=2 
net.ipv4.conf.default.arp_ignore=1 
net.ipv4.conf.default.arp_announce = 2 
net.ipv4.conf.lo.arp_ignore = 1 
net.ipv4.conf.lo.arp_announce=2
sysctl -p

2.2、配置虚拟IP地址

两台均是一样的配置

cd /etc/sysconfig/network-scripts/
cp ifcfg-lo ifcfg-lo:0
vim ifcfg-lo:0

DEVICE=lo:0
IPADDR=192.168.11.200
NETMASK=255.255.255.255
NETWORK=192.168.11.0
# If you're having problems with gated making 127.0.0.0/8 a martian,
# you can change this to something else (255.255.255.255, for example)
BROADCAST=192.168.11.255
ONBOOT=yes
NAME=loopback

2.3、重启网络进行查看

2.4、添加回环路由

route add -host 192.168.11.200/32 dev lo:0

3、安装nginx

yum install -y nginx

启动服务

systemctl start nginx

3.1、编辑网页访问文件

echo nginx1 > /usr/share/nginx/html/index.html
echo nginx2 > /usr/share/nginx/html/index.html

3.2、进行测试

curl 192.168.11.102
curl 192.168.11.103

3.3、进行抓包查看

使用系统自带的抓包工具进行查看

tcpdump -i ens33:0

内容解析:

"ARP, Request who-has 192.168.11.103 tell localhost.localdomain, length 28"是一个ARP请求消息,表示有一台主机正在寻找具有IP地址192.168.11.103的目标主机。该请求消息的长度为28字节。

"ARP, Reply 192.168.11.103 is-at 00:0c:29:34:85:61 (oui Unknown), length 46"是一个ARP回复消息,表示具有IP地址192.168.11.103的目标主机的MAC地址是00:0c:29:34:85:61。该回复消息的长度为46字节。

ARP协议用于将IP地址映射到MAC地址,以便在局域网上进行通信。请求消息用于询问目标主机的MAC地址,回复消息用于告知源主机所要访问的目标主机的MAC地址。

使用软件进行查看

(ps:这个软件查看相对来说条理清晰,比系统自带的好用多了)

第一行表示在时刻1118,从IP地址192.168.11.11向IP地址192.168.11.200发送了一个HTTP GET请求,请求的内容是根路径(/)。

第二行表示在时刻1122,从IP地址192.168.11.200向IP地址192.168.11.11发送了一个HTTP响应,响应的状态码是200 OK,响应的内容是文本/HTML格式。

第三行表示在时刻1123,从IP地址192.168.11.11向IP地址192.168.11.200发送了一个HTTP GET请求,请求的内容是/favicon.ico。

第四行表示在时刻1128,从IP地址192.168.11.200向IP地址192.168.11.11发送了一个HTTP响应,响应的状态码是404 Not Found,响应的内容是文本/HTML格式。

总结

LVS集群是一种强大而灵活的负载均衡技术,能够提供高可用性、高性能和灵活的配置管理。在实际应用中,LVS集群为我们提供了可靠的解决方案,提升了系统的可用性和性能,对于大规模的网络应用来说具有重要的意义。本人也是初学,可能有理解不到位的地方,请大家多多见谅。

相关推荐
weixin_442643428 分钟前
推荐FileLink数据跨网摆渡系统 — 安全、高效的数据传输解决方案
服务器·网络·安全·filelink数据摆渡系统
Karoku06626 分钟前
【企业级分布式系统】Zabbix监控系统与部署安装
运维·服务器·数据库·redis·mysql·zabbix
为什么这亚子29 分钟前
九、Go语言快速入门之map
运维·开发语言·后端·算法·云原生·golang·云计算
半桶水专家31 分钟前
用go实现创建WebSocket服务器
服务器·websocket·golang
布值倒区什么name44 分钟前
bug日常记录responded with a status of 413 (Request Entity Too Large)
运维·服务器·bug
孤客网络科技工作室1 小时前
VMware 虚拟机使用教程及 Kali Linux 安装指南
linux·虚拟机·kali linux
。puppy2 小时前
HCIP--3实验- 链路聚合,VLAN间通讯,Super VLAN,MSTP,VRRPip配置,OSPF(静态路由,环回,缺省,空接口),NAT
运维·服务器
颇有几分姿色2 小时前
深入理解 Linux 内存管理:free 命令详解
linux·运维·服务器
光芒再现dev2 小时前
已解决,部署GPTSoVITS报错‘AsyncRequest‘ object has no attribute ‘_json_response_data‘
运维·python·gpt·语言模型·自然语言处理
AndyFrank2 小时前
mac crontab 不能使用问题简记
linux·运维·macos