LVS 负载均衡群集

目录

群集的类型

负载均衡的分层结构​编辑

负载均衡的工作模式

LVS的负载调度算法

案例:

Web服务器配置

调度器配置

IP的配置

ipvsadm工具

创建虚拟服务器

添加服务器节点

查看群集节点状态

删除服务器节点

设置调度器拥有路由转发功能

NFS共享存储服务

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

关闭防火墙及系统内核

设置共享目录

启动服务及查看

web服务器挂载


群集的类型

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

负载均衡的分层结构

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

负载均衡的工作模式

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

LVS的负载调度算法

针对不同的网络服务和配置需要,LVS 调度器提供多种不同的负载调度算法,其中最常用的四种算法是轮询、加权轮询、最少连接和加权最少连接。

  • 轮询调度(Round Robin,RR)
    • 特点:将请求按顺序轮流分配到后端服务器,不考虑服务器的实际负载情况。
    • 适用场景:后端服务器性能相近,负载均衡需求简单的场景。
    • 优点:算法简单,易于实现。
    • 缺点:无法根据服务器的实时负载进行动态调整,可能导致负载不均。
  • 加权轮询调度(Weighted Round Robin,WRR)
    • 特点:为每台服务器分配一个权重,权重高的服务器接收更多的请求。
    • 适用场景:后端服务器性能差异较大,需要根据服务器能力分配流量的场景。
    • 优点:能够更好地反映服务器的处理能力,实现更合理的负载分配。
    • 缺点:权重需要人工配置,动态调整需要额外手段。
  • **最少连接(LeastConnections):**根据真实服务器已建立的连接数进行分》配,将收到的访问请求优先分配给连接数最少的节点。如果所有的服务器节点性能相近,采用这种方式可以更好地均衡负载。
  • **加权最少连接(Weighted Least Connections):**在服务器节点的性能差异较大的情况下,调度器可以根据节点服务器负载自动调整权重,权重较高的节点将承担更大比例的活动连接负载。
  • 源地址哈希(Source Hashing,SH)
    • 特点:根据请求的源IP地址进行哈希计算,将同一源IP的请求分配到同一台后端服务器。
    • 适用场景:需要会话保持或缓存一致性,例如电商购物车、视频播放等场景。
    • 优点:能够保证同一客户端的请求始终分配到同一台服务器,提高缓存命中率。
    • 缺点:可能导致部分服务器负载过高,而其他服务器负载过低。
  • 目标地址哈希(Destination Hashing,DH)
    • 特点:根据请求的目标IP地址进行哈希计算,将同一目标IP的请求分配到同一台后端服务器。
    • 适用场景:需要针对特定目标IP进行负载均衡的场景。
    • 优点:能够保证同一目标IP的请求始终分配到同一台服务器,适用于缓存或数据库负载均衡。
    • 缺点:与源地址哈希类似,可能导致负载不均。

案例:

一台ipvsadm调度器、两台Web服务器、一台NFS共享存储服务、一台Win10

实验环境:调度器连接外网和内网(不需要网关) 两台Web网关指向内网网关

Web服务器配置

首先两台web服务器修改网关

复制代码
[root@localhost ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens33 
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static
IPADDR=192.168.10.102
NETMASK=255.255.255.0
GATEWAY=192.168.10.101            #都指向101内网的网关
DNS1=114.114.114.114
DNS2=8.8.8.8
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=eui64
NAME=ens33
DEVICE=ens33
ONBOOT=yes     

[root@localhost ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens33 
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static
IPADDR=192.168.10.103
NETMASK=255.255.255.0
GATEWAY=192.168.10.101                #同上
DNS1=114.114.114.114
DNS2=8.8.8.8
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=eui64
NAME=ens33
DEVICE=ens33
ONBOOT=yes

两台web服务器下载httpd

复制代码
[root@localhost ~]# dnf -y install httpd

编写网页代码

复制代码
[root@localhost ~]# vim /var/www/html/index.html
222222222222222  #内容随便写 能区分是两个网站就管

[root@localhost ~]# vim /var/www/html/index.html
3333333333333333333    

关闭防火墙以及系统内核

复制代码
[root@localhost ~]# systemctl stop firewalld
[root@localhost ~]# setenforce 0

以上就是网站部分的配置

调度器配置

添加网卡,可以使用ip a查看网卡信息

复制代码
[root@localhost ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host noprefixroute 
       valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 00:0c:29:14:79:90 brd ff:ff:ff:ff:ff:ff
    inet 192.168.10.101/24 brd 192.168.10.255 scope global noprefixroute ens33
       valid_lft forever preferred_lft forever
    inet6 fe80::20c:29ff:fe14:7990/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever
3: ens37: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 00:0c:29:14:79:9a brd ff:ff:ff:ff:ff:ff

IP的配置

复制代码
[root@localhost ~]# cd /etc/sysconfig/network-scripts/    
[root@localhost network-scripts]# cp ifcfg-ens33 ifcfg-ens37            #将配置文件复制出来一份

ens33的配置

复制代码
[root@localhost ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens33
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static
IPADDR=192.168.10.101
NETMASK=255.255.255.0
#GATEWAY=192.168.10.254            #网关注释掉
DNS1=114.114.114.114
DNS2=8.8.8.8
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=eui64
NAME=ens33
DEVICE=ens33
ONBOOT=yes

ens37的配置

复制代码
[root@localhost ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens37
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static
IPADDR=192.168.20.101        #ip
NETMASK=255.255.255.0
#GATEWAY=192.168.10.254        #注释掉
DNS1=114.114.114.114
DNS2=8.8.8.8
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=eui64
NAME=ens37                #id这里要改为自己
DEVICE=ens37              #同上
ONBOOT=yes

ipvsadm工具

复制代码
[root@localhost ~]# dnf -y install ipvsadm            #下载

[root@localhost ~]# ipvsadm -v        #查看版本

创建虚拟服务器

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

添加服务器节点

复制代码
[root@localhost ~]# ipvsadm -a -t 192.168.20.101:80 -r 192.168.10.102:80 -m -w 1
[root@localhost ~]# ipvsadm -a -t 192.168.20.101:80 -r 192.168.10.103:80 -m -w 2
  • -a表示添加真实服务器:
  • -t 用来指定 VIP 地址及 TCP 端口:
  • -r用来指定 RIP 地址及 TCP 端口;
  • -m表示使用 NAT 群集模式(-g DR 模式和-ī TUN 模式);
  • -w 用来设置权重(权重为0时表示暂停节点)。

查看群集节点状态

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

删除服务器节点

复制代码
[root@localhost ~]# ipvsadm -d -r 192.168.10.102:80 -t 192.168.20.101:80

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

设置调度器拥有路由转发功能

复制代码
[root@localhost ~]# vim /etc/sysctl.conf
kernel.sysrq = 0
net.ipv4.ip_forward = 1                    #将这个改成1
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.all.accept_source_route = 0
net.ipv4.conf.default.accept_source_route = 0
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.default.accept_redirects = 0
net.ipv4.conf.all.secure_redirects = 0
net.ipv4.conf.default.secure_redirects = 0
net.ipv4.icmp_echo_ignore_broadcasts = 1
net.ipv4.icmp_ignore_bogus_error_responses = 1
net.ipv4.conf.all.rp_filter = 1
net.ipv4.conf.default.rp_filter = 1
net.ipv4.tcp_syncookies = 1
kernel.dmesg_restrict = 1
net.ipv6.conf.all.accept_redirects = 0
net.ipv6.conf.default.accept_redirects = 0

[root@localhost ~]# sysctl -p        #重载sysctl.conf

NFS共享存储服务

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

安装 nfs-utils、rpcbind软件包

复制代码
[root@localhost ~]# dnf -y install nfs-utils rpcbind

关闭防火墙及系统内核

复制代码
[root@localhost ~]# systemctl stop firewalld
[root@localhost ~]# setenforce 0

设置共享目录

复制代码
[root@localhost ~]# mkdir /opt/wwwroot

[root@localhost ~]# 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目录共享给两个客户机,并分别给予只读、读写权限。

启动服务及查看

复制代码
[root@localhost ~]# systemctl start nfs
[root@localhost ~]# systemctl start rpcbind
[root@localhost ~]# netstat -anpt |grep rpc
tcp        0      0 0.0.0.0:56305           0.0.0.0:*               LISTEN      2068/rpc.statd      
tcp        0      0 0.0.0.0:111             0.0.0.0:*               LISTEN      2072/rpcbind        
tcp        0      0 0.0.0.0:20048           0.0.0.0:*               LISTEN      2082/rpc.mountd     
tcp6       0      0 :::56071                :::*                    LISTEN      2068/rpc.statd      
tcp6       0      0 :::111                  :::*                    LISTEN      2072/rpcbind        
tcp6       0      0 :::20048                :::*                    LISTEN      2082/rpc.mountd     

web服务器挂载

复制代码
[root@localhost ~]# mount 192.168.10.104:/opt/wwwroot /var/www/html
mount: (hint) your fstab has been modified, but systemd still uses
       the old version; use 'systemctl daemon-reload' to reload.
相关推荐
WIN赢25 分钟前
【UI自动化相关】
运维·自动化
notion20252 小时前
Optuna 黑科技自动化超参数优化框架详解
运维·科技·其他·自动化
CS Beginner5 小时前
【Linux】Tomcat基本配置
linux·运维·tomcat
..Move...5 小时前
快速搭建Docker私有仓库指南
运维·docker·容器
小小的木头人7 小时前
Windows Docker desktop 部署
运维·kafka
wanhengidc7 小时前
云手机和虚拟机的区别都有哪些?
运维·服务器·安全·智能手机·玩游戏
码农周8 小时前
从零搭建vsftpd服务器:避坑指南+实战解决方案
运维·服务器
<但凡.10 小时前
Linux修炼:库制作与原理(一)
linux·运维·服务器
Maple_land11 小时前
编译器的“隐形约定”与本地变量:解锁Linux变量体系的关键密码
linux·运维·服务器·c++·centos
小蜜蜂爱编程12 小时前
Ubuntu无法开机Failed to activate swap /swapfile
linux·运维·ubuntu