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集群为我们提供了可靠的解决方案,提升了系统的可用性和性能,对于大规模的网络应用来说具有重要的意义。本人也是初学,可能有理解不到位的地方,请大家多多见谅。

相关推荐
期待のcode10 分钟前
前后端分离项目 Springboot+vue 在云服务器上的部署
服务器·vue.js·spring boot
AI 智能服务18 分钟前
第6课__本地工具调用(文件操作)
服务器·人工智能·windows·php
码农小韩2 小时前
基于Linux的C++学习——指针
linux·开发语言·c++·学习·算法
wdfk_prog2 小时前
[Linux]学习笔记系列 -- [fs]seq_file
linux·笔记·学习
Jay Chou why did2 小时前
wsl安装完无法进入wsl
linux
石头5303 小时前
Rocky Linux 9.6 docker k8s v1.23.17 kubeadm 高可用部署文档
linux
松涛和鸣3 小时前
49、智能电源箱项目技术栈解析
服务器·c语言·开发语言·http·html·php
凉、介3 小时前
SylixOS 中的 Unix Socket
服务器·c语言·笔记·学习·嵌入式·sylixos
RisunJan3 小时前
Linux命令-ipcs命令(报告进程间通信(IPC)设施状态的实用工具)
linux·运维·服务器