• LVS负载均衡集群



    一、集群概述

    1、群集的含义

    集群、群集

    • 由多台主机构成,但对外,只表现为一个整体,只提供一个访问入口(域名或IP),相当于一台大型计算机。

    2、问题

    • 互联网应用中,随着站点对硬件性能、响应速度、服务稳定性、数据可靠性等要求越来越高,单台服务器已经无法满足负载均衡及高可用性的要求。

    3、解决方法

    • 使用价格昂贵的小型机、大型机
    • 使用多台相对廉价的普通服务器构建服务集群

    二、集群的分类

    1、根据群集所针对的目标差异,可分为三种类型

    • 负载均衡群集
    • 高可用群集
    • 高性能运算群集

    2、负载均衡群集(Load Balance Cluster)

    • 提高应用系统的响应能力、尽可能处理更多的访问请求、减少延迟为目标,获得高并发、高负载(LB)的整体性能

    • LB的负载分配依赖于主节点的分流算法,将来自客户机的访问请求分担给多个服务器节点,从而缓解整个系统的负载

    3、高可用群集 (High Availability Cluster)

    • 提高应用系统的可靠性、尽可能地减少中断时间为目标,确保服务的连续性,达到高可用(HA) 的容错效果

    • HA的工作方式包括双工和主从两种模式,双工即所有节点同时在线;主从则只有主节点在线,但当出现故障时从节点能自动切换为主节点。
      例如:“故障切换”、“双机热备” 等

    4、高性能运算群集 (High Performance Computer Cluster)

    • 以提高应用系统的CPU运算速度、扩展硬件资源和分析能力为目标,获得相当于大型、超级计算机的高性能运算(HPC)能力

    • 高性能依赖于"分布式运算”、“并行计算” , 通过专用硬件和软件将多个服务器的CPU、内存等资源整合在一起,实现只有大型、超级计算机才具备的计算能力

    三、负载均衡群集架构

    负载均衡的结构:

    • 第一层,负载调度器(Load Balancer或Director)

    访问整个群集系统的唯一入口, 对外使用所有服务器共有的VIP地址,也称为群集IP地址。通常会配置主、备两台调度器实现热备份,当主调度器失效以后能够平滑替换至备用调度器,确保高可用性。

    • ​​第二层,服务器池(Server Pool)

    群集所提供的应用服务、由服务器池承担,其中每个节点具有独立的RIP地址(真实IP),只处理调度器分发过来的客户机请求。当某个节点暂时失效时,负载调度器的容错机制会将其隔离,等待错误排除以后再重新纳入服务器池。

    • 第三层,共享存储(Share Storage)

    为服务器池中的所有节点提供稳定、一致的文件存取服务, 确保整个群集的统一性共享存储可以使用NAS设备,或者提供NFS共享服务的专用服务器。

    四、三种负载调度工作模式

    1、NAT模式

    • Network Address Translation,简称NAT模式
    • 类似于防火墙的私有网络结构,负载调度器作为所有服务器节点的网关,即作为客户机的访问入口,也是各节点回应客户机的访问出口
    • 服务器节点使用私有IP地址,与负载调度器位于同一个物理网络,安全性要优于其他两种方式

    2、TUN模式

    • IP Tunnel,简称TUN模式
    • 采用开放式的网络结构,负载调度器仅作为客户机的访问入口,各节点通过各自的Internet连接直接回应客户机,而不再经过负载调度器
    • 服务器节点分散在互联网中的不同位置,具有独立的公网IP地址,通过专用IP隧道与负载调度器相互通信

    3、DR模式

    • Direct Routing,简称DR模式
    • 采用半开放式的网络结构,与TUN模式的结构类似,但各节点并不是分散在各地,而是与调度器位于同一个物理网络
    • 负载调度器与各节点服务器通过本地网络连接,不需要建立专用的IP隧道

    五、LVS的负载调度算法

    1、轮询(Round Robin)

    • 将收到的访问请求按照顺序轮流分配给群集中的各节点(真实服务器) ,均等地对待每一台服务器 ,而不管服务器实际的连接数和系统负载

    2、加权轮询 (Weighted Round Robin)

    • 根据调度器设置的权重值来分发请求,权重值高的节点优先获得任务,分配的请求数越多
    • 保证性能强的服务器承担更多的访问流量

    3、最少连接 (Least Connections )

    • 根据真实服务器已建立的连接数进行分配,将收到的访问请求优先分配给连接数最少的节点

    4、加权最少连接(Weighted L east Connections )

    • 在服务器节点的性能差异较大时,可以为真实服务器自动调整权重
    • 性能较高的节点将承担更大比例的活动连接负载

    六、LVS虚拟服务器

    1、Linux Virtual Server

    • 针对Linux内核开发的负载均衡解决方案
    • 1998年5月,由我国的章文嵩博士创建
    • 官方网站: http://www.linuxvirtualserver.org
    • LVS 实际上相当于基于IP地址的虚拟化应用, 为基于IP地址和内容请求分发的负载均衡提出了一种高效的解决方法

    使用 LVS 可以达到的技术目标是:通过 LVS 达到的负载均衡技术和 Linux 操作系统实现一个高性能高可用的 Linux 服务器集群,具有良好的可靠性、可扩展性和可操作性。从而以低廉的成本实现最优的性能。LVS 是一个实现负载均衡集群的开源软件项目,LVS 架构从逻辑上可分为调度层、Server 集群层和共享存储层。

    2、LVS 的组成及作用

    • ipvs(ip virtual server):LVS 是基于内核态的 netfilter 框架实现的 IPVS功能,工作在内核态。用户配置 VIP 等相关信息并传递到 IPVS 就需要用到 ipvsadm 工具。
    • ipvsadm:ipvsadm 是 LVS 用户态的配套工具,可以实现 VIP 和 RS 的增删改查功能,是基于 netlink 或 raw socket 方式与内核 LVS 进行通信的,如果 LVS 类比于 netfilter,那 ipvsadm 就是类似iptables 工具的地位。

    ** 作用:**

    • 主要用于多服务器的负载均衡;
    • 工作在网络层,可实现高性能,高可用的服务器集群技术;
    • 廉价,可把许多低性能的服务器组合在一起形成一个超级服务器;
    • 易用,配置简单,有多种负载均衡的方法;
    • 稳定可靠,即使在集群的服务器中某台服务器无法正常工作,也不影响整体效果;
    • 可扩展性好;

    3、LVS 与 Nginx 功能对比

    • LVS 比 Nginx 具有更强的抗负载能力,性能高,对内存和 CPU 资源消耗较低;
    • LVS 工作在网络层,具体流量由操作系统内核进行处理,Nginx 工作在应用层,可针对 HTTP 应用实施一些分流策略;
    • LVS 安装配置较复杂,网络依赖性大,稳定性高。Nginx 安装配置较简单,网络依赖性小;
    • LVS 不支持正则匹配处理,无法实现动静分离效果。Nginx 可实现这方面的功能;
    • LVS 适用的协议范围广。Nginx 仅支持 HTTP、HTTPS、Email 协议,适用范围小;

    4、软件负载均衡的种类

    • Nginx :支持 4 层 / 7 层负载均衡,支持 HTTP、E-mail 协议;
    • LVS :纯 4 层负载均衡,运行在内核态,性能是软件负载均衡中最高的;
    • HAproxy :是 7 层负载均衡软件,支持 7 层规则的设置,性能也不错;
      优点:
    • 简单、灵活、便宜(直接在 Linux 操作系统上安装上述所使用的软件负载均衡,部署及维护较简单,
    • 4 层 和 7 层负载均衡可根据业务进行选择也可根据业务特点,比较方便进行扩展及定制功能);

    LVSipvsadm工具

    选项	功能
    -A	添加虚拟服务器
    -D	删除整个虚拟服务器
    -s	指定负载调度算法(轮询:rr、加权轮询:wrr、最少连接:lc、加权最少连接:wlc)
    -a	表示添加真实服务器(节点服务器)
    -d	删除某一个节点
    -t	指定 VIP地址及 TCP端口
    -r	指定 RIP地址及 TCP端口
    -m	表示使用 NAT群集模式
    -g	表示使用 DR模式
    -i	表示使用 TUN模式
    -w	设置权重(权重为 0 时表示暂停节点)
    -p 60	表示保持长连接60秒
    -l	列表查看 LVS 虚拟服务器(默认为查看所有)
    -n	以数字形式显示地址、端口等信息,常与“-l”选项组合使用。ipvsadm -lnjiu
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    实验

    1.LVS-NAT负载均衡群集部署

    在这里插入图片描述

    1.环境

    LVS调度器作为Web服务器池的网关,LVS两块网卡,分别连接内外网,使用rr轮询调度算法

    2.准备

    LVS负载调度器:ens33:192.168.28.10 ens36:192.168.100.100
    web节点服务器1:192.168.28.100
    web节点服务器2:192.168.28.200

    3.配置节点服务器

    两台服务器的网关均指向LVS的网卡192.168.28.10

    在这里插入图片描述
    在这里插入图片描述

    重启网关后启动httpd
    systemctl restart network  ##修改前提前下好httpd
    [root@httpd1 network-scripts]# systemctl start httpd
    [root@httpd2 network-scripts]# systemctl start httpd
    
    
    • 1
    • 2
    • 3
    • 4
    编写httpd配置文件
    [root@httpd1 html]# cd /var/www/html/
    [root@httpd1 html]# ls
    [root@httpd1 html]# vim index.html
    [root@httpd1 html]# cat index.html 
    this is httpd1
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    在这里插入图片描述

    [root@httpd2 network-scripts]# cd /var/www/html/
    [root@httpd2 html]# ls
    [root@httpd2 html]# vim index.html
    [root@httpd2 html]# cat index.html 
    this is httpd2
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    在这里插入图片描述

    4.配置负载调度器LVS

    4.1 配置LVS的IP

    在这里插入图片描述

    4.2配置SNAT转发规则
    [root@lvs network-scripts]# vim /etc/sysctl.conf 
    [root@lvs network-scripts]# sysctl -p  ##使内核文件立即生效
    net.ipv4.ip_forward = 1[root@lvs network-scripts]# echo '1' > /proc/sys/net/ipv4/ip_forward #开启路由转发功能
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    在这里插入图片描述

    [root@lvs network-scripts]# iptables -t nat -F  ##清空nat表规则
    [root@lvs network-scripts]# iptables -F  ##清空防火墙规则
    [root@lvs network-scripts]# iptables -vnL  ##查看防火墙规则,无规则
    Chain INPUT (policy ACCEPT 91 packets, 5748 bytes)
     pkts bytes target     prot opt in     out     source               destination         
    
    Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
     pkts bytes target     prot opt in     out     source               destination         
    
    Chain OUTPUT (policy ACCEPT 63 packets, 5492 bytes)
     pkts bytes target     prot opt in     out     source               destination         
    [root@lvs network-scripts]# iptables -t nat -A POSTROUTING -s 192.168.28.0/24 -o ens36 -j SNAT --to-source 192.168.100.100  ##追加一条nat表规则,从192.168.28.0网段的过来的IP,将其转换成192.168.100.100
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    在这里插入图片描述

    4.3加载LVS内核模块
    [root@lvs network-scripts]# modprobe ip_vs  #手动加载ip_vs模块
    [root@lvs network-scripts]# cat /proc/net/ip_vs  #查看版本信息
    
    IP Virtual Server version 1.2.1 (size=4096)
    Prot LocalAddress:Port Scheduler Flags
      -> RemoteAddress:Port Forward Weight ActiveConn InActConn
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    4.4 安装ipvsadm管理工具
    [root@lvs network-scripts]# yum install -y ipvsadm
    
    
    • 1
    • 2

    在这里插入图片描述
    准备启动前环境
    启动服务前必须保存负载分配策略,否则会报错

    ipvsadm-save > /etc/sysconfig/ipvsadm
    或
    ipvsadm --save > /etc/sysconfig/ipvsadm
    
    systemctl start ipvsadm.service
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    [root@lvs network-scripts]# ipvsadm-save > /etc/sysconfig/ipvsadm
    [root@lvs network-scripts]# cat /etc/sysconfig/ipvsadm #没有任何东西,仅仅需要这个文件
    [root@lvs network-scripts]# systemctl start ipvsadm
    
    
    • 1
    • 2
    • 3
    • 4
    4.5 配置负载分配策略(NAT模式只要在服务器上配置,节点服务器不需要特殊配置)
    [root@lvs network-scripts]# ipvsadm -C  #清除原有策略
    [root@lvs network-scripts]# ipvsadm -A -t 192.168.100.100:80 -s rr  ##添加虚拟服务器,指定VIP地址和端口,轮询方式
    [root@lvs network-scripts]# ipvsadm -a -t 192.168.100.100:80 -r 192.168.28.100:80 -m -w 1  ##添加后端真实服务器,使用nat群集模式,权重为1
    [root@lvs network-scripts]# ipvsadm -a -t 192.168.100.100:80 -r 192.168.28.200:80 -m -w 1
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    4.6 启动策略,并查看节点状态
    [root@lvs network-scripts]# ipvsadm #启动策略
    IP Virtual Server version 1.2.1 (size=4096)
    Prot LocalAddress:Port Scheduler Flags
      -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
    TCP  yzq:http rr
      -> 192.168.28.100:http          Masq    1      0          0         
      -> 192.168.28.200:http          Masq    1      0          0         
    [root@lvs network-scripts]# 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.100.100:80 rr
      -> 192.168.28.100:80            Masq    1      0          0         
      -> 192.168.28.200:80            Masq    1      0          0         
    [root@lvs network-scripts]# ipvsadm-save > /etc/sysconfig/ipvsadm #保存策略
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    在这里插入图片描述

    4.7 测试

    客户端访问192.168.100.100
    在这里插入图片描述
    在这里插入图片描述

  • 相关阅读:
    【进阶版】机器学习之特征工程介绍及优化方法引入(03)
    快速幂:acwing 875. 快速幂
    Python | 数学计算那点事儿不完全总结 - 计算平均值、几何平均值等等
    【wpf】ListView 和 ItemsControl 的一点区别
    Antdv+Asp.net WebApi开发学生信息管理系统(一)
    8-图文打造LeeCode算法宝典-最小栈与LRU缓存机制算法题解
    webrtc终极版(二)搭建自己的iceserver服务,并用到RTCMultiConnection的demo中
    [Unity]将所有 TGA、TIFF、PSD 和 BMP(可自定义)纹理转换为 PNG,以减小项目大小,而不会在 Unity 中造成任何质量损失
    windows 各种inject/hook学习材料(自用)
    [AGC058D]Yet Another ABC String
  • 原文地址:https://blog.csdn.net/weixin_71429790/article/details/126711278