LVS集群

目录

一、集群概述

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

1、负载调度器(Load Balancer)

2、后端服务器(Real Server)

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

3.1、负载均衡技术类型:

1)四层负载均衡器:

2)七层负载均衡器:

3)负载均衡实现方式:

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

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

4、调度算法(Scheduling Algorithm)

二、LVS结构

(一)LVS结构的核心组件

1、负载均衡器(Load Balancer)

2、调度器(Scheduler)

3、后端服务器(Real Server)

4、监控器(Monitor)

(二)三层结构

(三)架构对象

三、LVS工作模式

1、LVS-NAT模式(NAT mode)

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

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

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

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

LVS集群_第1张图片

第二块网卡ens36:192.168.1.100

虚拟机2:

192.168.11.102

LVS集群_第2张图片

虚拟机3:

192.168.11.103

LVS集群_第3张图片

(二)实现NAT模型搭建

拓补图

LVS集群_第4张图片

1、负载调度器配置

1.1、配置IP地址

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

ip a

LVS集群_第5张图片

            配置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

LVS集群_第6张图片

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

LVS集群_第7张图片

虚拟机之间互ping网络测试

LVS集群_第8张图片

LVS集群_第9张图片

ping主机

LVS集群_第10张图片

1.2、安装ipvsadm

yum install -y ipvsadm

LVS集群_第11张图片

解析:

       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

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

LVS集群_第12张图片

 创建这个缺失的文件

touch /etc/sysconfig/ipvsadm

LVS集群_第13张图片

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

LVS集群_第14张图片

cat /etc/sysconfig/ipvsadm

LVS集群_第15张图片

2、web节点配置

2.1、安装nginx

yum install -y nginx

LVS集群_第16张图片

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

LVS集群_第17张图片

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

 LVS集群_第18张图片

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

LVS集群_第19张图片

(三)实现DR模型搭建

实验拓补图

LVS集群_第20张图片

实验要求

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

 虚拟机1:

ens33:192.168.11.101

LVS集群_第21张图片

ens33:0:192.168.11.200

注:网卡信息在下方

虚拟机2:

192.168.11.102

LVS集群_第22张图片

 虚拟机3:

192.168.11.103

LVS集群_第23张图片

ping虚拟机之间网络 

LVS集群_第24张图片

 ping主机 

 LVS集群_第25张图片

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

LVS集群_第26张图片  

sysctl -p

 LVS集群_第27张图片

1.2、配置虚拟IP地址

cd /etc/sysconfig/network-scripts/
cp ifcfg-ens33 ifcfg-ens33:1
vim ifcfg-ens33:1

LVS集群_第28张图片

重启网络

systemctl restart network

1.3、安装ipvsadm

yum install -y ipvsadm

LVS集群_第29张图片

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

LVS集群_第30张图片

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

LVS集群_第31张图片

sysctl -p

LVS集群_第32张图片

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

LVS集群_第33张图片

2.3、重启网络进行查看

LVS集群_第34张图片

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

LVS集群_第35张图片

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:这个软件查看相对来说条理清晰,比系统自带的好用多了)

LVS集群_第36张图片

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

你可能感兴趣的:(云计算运维学习,lvs,运维,服务器,nginx,linux,负载均衡)