LVS 负载均衡群集

目录

[一、LVS 群集应用基础](#一、LVS 群集应用基础)

1、群集技术概述

(1)群集的类型

(2)负载均衡的分层结构

(3)负载均衡的工作模式

2、LVS虚拟服务器

[(1)LVS 的负载调度算法](#(1)LVS 的负载调度算法)

[(2)使用ipvsadm 管理工具](#(2)使用ipvsadm 管理工具)

1.创建虚拟服务器

2.添加服务器节点

3.查看群集节点状态

4.删除服务器节点

5.保存负载分配策略

[3、NFS 共享存储服务](#3、NFS 共享存储服务)

[(1)使用NFS 发布共享资源](#(1)使用NFS 发布共享资源)

[1.安装nfs-utils、rpcbind 软件包](#1.安装nfs-utils、rpcbind 软件包)

2.设置共享目录

3.启动NFS服务程序

[4.查看本机发布的NFS 共享目录](#4.查看本机发布的NFS 共享目录)

[(2)在客户机中访问NFS 共享资源](#(2)在客户机中访问NFS 共享资源)

[1.安装rpcbind 软件包,并启动rpcbind 服务](#1.安装rpcbind 软件包,并启动rpcbind 服务)

[2.手动挂载NFS 共享目录](#2.手动挂载NFS 共享目录)

二、案例:地址转换模式(LVS-NAT)

1、准备案例环境

2、配置负载调度器

(1)开启路由转发规则

[(2)在lvs 服务新增一块网卡,仅主机模式,作为vip(集群ip,模拟外网ip)使用](#(2)在lvs 服务新增一块网卡,仅主机模式,作为vip(集群ip,模拟外网ip)使用)

(3)配置负载分配策略

3、配置节点服务器(102/103)

(1)安装httpd,创建测试网页

[(2)修改节点服务器的网关,指向lvs 调度器的192.168.10.101(也就是模拟的内网网卡)](#(2)修改节点服务器的网关,指向lvs 调度器的192.168.10.101(也就是模拟的内网网卡))

(3)启动httpd服务程序

4、测试LVS群集


一、LVS 群集应用基础

群集的称呼来自于英文单词"Cluster",表示一群、一串的意思,用在服务器领域则表示大量服务器的集合体,以区分于单个服务器。本文将对群集的结构、工作模式、LVS 虚拟应用,以及 NFS 共享存储介绍及使用。

1、群集技术概述

根据实际企业环境的不同,群集所提供的功能也各不相同,采用的技术细节也可能各有千秋。然而从整体上来看,需要先了解一些关于群集的共性特征,才能在构建和维护群集的工作中做到心中有数,避免操作上的盲目性。

(1)群集的类型

无论是哪种群集,都至少包括两台节点服务器,而对外表现为一个整体,只提供一个访问入口。根据群集所针对的目标差异,可分为以下三种类型。

  • 负载均衡群集(Load Balance Cluster):以提高应用系统的响应能力、尽可能处理更多的访问请求、减少延迟为目标,获得高并发、高负载的整体性能。例如,"DNS 轮询""应用层交换""反向代理"等都可用作负载均衡群集。LB的负载分配依赖于主节点的分流算法,将来自客户机的访问请求分担给多个服务器节点,从而缓解整个系统的负载压力。
  • 高可用群集(High Availability Cluster):以提高应用系统的可靠性、尽可能地减少中断时间为目标,确保服务的连续性,达到高可用(HA)的容错效果。例如,"故障切换""双机热备""多机热备"等都属于高可用群集技术。HA 的工作方式包括双工和主从两种模式。双工即所有节点同时在线;主从则只有主节点在线,但当出现故障时从节点能自动切换为主节点。
  • 高性能运算群集(High Performance Computer Cluster):以提高应用系统的 CPU 运算速度、扩展硬件资源和分析能力为目标,获得相当于大型、超级计算机的高性能运算(HPC)能力。例如,"云计算""网格计算"也可视为高性能运算的一种。高性能运算群集的高性能依赖于"分布式运算""并行计算"通过专用硬件和软件将多个服务器的 CPU、内存等资源整合在一起,实现只有大型、超级计算机才具备的计算能力。

不同类型的群集在必要时可以合并,如高可用的负载均衡群集。

(2)负载均衡的分层结构

在典型的负载均衡群集中,包括三个层次的组件。前端至少有一个负载调度器(Load Balancer,或称为 Director)负责响应并分发来自客户机的访问请求;后端由大量真实服务器(Real Server)构成服务器池(ServerPoo1),提供实际的应用服务,整个群集的伸缩性通过增加、删除服务器节点来完成,而这些过程对客户机是透明的;为了保持服务的一致性,所有节点使用共享存储设备。

  • 第一层,负载调度器:这是访问整个群集系统的唯一入口,对外使用所有服务器共有的 VIP(Virtual IP,虚拟 IP)地址,也称为群集 IP 地址。通常会配置主、备两台调度器实现热备份,当主调度器失效以后能够平滑替换至备用调度器,确保高可用性。
  • 第二层,服务器池:群集所提供的应用服务(如HTTP、FTP)由服务器池承担,其中每个节点具有独立的RIP(RealIP,真实 IP)地址,只处理调度器分发过来的客户机请求。当某个节点暂时失效时,负载调度器的容错机制会将其隔离,等待错误排除以后再重新纳入服务器池。
  • 第三层,共享存储:为服务器池中的所有节点提供稳定、一致的文件存取服务,确保整个群集的统一性。在Linux/UNIX环境中,共享存储可以使用 NAS 设备,或者提供NFS(NetworkFileSystem,网络文件系统)共享服务的专用服务器。

(3)负载均衡的工作模式

关于群集的负载调度技术,可以基于 IP、端口、内容等进行分发,其中基于IP的负载调度是效率最高的。基于IP的负载均衡模式中,常见的有地址转换、IP 隧道和直接路由三种工作模式。

  • 地址转换(Network Address Translation):简称 NAT 模式,类似于防火墙的私有网络结构,负载调度器作为所有服务器节点的网关,即作为客户机的访问入口,也是各节点回应客户机的访问出口。服务器节点使用私有IP地址,与负载调度器位于同一个物理网络,安全性要优于其他两种方式。
  • IP 隧道(IP Tunnel):简称 TUN 模式,采用开放式的网络结构,负载调度器仅作为客户机的访问入口,各节点通过各白的 Internet 连接直接回应客户机,而不再经过负载调度器。服务器节点分散在互联网中的不同位置,具有独立的公网 IP 地址,通过专用 IP 隧道与负载调度器相互通信。
  • 直接路由(Direct Routing):简称 DR模式,采用半开放式的网络结构,与 TUN 模式的结构类似,但各节点并不是分散在各地,而是与调度器位于同一个物理网络。负载调度器与各节点服务器通过本地网络连接,不需要建立专用的IP 隧道。

以上三种工作模式中,NAT 方式只需要一个公网 IP 地址,从而成为最易用的一种负载均衡模式,安全性也比较好,许多硬件负载均衡设备就采用这种方式。相比较而言,DR 模式和 TUN 模式的负载能力更加强大,适用范围更广,但节点的安全性要稍差一些。

2、LVS虚拟服务器

(1)LVS 的负载调度算法

  • 轮询(Round Robin):将收到的访问请求按照顺序轮流分配给群集中的各节点,均等地对待每台服务器,而不管服务器实际的连接数和系统负载。
  • 加权轮询(Weighted Round Robin):根据调度器设置的权重值来分发请求,权重值高的节点优先获得任务并且分配的请求越多,这样可以保证性能高的节点承担更多请求。
  • 最少连接(Least Connections):根据真实服务器已建立的连接数进行分配,将收到的访问请求优先分配给连接数最少的节点。如果所有的服务器节点性能相近,采用这种方式可以更好地均衡负载。
  • 加权最少连接(Weighted Least Connections):在服务器节点的性能差异较大的情况下,调度器可以根据节点服务器负载自动调整权重,权重较高的节点将承担更大比例的活动连接负载。

(2)使用ipvsadm 管理工具

ipvsadm 是在负载调度器上使用的 LVS 群集管理工具,通过调用 ip_vs 模块来添加、删除服务器节点 ,以及查看群集的运行状态。在 OpenEuler 系统中,需要手动安装 ipvsadm 软件包。

复制代码
[root@bogon ~]# dnf -y install ipvsadm

[root@bogon ~]# ipvsadm -v
ipvsadm v1.31 2019/12/24 (compiled with popt and IPVS v1.2.1)

LVS 群集的管理工作主要包括创建虚拟服务器、添加服务器节点、查看群集节点状态、删除服务器节点和保存负载分配策略。下面分别展示使用 ipvsadm 命令的操作方法。

1.创建虚拟服务器

若群集的 VIP 地址为 172.16.16.172,针对 TCP 80 端口提供负载分流服务,使用的调度算法为轮询,则对应的ipvsadm 命令操作如下所示。对于负载均衡调度器来说,VIP 必须是本机实际已启用的IP地址。

复制代码
[root@bogon ~]# ipvsadm -A -t 172.16.16.172:80 -s rr

上述操作中,选项-A 表示添加虚拟服务器,-t 用来指定 VIP 地址及 TCP 端口,-s用来指定负载调度算法------轮询(rr)、加权轮询(wrr)、最少连接(lc)、加权最少连接(wlc)。

2.添加服务器节点

为虚拟服务器 172.16.16.172添加四个服务器节点,IP 地址依次为192.168.7.21~24,对应的ipvsadm 命令操作如下所示。若希望使用保持连接,还应添加"-p 60"选项,其中60 为保持时间(单位为 s)。

复制代码
ipvsadm -a -t 172.16.16.172:80 -r 192.168.7.21:80 -m -w 1
ipvsadm -a -t 172.16.16.172:80 -r 192.168.7.22:80 -m -w 1
ipvsadm -a -t 172.16.16.172:80 -r 192.168.7.23:80 -m -w 1
ipvsadm -a -t 172.16.16.172:80 -r 192.168.7.24:80 -m- w 1
  • -a 表示添加真实服务器;
  • -t 用来指定 VIP 地址及 TCP 端口。
  • -r 用来指定 RIP 地址及 TCP 端口。
  • -m 表示使用 NAT 群集模式(-g DR 模式和-i TUN 模式)。
  • -w 用来设置权重(权重为0时表示暂停节点)。
3.查看群集节点状态

结合选项-l 可以列表查看LVS虚拟服务器,可以指定只查看某一个 VIP 地址(默认为查看所有),结合选项-n将以数字形式显示地址、端口等信息

复制代码
ipvsadm -ln
    #查看节点状态

IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  172.16.16.172:80 wrr
  -> 192.168.7.21:80            Masq    1      0          0         
  -> 192.168.7.22:80            Masq    1      0          0    
  -> 192.168.7.23:80            Masq    1      0          0 
  -> 192.168.7.24:80            Masq    1      0          0 

上述输出结果中,Forward 列下的 Masq 对应 Masquerade(地址伪装),表示采用的群集模式为 NAT。如果是 Route,则表示采用的群集模式为 DR。

4.删除服务器节点

需要从服务器池中删除某一个节点时,使用选项-d。执行删除操作必须指定目标对象,包括节点地址、虚拟IP地址。例如,以下操作将会删除LVS 群集172.16.16.172 中的节点 192.168.7.24。

复制代码
ipvsadm -d -r 192.168.7.24:80 -t 172.16.16.172:80

需要删除整个虚拟服务器时,使用选项-D并指定虚拟IP地址即可,无须指定节点。例如,若执行"ipvsadm -D -t 172.16.16.172:80",则删除此虚拟服务器。

5.保存负载分配策略

使用导出/导入工具 ipvsadm-save/ipvsadm-restore 可以保存、恢复 LVS 策略。当然也可以快速清除、重建负载分配策略。

复制代码
ipvsadm-save >/etc/sysconfig/ipvsadm    #保存策略
cat /etc/sysconfig/ipvsadm    #确认保存结果
-A -t 172.16.16.172:http -s rr
-a -t 172.16.16.172:http -r 192.168.7.21:http -m -w 1
-a -t 172.16.16.172:http -r 192.168.7.22:http -m -w 1
-a -t 172.16.16.172:http -r 192.168.7.23:http -m -w 1


systemctl stop ipvsadm    #停止服务(清除策略)
systemctl start ipvsadm    #启动服务(重建规则)

3、NFS 共享存储服务

NFS 是一种基于 TCP/IP 传输的网络文件系统协议,最初由Sun 公司开发。通过使用 NFS协议,客户机可以像访问本地目录一样访问远程服务器中的共享资源。对于大多数负载均衡群集来说,使用NFS协议来共享数据存储是比较常见的做法,NFS也是NAS存储设备必然支持的一种协议。

下面将学习 NFS 共享服务的基本配置和访问方法。

(1)使用NFS 发布共享资源

NFS 服务的实现依赖于 RPC(Remote Process Call,远端过程调用)机制以完成远程到本地的映射过程。在 0penEuler 系统中,需要安装 nfs-utils、rpcbind 软件包来提供NFS共享服务,前者用于NFS共享发布和访问,后者用于 RPC 支持。

1.安装nfs-utils、rpcbind 软件包

提供 RPC 支持的服务为 rpcbind,提供 NFS 共享的服务为 nfs,完成安装以后建议调整这两个服务的自启动状态,以便每次开机后自动启用。手动加载NFS 共享服务时,应该先启动rpcbind,再启动nfs。

复制代码
yum -y install nfs-utils rpcbind
systemctl enable nfs-server
systemctl enable rpcbind
2.设置共享目录

NFS 的配置文件为/etc/exports,文件内容默认为空(无任何共享)。在exports 文件中设置共享资源时,记录格式为"目录位置客户机地址(权限选项)"。例如,若要将文件夹/opt/wwwroot 共享给192.168.10.0/24 网段使用,允许读写操作,具体配置如下所示。

复制代码
mkdir -p /opt/wwwroot
vim /etc/exports
/opt/wwwroot 192.168.10.0/24(rw,sync,no_root_squash)

其中客户机地址可以是主机名、IP地址、网段地址,允许使用*、?通配符;权限选项中的 rw 表示允许读写(ro为只读),sync表示同步写入,no_root_squash 表示当客户机以 root 身份访问时赋予本地 root 权限(默认是 root squash,将作为 nfsnobody 用户降权对待)。

当需要将同一个目录共享给不同的客户机,且分配不同的权限时,只要以空格分隔指定多个"客户机(权限选项)"即可。例如,以下操作将/var/ftp/public目录共享给两个客户机,并分别给予只读、读写权限。

复制代码
vim /etc/pxports
/var/ftp/public 192.168.10.101(ro) 192.168.10.102(rw)
3.启动NFS服务程序
复制代码
systemctl start rpcbind
systemctl start nfs
netstat -anpt | grep rpcbind
tcp        0      0 0.0.0.0:111             0.0.0.0:*               LISTEN      2061/rpcbind        
tcp6       0      0 :::111                  :::*                    LISTEN      2061/rpcbind      
4.查看本机发布的NFS 共享目录
复制代码
showmount -e
Export list for bogon:
/opt/wwwroot 192.168.10.0/24

(2)在客户机中访问NFS 共享资源

NFS协议的目标是提供一种网络文件系统,因此对NFS共享的访问也使用mount 命令来进行挂载,对应的文件系统类型为 nfs。既可以手动挂载,也可以加入/etc/fstab 配置文件来实现开机自动挂载。考虑到群集系统中的网络稳定性,NES服务器与客户机之间最好使用专有网络进行连接。

1.安装rpcbind 软件包,并启动rpcbind 服务

若要正常访问 NFS共享资源,客户机中也需要安装rpcbind软件包,并启动rpcbind 系统服务。另外,为了使用 showmount 查询工具,建议将 nfs-utils 软件包也一并装上。

复制代码
dnf -y install rpcbind nfs-utils
systemctl enable rpcbind
systemctl start rpcbind

如果已经安装了 nfs-utils 软件包,则客户机也可以使用 showmount 查看NFS 服务器端共享了哪些目录,查询格式为"showmount -e 服务器地址"。

复制代码
showmount -e 1922.168.10.104
2.手动挂载NFS 共享目录

以 root 用户身份执行 mount 操作,将 NFS 服务器共享的/opt/wwwroot目录挂载到本地目录/var/www/html。

复制代码
mount 192.168.10.104:/opt/wwwroot /var/www/html/

tail -l /etc/mtab     #确认挂载结果
192.168.10.104:/opt/wwwroot /var/www/html nfs4 rw,relatime,vers=4.2,rsize=524288,wsize=524288,namlen=255,hard,proto=tcp,timeo=600,retrans=2,sec=sys,clientaddr=192.168.10.102,local_lock=none,addr=192.168.10.104 0 0

vim /var/www/html/index.html    #在客户机创建测试文件
test1111

完成挂载以后,访问客户机的/var/www/html 文件夹,实际上就相当于访问NFS 服务器中的/opt/wwwroot 文件夹,其中的网络映射过程对于用户程序来说是透明的。例如,上述操作中创建的 index.html 测试文件,会立刻出现在服务器的/opt/wwwroot/目录下。

二、案例:地址转换模式(LVS-NAT)

本文将以构建 LVS 负载均衡群集为例,介绍 LVS-NAT 群集模式的案例。为了便于理解,案例结构针对实际应用有所简化。另外,关于基本网络参数、NFS共享存储的配置方法将不再讲述。

1、准备案例环境

在 NAT模式的群集中,LVS 负载调度器是所有节点访问Internet 的网关服务器,其外网地址 172.16.16.172 同时也作为整个群集的 VIP 地址。LVS 调度器具有两块网卡,分别连接内外网,如图所示。

|-----------|-----------------|----------------|----------------------|
| 主机 | 操作系统 | IP地址 | 应用 |
| lvs(101) | openEuler 24.03 | 192.168.10.101 | ipvsadm |
| web1(102) | openEuler 24.03 | 192.168.10.102 | httpd、nfs、bind-utils |
| web2(103) | openEuler 24.03 | 192.168.10.103 | httpd、nfs、bind-utils |
| nfs(104) | openEuler 24.03 | 192.168.10.104 | nfs、bind-utils |

2、配置负载调度器

(1)开启路由转发规则

复制代码
vim /etc/sysctl.conf

net.ipv4.ip_forward = 1

[root@bogon ~]# sysctl -p

net.ipv4.ip_forward = 1

(2)在lvs 服务新增一块网卡,仅主机模式,作为vip(集群ip,模拟外网ip)使用

复制代码
vim ifcfg-ens224

NAME=ens224
DEVICE=ens224
IPADDR=172.16.16.172
#GATEWAY=192.168.10.254
#DNS1=114.144.114.144
#DNS2=8.8.8.8

nmcli c reload
nmcli c up ens224

(3)配置负载分配策略

复制代码
ipvsadm -C     #清除原有策略

ipvsadm -A -t 172.16.16.172:80 -s wrr
ipvsadm -a -t 172.16.16.172:80 -r 192.168.10.102:80 -m -w 1
ipvsadm -a -t 172.16.16.172:80 -r 192.168.10.103:80 -m -w 2

[root@bogon ~]# ipvsadm --save    #保存策略
-A -t bogon:http -s wrr
-a -t bogon:http -r bogon:http -m -w 1
-a -t bogon:http -r bogon:http -m -w 2
[root@bogon ~]# ipvsadm -ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  172.16.16.172:80 wrr
  -> 192.168.10.102:80            Masq    1      0          0         
  -> 192.168.10.103:80            Masq    2      0          0         

3、配置节点服务器(102/103)

所有的节点服务器均使用相同的配置,包括 httpd 服务端口、网站文档内容。实际上各节点的网站文档可存放在共享存储设备中,从而免去同步的过程。但在案例调试阶段可以为各节点采用不同的网页,以便测试负载均衡效果。

(1)安装httpd,创建测试网页

复制代码
dnf -y install httpd
mount 192.168.10.10.104:/opt/wwwroot /var/www/html

实验时可在不同节点配置不同网页内容测试 LVS,最后在使用 NFS 共享存储统一页面。

复制代码
vim /var/www/html/index.html
benet

注意:节点服务器的网关必须指向LVS调度器

(2)修改节点服务器的网关,指向lvs 调度器的192.168.10.101(也就是模拟的内网网卡)

复制代码
vim /etc/sysconfig/network-scripts/ifcfg-ens160

GATEWAY=192.168.10.101

(3)启动httpd服务程序

复制代码
systemctl start httpd
systemctl enable httpd

4、测试LVS群集

使用宿主机,从Internet 中直接访问 http://172.16.16.172,将能够看到由真实服务器提供的网页内容------如果各节点的网页不同,则不同客户机看到的网页可能也不一样(可以多刷新几次)。

在LVS负载调度器中,通过查看节点状态可以观察当前的负载分配情况,对于轮询算法来说,每个节点所获得的连接负载应大致相当。

复制代码
[root@bogon ~]# ipvsadm -ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  172.16.16.172:80 wrr
  -> 192.168.10.102:80            Masq    1      0          0         
  -> 192.168.10.103:80            Masq    2      0          0       


[root@bogon ~]# ipvsadm -lnc    #可以查看客户端访问详细欣喜及状态,便于排查问题
IPVS connection entries
pro expire state       source             virtual            destination
相关推荐
n***271922 分钟前
SQL Server 中行转列
运维·服务器
q***829137 分钟前
Nginx中$http_host、$host、$proxy_host的区别
运维·nginx·http
Claudedy1 小时前
Linux 网络代理指南:解决下载慢、访问受限的开发痛点
linux·运维·网络·代理·proxy代理
q***14641 小时前
RustDesk搭建公网中继服务器远控内网机器(完整版)
运维·服务器
EasyCVR2 小时前
视频汇聚平台EasyCVR服务器使用WiFi网卡时,为何无法向级联平台发送注册?
运维·服务器
kevin 12 小时前
财报处理自动化,财报OCR识别录入系统将非结构化报表转化为可分析数据
运维·自动化·ocr
King's King2 小时前
智慧医院全场景自动化解决方案及运维服务
运维·自动化
简道云平台2 小时前
如何2小时搭建一套工程项目安全巡检管理系统
运维·安全·项目管理
zhendianluli3 小时前
windows文件通过SSH复制到ubuntu目录下
运维·ubuntu·ssh
dyxal3 小时前
linux系统上 WPS Office新增字体
linux·运维·wps