• Linux虚拟服务器-LVS-集群技术


    一、LVS(Linux virtual server)虚拟服务器概述

    LVS是Linux上一种负载均衡的软件

    集群定义

    集群是一组互联的计算机。集群像一个大型独立的服务器,集群配置用于提高可用性和可伸缩性

    1.1 集群功能分类

    LB(Load Balancing)

    利用负载均衡算法处理计算能力(增加处理能力),有一定高可用能力,但不是高可用集群,是以提高服务的并发处理能力为根本着眼点

    HA(High Availability)

    高可用集群(增加服务可用性)
    高可用集群,是以提升服务的始终在线能力为着眼点,不会因为宕机而导致服务不能用。
    衡量可用性:在线时间/(在线时间+故障处理时间)

    99%:一年有三天不在线 
    99.9%:一年有0.3天不在线 
    99.99%:一年有0.03天不在线 
    99.999%:一年有0.003天不在线 
    
    • 1
    • 2
    • 3
    • 4

    HPC

    HPC:High performance,高性能计算集群,计算海量数据,解决复杂问题
    平时所说的超级计算机就是高性能计算集群,查看每秒钟浮点运算的能力
    运用到的名词:
    向量机:尽可能向上进行扩展,如果CPU过多,在架构上纵然会有问题的
    并行处理集群:包括两部分
    1、分布式文件系统;
    2、将大任务切割为小任务,分别进行处理的机制
    例如hadoop就是并行处理集群

    二、LVS系统结构

    负载均衡器(Load Balancer)、服务器群组(Server Aarry)、共享存储(Shared Storage)

    负载均衡层:

    整个集群服务最前端设备,它有一个或多个调度器(Director Server)组成,LVS软件运行在调度服务器上。

    调度服务器的功能:

    将用户的请求,根据调度算法进行IP分流,将数据包发送到后端应用服务器上(Real Server),如果调度服务器安装了监控模块Ldirectord,那么调度服务器会将出现故障的应用服务器标记为不可用,知道此应用服务器恢复正常。

    服务器群组层:

    这是由一个或者多个应用程序服务器(Real Server)组成,并且每个应用服务器提供相同的服务,调度服务器会将用户的请求定向到具体的应用服务器上,然后由后端的应用服务器响应客户端。

    共享存储层:

    功能只要是保证服务器群组中的应用服务器提供数据的一致性。

    共享存储的实现方式:

    磁盘阵列、集群文件系统(OCFS2)

    LVS是linux系统上的一种机制,类似于iptables,其相关属性也是通过(ipvsadm)与iptables命令类似的方式定义的,

    LVS是工作于linux系统内核空间,通过内核来提供工作,其工作空间在iptables的INPUT链上,当客户端请求到达INPUT链上以后,通过LVS规则的验证,如果是内��请求,发送至用户空间,如果发现是集群,将此请求发送至POSTROUTING链,并交给后端应用程序服务器来响应用户的请求。

    注意:上面所提到LVS其实是工作在iptables的INPUT和postrouting链上的,所以在此系统上iptables和LVS不能同时存在。

    三、LVS的组成

    ipvsadm:用于管理集群服务的命令行工具,工作于Linux系统中的用户空间

    ipvs:为lvs提供服务的内核模块,工作于内核空间 (相对于是框架,通过ipvsadm添加规则,来实现ipvs功能)

    注:在linux内核2.4.23之前的内核中模块默认是不存在的,需要自己手动打补丁,然后把此模块编译进内核才可以使用此功能

    3.1 LVS类型

    3.1.1 LVS-NAT(Network address translation)模式

    在这里插入图片描述
    工作原理

    ①.客户端将请求发往前端的负载均衡器,请求报文源地址是CIP(客户端IP),后面统称为CIP),目标地址为VIP(负载均衡器前端地址,后面统称为VIP)。

    ②.负载均衡器收到报文后,发现请求的是在规则里面存在的地址,那么它将客户端请求报文的目标IP地址改为了后端服务器的RIP地址并将报文根据算法发送出去。

    ③.报文送到Real Server后,由于报文的目标地址是自己,所以会响应该请求,并将响应报文返还给LVS。

    ④.然后lvs将此报文的源地址修改为本机并发送给客户端。

    注意在NAT模式中,Real Server的网关必须指向LVS,否则报文无法送达客户端
    在这里插入图片描述

    3.1.2 DR直接路由模式

    在这里插入图片描述
    工作原理
    ①.客户端将请求发往前端的负载均衡器,请求报文源地址是CIP,目标地址为VIP。

    ②.负载均衡器收到报文后,发现请求的是在规则里面存在的地址,那么它将客户端请求报文的源MAC地址改为自己DIP的MAC地址,目标MAC改为了RIP的MAC地址,并将此包发送给RS。

    ③.RS发现请求报文中的目的MAC是自己,就会将次报文接收下来,处理完请求报文后,将响应报文通过lo接口送给eth0网卡直接发送给客户端。

    特点

    1,集群节点和director必须在一个物理网络内
    2,RIP可以使用公网地址或私有地址
    3,director仅处理入站请求,director服务器的压力比较小
    4,集群节点网关不指向director,故出站不经过director
    5,不支持端口映射
    6,大多数操作系统可以作为realserver,要支持隔离arp广播

    ARP问题

    通常,DR模式需要在Real-server上配置VIP,配置的方式为:
    /sbin/ifconfig lo:0 inet VIP netmask 255.255.255.255

    i) 原因在于,当LVS把client的包转发给Real-server时,因为包的目的IP地址是VIP,那么如果Real-server收到这个包后,发现包的目的IP不是自己的系统IP,那么就会认为这个包不是发给自己的,就会丢弃这个包,所以需要将这个IP地址绑到网卡上;当发送应答包给client时,Real-server就会把包的源和目的地址调换,直接回复给client。

    ii) 关于ARP广播:

    • 上面绑定VIP的掩码是”255.255.255.255″,说明广播地址是其本身,那么他就不会将ARP发送到实际的自己该属于的广播域了,这样防止 与LVS上VIP冲突,而导致IP冲突。

    • 另外在Linux的Real-server上,需要设置ARP的sysctl选项:

    3.1.3 TUN-IP隧道模式

    在这里插入图片描述
    工作原理

    ①.客户端将请求发往前端的负载均衡器,请求报文源地址是CIP,目标地址为VIP。

    ②.负载均衡器收到报文后,发现请求的是在规则里面存在的地址,那么它将在客户端请求报文的首部再封装一层IP报文,将源地址改为DIP,目标地址改为RIP,并将此包发送给RS。

    ③.RS收到请求报文后,会首先拆开第一层封装,然后发现里面还有一层IP首部的目标地址是自己lo接口上的VIP,所以会处理次请求报文,并将响应报文通过lo接口送给eth0网卡直接发送给客户端。

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

    四、LVS负载均衡的八种调度算法

    Fixed Scheduling Method 静态调服方法
    (1) .RR 轮询

    Round-Robin:调度器通过"轮叫"调度算法将外部请求按顺序轮流分配到集群中的真实服务器上,它均等地对待每一台服务器,而不管服务器上实际的连接数和系统负载。

    (2) .WRR 加权轮询

    调度器通过"加权轮叫"调度算法,根据真实服务器的不同处理能力.来调度访问请求。这样可以保证处理能力强的服务器,处理更多的访问流量。调度器可以自动问询真实服务器的负载情况,并动态地调整其权值。

    (3).DH 目标地址hash

    "目标地址散列"调度算法根据请求的目标IP地址,作为散列键(Hash Key)从静态分配的散列表找出对应的服务器,若该服务器是可用的且未超载,将请求发送到该服务器,否则返回空。

    (4).LC 最少连接

    调度器通过"最少连接"调度算法动态地将网络请求调度到已建立的链接数最少的服务器上。如果集群系统的真实服务器具有相近的系统性能,采用"最小连接"调度算法可以较好地均衡负载。

    Dynamic Scheduling Method 动态调服方法

    (5).WLC 加权最少连接

    在集群系统中的服务器性能差异较大的情况下,调度器采用"加权最少链接"调度算法优化负载均衡性能,具有较高权值的服务器将承受较大比例的活动连接负载。调度器可以自动问询真实服务器的负载情况,并动态地调整其权值。

    (6). LBLC 基于本地的最少连接

    “基于局部性的最少链接” 调度算法是针对目标IP地址的负载均衡,目前主要用于Cache集群系统。该算法根据请求的目标IP地址找出该目标IP地址最近使用的服务器,若该服务器 是可用的且没有超载,将请求发送到该服务器;若服务器不存在,或者该服务器超载且有服务器处于一半的工作负载,则用"最少链接"的原则选出一个可用的服务 器,将请求发送到该服务器。

    (7). LBLCR 带复制的基于本地的最少连接

    "带复制的基于局部性最少链接"调度算法也是针对目标IP地址的负载均衡,目前主要用于Cache集群系统。它与LBLC算法的不同之处是它要维护从一个 目标IP地址到一组服务器的映射,而LBLC算法维护从一个目标IP地址到一台服务器的映射。该算法根据请求的目标IP地址找出该目标IP地址对应的服务 器组,按"最小连接"原则从服务器组中选出一台服务器,若服务器没有超载,将请求发送到该服务器,若服务器超载;则按"最小连接"原则从这个集群中选出一 台服务器,将该服务器加入到服务器组中,将请求发送到该服务器。同时,当该服务器组有一段时间没有被修改,将最忙的服务器从服务器组中删除,以降低复制的 程度。

    五、IPVSADM 命令详细介绍

    pvsadm: 管理集群服务的命令行工具,而ipvs系统内核中的一个模块

    ipvsadm命令的基本使用:

    1  -A:在内核的虚拟服务器列表中添加一条VIP记录
    2  -E:修改内核虚拟服务器列表中的一条VIP记录
    3  -D:删除内核虚拟服务器列表中的一条VIP记录
    4  -C:清空内核虚拟服务器列表中的所有VIP记录
    5  -S:保存虚拟服务器规则
    6  -R:恢复虚拟服务器策略规则
    7  -a:在内核虚拟服务器列表中添加一个应用服务器的地址。
    8  -e:修改一个虚拟服务器列表中的一条应用服务器地址记录
    9  -d:删除一个虚拟服务器列表中的一条应用服务器地址记录
    10 -L/-l: 查看内核虚拟服务器列表
    11 -Z:将内核中的虚拟服务器计数清为0
    12 -t service-address:指定虚拟服务器使用TCP服务
    13 -u service-address:指定虚拟服务器使用UDP服务
    14 -s scheduler:指定调度算法:
    15 -p timeout:在应用服务器上的持续服务时间,单位为秒
    16 -r service-address:指定应用服务器的地址
    17 -g:指定LVS工作模式为直接路由(DR-defalut)
    18 -I:指定LVS工作模式为隧道模式(Ip Tunnel)
    19 -m:指定LVS工作模式为地址转换模式(NAT)
    20 -w:设定应用服务器的权值
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20

    常用的负载均衡软件
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    六、LVS-NET与LVS-DR负载均衡实战

    6.1 lvs-net实战操作步骤:部署环境

    4台干净主机,分别作为客户端 LVS WEB1 WEB2;
    关闭防火墙 selinux
    需要给第3 4 台主机提前安装好httpd 并启动
    在这里插入图片描述

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

    6.2 工作原理

    在这里插入图片描述

    6.3 操作步骤

    client: VMENT 0 192.168.8.120
    LVS : 	VMENT 0 192.168.8.121
    		VMENT 2 192.168.98.128
    WEB1:  	VMENT 2 192.168.98.129		提前安装httpd
    WEB2:   VMENT 2 192.168.98.130
    
    • 1
    • 2
    • 3
    • 4
    • 5

    第3 4台主机

    WEB1:
    
    echo   web1 >  /var/www/html/index.html
    
    route add -net 192.168.8.0/24 gw 192.168.98.128			
     
    #VM 0 网段所有主机唯一出口VM 2网卡
    #24  子网掩码的255.255.255.255的十进制
    #配置真实服务器网络出口
    #-net 外部网络
    #gw 网关,网络唯一出口
    
    WEB2:
    
    echo web2 > /var/www/html/index.html
    route add -net 192.168.8.0/24 gw 192.168.98.128			
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    第二台主机

    LVS-NET配置路由功能和负载策略
    
    echo  1  > /proc/sys/net/ipv4/ip_forward    启用路由功能
    yum -y install ipvsadm 安装LVS软件
    
    ipvsadm   -A -t 192.168.8.121  -s   rr
    #-A 添加一个VIP 
    #-t TCP协议
    #-s schedule 调度
    #rr 轮训策略类型
    
    ipvsadm  -a  -t  192.168.8.121:80 -r 192.168.98.129:80   -m
    ipvsadm  -a  -t  192.168.8.121:80 -r 192.168.98.130:80   -m
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    第一台主机

    client测试
    elinks --dump http://192.168.8.121 每ping一次 web1 与 web2 之间循环;这里访问的是LVS  vment 0网段
    
    • 1
    • 2

    6.4 LVS-DR实战操作步骤

    LVS-DR 服务器上
    [root@localhost ~]# ifconfig 
    ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
            inet 192.168.238.142  netmask 255.255.255.0  broadcast 192.168.238.255
       
    [root@localhost ~]# ifconfig ens33:0 192.168.238.141 broadcast 192.168.238.255 netmask 255.255.255.0 up
    # 192.168.238.141 虚拟子网络,随便配但是必须处于同一网段
    
    [root@localhost ~]# ip a
    2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
      
        inet 192.168.238.142/24 brd 192.168.238.255 scope global noprefixroute dynamic ens33
         
        inet 192.168.238.141/24 brd 192.168.238.255 scope global secondary ens33:0
       
           
    [root@localhost ~]# route add -host 192.168.238.141 dev ens33:0  VIP与CIP配置在同一网卡上
    
    [root@localhost ~]# vim /etc/sysctl.conf
    net.ipv4.ip_forward = 1 开启路由功能
    net.ipv4.conf.all.send_redirects = 0 	禁止转发重定向
    net.ipv4.conf.ens33.send_redirects = 0		禁止ens33转发重定向
    net.ipv4.conf.default.send_redirects = 0		禁止默认转发重定向
    
    [root@localhost ~]# yum install ipvsadm -y
    
    [root@localhost ~]# ipvsadm -A -t 192.168.238.141:80 -s rr
    [root@localhost ~]# ipvsadm -A -t 192.168.2^C.141:80 -s r
    [root@localhost ~]# ipvsadm -a -t 192.168.238.141:80 -r 192.168.238.138:80 -g
    [root@localhost ~]# ipvsadm -a -t 192.168.238.141:80 -r 192.168.238.140:80 -g
    [root@localhost ~]# ipvsadm-save > /etc/sysconfig/ipvsadm		LVS保存配置让永久生效
    [root@localhost ~]# systemctl enable ipvsadm
    Created symlink from /etc/systemd/system/multi-user.target.wants/ipvsadm.service to /usr/lib/systemd/system/ipvsadm.service
    
    =======================================================================================================================
    两个WEB上部署服务
    WEB1/Web2: 192.168.238.138
    yum -y install nginx
    
    修改主页
    vim /usr/share/nginx/html/index.html
    
    systemctl start nginx
    systemctl enable nginx
    
    给两个web服务器的lo网卡设置子网掩码为32位vip
    rs1: ifconfig	lo:0 192.168.238.141/32
    rs2: ifconfig	lo:0 192.168.238.141/32
    
    echo >1 /proc/sys/net/ipv4/conf/all/arp_ignore
    echo >2 /proc/sys/net/ipv4/conf/all/arp_announce
    
    
    arp_ignore:定义对目标地址为本地IP的ARP询问不同的应答模式0 
    
    0 - (默认值): 回应任何网络接口上对任何本地IP地址的arp查询请求 
    
    1 - 只回答目标IP地址是来访网络接口本地地址的ARP查询请求 
    
    2 -只回答目标IP地址是来访网络接口本地地址的ARP查询请求,且来访IP必须在该网络接口的子网段内 
    
    3 - 不回应该网络界面的arp请求,而只对设置的唯一和连接地址做出回应 
    
    4-7 - 保留未使用 
    
    8 -不回应所有(本地地址)的arp查询
    
    
    arp_announce:对网络接口上,本地IP地址的发出的,ARP回应,作出相应级别的限制: 确定不同程度的限制,宣布对来自本地源IP地址发出Arp请求的接口 
    
    0 - (默认) 在任意网络接口(eth0,eth1,lo)上的任何本地地址 
    
    1 -尽量避免不在该网络接口子网段的本地地址做出arp回应. 当发起ARP请求的源IP地址是被设置应该经由路由达到此网络接口的时候很有用.此时会检查来访IP是否为所有接口上的子网段内ip之一.如果改来访IP不属于各个网络接口上的子网段内,那么将采用级别2的方式来进行处理. 
    
    2 - 对查询目标使用最适当的本地地址.在此模式下将忽略这个IP数据包的源地址并尝试选择与能与该地址通信的本地地址.首要是选择所有的网络接口的子网中外出访问子网中包含该目标IP地址的本地地址. 如果没有合适的地址被发现,将选择当前的发送网络接口或其他的有可能接受到该ARP回应的网络接口来进行发送.
    
    关于对arp_announce 理解的一点补充
    
    =======================================================================================================================Client:
    elinks --dump http://192.168.238.141  一直回车
    
    =======================================================================================================================
    
    LVS-DR服务器查看
    [root@localhost ~]# ipvsadm -Lnc
    IPVS connection entries
    pro expire state       source             virtual            destination
    TCP 01:54  FIN_WAIT    192.168.238.129:56914 192.168.238.141:80 192.168.238.143:80
    TCP 01:53  FIN_WAIT    192.168.238.129:56906 192.168.238.141:80 192.168.238.143:80
    TCP 01:52  FIN_WAIT    192.168.238.129:56900 192.168.238.141:80 192.168.238.140:80
    TCP 01:54  FIN_WAIT    192.168.238.129:56918 192.168.238.141:80 192.168.238.143:80
    TCP 01:56  FIN_WAIT    192.168.238.129:56932 192.168.238.141:80 192.168.238.140:80
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87
    • 88
    • 89
    • 90
    • 91
    • 92

    LVS命令管理

    ====管理虚拟服务器=====
    添加一个虚拟服务器192.168.1.100:80,使用轮询算法
    ipvsadm -A -t 192.168.1.10:80 -s rr
    修改虚拟服务的算法为加权轮询
    ipvsadm -E -t 192.168.1.100:80 -s wrr
    删除虚拟服务
    ipvsadm -D -t 192.168.1.100:80
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    =========管理真实服务================
    添加一个真实服务器192.168.238.128 使用DR模式,权重2
    ipvsadm -a -t 192.168.1.100:80 -r  192.168.238.128 -g -w 2
    增加真实服务器的权重
    ipvsadm -a -t 192.168.1.100:80 -r 192.168.238.128 -g -w 5
    修改真实服务器的权重
    ipvsadm -e -t 192.168.1.100:80 -r 192.168.238.128 -g -w 2
    删除真实服务器
    ipvsadm -d -t 192.168.1.100:80 -r 192.168.238.128
    
    ===================查看统计===================================
    查看当前配置的虚拟服务器和各个RS的权重
    ipvsadm -Ln
    查看当前ipvs模块中记录的连接(可用于观察转发情况)
    ipvsadm -lnc
    查看ipvs模块的转发情况统计
    ipvsadm -Ln --stats --rate
    IP Virtual Server version 1.2.1 (size=4096)
    Prot LocalAddress:Port               Conns   InPkts  OutPkts  InBytes OutBytes
      -> RemoteAddress:Port
    TCP  192.168.238.139:80                 54      391        0    32019        0  虚拟IP
      -> 192.168.238.140:80                 27      188        0    13807        0	web1
      -> 192.168.238.143:80                 27      203        0    18212        0	web2
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
  • 相关阅读:
    WASI support in Go
    无代码开发数据导入入门教程
    链动2+1系统开发
    系统总结MyBatis源码解析,从入门到源码
    yolov5+车辆重识别【附代码】
    学习SLAM:SLAM进阶(十)暴力更改ROS中的PCL库
    开源日报 0820:Python编程学习的完整指南
    UI设计师岗位的基本职责八篇
    springboot利用mybatis批量写入clickhouse报错及解决方法
    matlab数据处理: cell table array+datetime
  • 原文地址:https://blog.csdn.net/benziwu/article/details/126464367