• LVS集群(Linux Virtual server)介绍----及LVS的NAT模式部署


    群集的含义


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

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

    一、 集群和分布式

    系统性能扩展方式:

    • Scale UP:垂直扩展,向上扩展,增强,性能更强的计算机运行同样的服务,升级单机的硬件设备

    • Scale Out:水平扩展,向外扩展,增加设备,并行地运行多个服务调度分配问题,Cluster

    垂直扩展不再提及:

    随着计算机性能的增长,其价格会成倍增长

    单台计算机的性能是有上限的,不可能无限制地垂直扩展,多核CPU意味着即使是单台计算机也可以并行的。那么,为什么不一开始就并行化技术?

    1.1 集群 Cluster

    Cluster:集群,为解决某个特定问题将多台计算机组合起来形成的单个系统,就需要用到反向代理

    Cluster分为三种类型:

    • LB: Load Balancing,负载均衡,多个主机组成,每个主机只承担一部分访问请求

    • HA: High Availiablity,高可用(就是有备胎技术),避免 SPOF(single Point Of failure)

    • HPC: High-performance computing,高性能

    HA:高可用(就是有备胎技术),避免 SPOF(single Point Of failure),即避免单点故障

    1. MTBF:Mean Time Between Failure 平均无故障时间,正常时间
    2. MTTR:Mean Time To Restoration( repair)平均恢复前时间,故障时间
    3. A = MTBF /(MTBF+MTTR) (0,1):99%,99.5%,99.9%,99.99%,99.999%
    4. SLA:服务等级协议(简称:SLA,全称:service level agreement)。是在一定开销下为保障服
    5. 务的性能和可用性,服务提供商与用户间定义的一种双方认可的协定。通常这个开销是驱动提供服
    6. 务质量的主要因素。在常规的领域中,总是设定所谓的三个9,四个9来进行表示,当没有达到这
    7. 种水平的时候,就会有一些列的惩罚措施,而运维,最主要的目标就是达成这种服务水平。
    8. 1= 365= 8760小时
    9. 90 = (1-90%)*365=36.5
    10. 99 = 8760 * 1% = 87.6小时
    11. 99.9 = 8760 * 0.1% = 8760 * 0.001 = 8.76小时
    12. 99.99 = 8760 * 0.0001 = 0.876小时 = 0.876 * 60 = 52.6分钟
    13. 99.999 = 8760 * 0.00001 = 0.0876小时 = 0.0876 * 60 = 5.26分钟
    14. 99.9999= (1-99.9999%)*365*24*60*60=31
    15. #停机时间又分为两种,一种是计划内停机时间,一种是计划外停机时间,而运维则主要关注计划外停机时间。
    16. #轮询(Round Robin):将收到的访问请求按照顺序轮流分配给群集中的各节点,均 等地对待每台服务器,而不管服务器实际的连接数和系统负载。
    17. #加权轮询(Weighted Round Robin):根据调度器设置的权重值来分发请求,权重 值高的节点优先获得任务并且分配的请求越多,这样可以保证性能高的节点承担更 多请求。
    18. #最少连接(Least Connections):根据真实服务器已建立的连接数进行分配,将收 到的访问请求优先分配给连接数最少的节点。如果所有的服务器节点性能相近,采用这种方式可以更好地均衡负载。
    19. #加权最少连接(Weighted Least Connections):在服务器节点的性能差异较大的 情况下,调度器可以根据节点服务器负载自动调整权重,权重较高的节点将承担更 大比例的活动连接负载。
    20. #IP_Hash根据请求来源的IP地址进行Hash计算,得到后端服务器,这样来自同一个IP的请求总是会落到同一台服务器上处理,以致于可以将请求上下文信息存储在这个服务器上,
    21. #url_hash 按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,后端服务器为缓存时比较有效。具体没研究过
    22. #fair采用的不是内建负载均衡使用的轮换的均衡算法,而是可以根据页面大小、加载时间长短智能的进行负载均衡。也就是根据后端服务器时间来分配用户请求,响应时间短的优先分配

    1.2 分布式系统

    分布式存储:Ceph,GlusterFS,FastDFS,MogileFS

    分布式计算:hadoop,Spark

    分布式常见应用

    • 分布式应用-服务按照功能拆分,使用微服务(单一应用程序划分成一组小的服务,服务之间互相协调、互相配合,为用户提供最终价值服务)

    • 分布式静态资源--静态资源放在不同的存储集群上

    • 分布式数据和存储--使用key-value缓存系统

    • 分布式计算--对特殊业务使用分布式计算,比如Hadoop集群

    1.3 集群和分布式

    集群:同一个业务系统,部署在多台服务器上。集群中,每一台服务器实现的功能没有差别,数据和代码都是一样的。

    分布式:一个业务被拆成多个子业务,或者本身就是不同的业务,部署在多台服务器上。分布式中,每一台服务器实现的功能是有差别的,数据和代码也是不一样的,分布式每台服务器功能加起来,才是完整的业务。

    1. 分布式是以缩短单个任务的执行时间来提升效率的,而集群则是通过提高单位时间内执行的任务数来提升效率。
    2. 对于大型网站,访问用户很多,实现一个群集,在前面部署一个负载均衡服务器,后面几台服务器完成
    3. 同一业务。如果有用户进行相应业务访问时,负载均衡器根据后端哪台服务器的负载情况,决定由给哪
    4. 一台去完成响应,并且一台服务器垮了,其它的服务器可以顶上来。分布式的每一个节点,都完成不同
    5. 的业务,如果一个节点垮了,那这个业务可能就会失败

    1.4 集群设计原则

    可扩展性—集群的横向扩展能力

    可用性—无故障时间 (SLA service level agreement)

    性能—访问响应时间

    容量—单位时间内的最大并发吞吐量(C10K 并发问题)

    1.5 集群设计实现

    1.5.1 基础设施层面

    • 提升硬件资源性能—从入口防火墙到后端 web server 均使用更高性能的硬件资源

    • 多域名—DNS 轮询A记录解析

    • 多入口—将A记录解析到多个公网IP入口

    • 多机房—同城+异地容灾

    • CDN(Content Delivery Network)—基于GSLB(Global Server Load Balance)实现全局负载均衡,如:DNS

    1.5.2 业务层面

    • 分层:安全层、负载层、静态层、动态层、(缓存层、存储层)持久化与非持久化

    • 分割:基于功能分割大业务为小服务

    • 分布式:对于特殊场景的业务,使用分布式计算

    1.6 LB Cluster 负载均衡集群

    1.6.1 按实现方式划分

    硬件    F5 Big-IP(F5服务器负载均衡模块)

    软件

    lvs:Linux Virtual Server,阿里四层 SLB (Server Load Balance)使用

    nginx:支持七层调度,阿里七层SLB使用 Tengine

    haproxy:支持七层调度

    ats:Apache Traffic Server,yahoo捐助给apache

    perlbal:Perl 编写

    pound

    1.6.2 基于工作的协议层次划分
    • 传输层(通用):DNAT 和 DPORT

    LVS:linux内核功能

    nginx:stream

    haproxy:mode tcp

    • 应用层(专用):针对特定协议,常称为 proxy server

    http:nginx, httpd, haproxy(mode http), ...

    fastcgi:nginx, httpd, ...

    mysql:mysql-proxy, mycat(读写分离)

    SNAT:让 内网用户 可以访问外网
    DNAT:把内网的服务 共享到公网上(外网用户可以访问 公司内网的服务)

    1.6.3 负载均衡的会话保持
    1. session sticky:同一用户调度固定服务器

    Source IP:LVS sh算法(对某一特定服务而言)

    Cookie

    1. session replication:每台服务器拥有全部session(复制)

    session multicast cluster

    1. session server:专门的session服务器(server)

    Memcached,Redis

    1.7 HA 高可用集群实现

    keepalived:vrrp协议

    Ais:应用接口规范

    heartbeat

    cman+rgmanager(RHCS)

    coresync_pacemaker

    二、 Linux Virtual Server简介

    2.1 LVS介绍

    LVS:Linux Virtual Server,负载调度器,内核集成,章文嵩(花名正明),  阿里的四层SLB(Server Load Balance)是基于LVS+keepalived实现

    LVS 官网:http://www.linuxvirtualserver.org/
    阿里SLB和LVS:
    https://yq.aliyun.com/articles/1803
    https://github.com/alibaba/LVS

    2.2 LVS工作原理

    VS根据请求报文的目标IP和目标协议及端口将其调度转发至某RS(真实服务器),根据调度算法来挑选RS。LVS是内核级功能,工作在INPUT链的位置,将发往INPUT的流量进行“处理”

    LVS:linux内核级功能

    [root@zzzcentos1 ~]#grep -i -C 10 ipvs /boot/config-3.10.0-693.el7.x86_64 

    2.3LVS集群类型中的术语

    • VS(代理服务器):Virtual Server,Director Server(DS), Dispatcher(调度器),Load Balancer(lvs服务器)

    • RS:Real Server(lvs), upstream server(nginx), backend server(haproxy)(真实服务器)

    • CIP:Client IP(客户机IP)

    • VIP:Virtual serve IP VS外网的IP

    • DIP:Director IP VS内网的IP

    • RIP:Real server IP (真实IP)

    • VS:代理服务器

      RS:真实服务器

      VIP:代理服务器的外网ip
      DIP:代理服务器的内网ip
      RIP:真实服务器的ip地址

    访问流程:CIP <--> VIP == DIP <--> RIP

    三、 LVS工作模式和相关命令

    3.1 LVS集群的工作模式

    • lvs-nat:修改请求报文的目标IP,多目标IP的DNAT

    • lvs-dr:操纵封装新的MAC地址(直接路由)

    • lvs-tun:隧道模式

    lvs-dr 是 LVS集群的默认工作模式

    3.1.1 LVS的NAT模式

    报文过程:

    帮助理解报文过程

    lvs-nat:本质是多目标IP的DNAT,通过将请求报文中的目标地址和目标端口修改为某处的RS的RIP和PORT实现转发

    (1)RIP和DIP应在同一个IP网络,且应使用私网地址;RS的网关要指向DIP 

    (2)请求报文和响应报文都必须经由lvs服务器转发,lvs服务器易于成为系统瓶颈

    (3)支持端口映射,可修改请求报文的目标PORT

    (4)VS(代理服务器)必须是Linux系统,RS(真实服务器)可以是任意OS系统

    3.1.2 IP隧道

    1. RIP和DIP可以不处于同一物理网络中,RS的网关一般不能指向DIP,且RIP可以和公网通信。也就是说集群节点可以跨互联网实现。DIP, VIP, RIP可以是公网地址

    2. RealServer的通道接口上需要配置VIP地址,以便接收DIP转发过来的数据包,以及作为响应的报文源IP。

    3. DIP转发给RealServer时需要借助隧道,隧道外层的IP头部的源IP是DIP,目标IP是RIP,而

      RealServer响应给客户端的IP头部是根据隧道内层的IP头分析得到的,源IP是VIP,目标IP是CIP

    4. 请求报文要经由Director,但响应不经由Director,响应由RealServer自己完成

    5. 不支持端口映射

    6. RS的OS须支持隧道功能

    一般来说,隧道模式常会用来负载调度缓存服务器组,这些缓存服务器一般放置在不同的网络环境,可以就近折返给客户端。在请求对象不在Cache服务器本地命中的情况下,Cache服务器要向源服务器发送请求,将结果取回,最后将结果返回给用户。

    3.1.3直接路由 DR模式

    直接路由(Direct Routing):简称 DR 模式,采用半开放式的网络结构,与 TUN模式的结构类似,但各节点并不是分散在各地,而是与调度器位于同一个物理网络。

    负载调度器与各节点服务器通过本地网络连接,不需要建立专用的 IP 隧道

    直接路由,LVS默认模式,应用最广泛,通过请求报文重新封装一个MAC首部进行转发,源MAC是DIP所在的接口的MAC,目标MAC是某挑选出的RS的RIP所在接口的MAC地址;源IP/PORT,以及目标IP/PORT均保持不变。

    DR两种解决方法:

    绑定ARP绑定Ivs 代理服务器(碰不到客户端)
    关闭ARP 广播 真实服务器(一般采用它)

    DR模式的特点:

    1. Director(调度器)和各RS(真实服务器)都配置有VIP(虚拟ip)

    2. 确保前端路由器将目标IP为VIP的请求报文发往Director

    • 在前端网关做静态绑定VIP和Director的MAC地址

    • 在RS上使用arptables工具

    arptables -A IN -d $VIP -j DROP
    arptables -A OUT -s $VIP -j mangle --mangle-ip-s $RIP

    在RS上修改内核参数以限制arp通告及应答级别

    /proc/sys/net/ipv4/conf/all/arp_ignore   忽略apr广播
    /proc/sys/net/ipv4/conf/all/arp_announce  关闭无敌arp

    RS的RIP可以使用私网地址,也可以是公网地址;RIP与DIP在同一IP网络;RIP的网关不能指向DIP,以确保响应报文不会经由Director

    1. RS和Director要在同一个物理网络

    2. 请求报文要经由Director,但响应报文不经由Director,而由RS直接发往Client

    3. 不支持端口映射(端口不能修改)

    4. 无需开启 ip_forward路由转发

    5. RS可使用大多数OS系统

    3.1.5 LVS工作模式总结和比较

    3.2 LVS 调试算法

    [root@zzzcentos1 ~]#grep -i -C 10 ipvs /boot/config-3.10.0-693.el7.x86_64 

    ipvs scheduler:根据其调度时是否考虑各RS当前的负载状态,分为两种:静态方法和动态方法

    静态方法: 不管后端真实服务器的状态,根据自身算法进行调度
    动态方法: 会根据后端服务器的状态来进行调度

    静态方法:

    1、RR:roundrobin,轮询,较常用

    2、WRR:Weighted RR,加权轮询,较常用  先算总权重 再用自己的 权重去除以 总权重

    3、SH:Source Hashing,实现session sticky,源IP地址hash;将来自于同一个IP地址的请求始终发往第一次挑中的RS,从而实现会话绑定

    4、DH:Destination Hashing;目标地址哈希,第一次轮询调度至RS,后续将发往同一个目标地址的请求始终转发至第一次挑中的RS,典型使用场景是正向代理缓存场景中的负载均衡,如: Web缓存

    动态方法:

    动态:一个参考值,来确定服务器是否忙 这个值越小 代表服务器 闲

              就会优先调度给闲的服务器

    主要根据每RS当前的负载状态及调度算法进行调度Overhead=value 较小的RS将被调度

    1、LC:least connections 适用于长连接应用

    Overhead=activeconns*256+inactiveconns

    2、WLC:Weighted LC,默认调度方法,较常用

    Overhead=(activeconns*256+inactiveconns)/weight

    3、SED:Shortest Expection Delay,初始连接高权重优先,只检查活动连接,而不考虑非活动连接

    Overhead=(activeconns+1)*256/weight

    activeconns 活跃

    inactiveconns 不活跃

    4、NQ:Never Queue,第一轮均匀分配,后续SED

    5、LBLC:Locality-Based LC,动态的DH算法,使用场景:根据负载状态实现正向代理,实现Web Cache等   检查后端服务器忙不忙

    6、LBLCR:LBLC with Replication,带复制功能的LBLC,解决LBLC负载不均衡问题,从负载重的复制到负载轻的RS,,实现Web Cache等

    缺点:

    LC最小连接数 不考虑权重

    WLC默认调度加权最小连接数,第一轮不合理 都是 一样的 优先级

    SED 权重小的空闲

    为什么没有url hash?

    LVS(Linux Virtual Server)的调度算法通常不包括URL哈希。

    这是因为LVS主要是一个四层(Layer 4)负载均衡解决方案,它基于传输层信息(如IP地址和端口号)来进行负载均衡,而不涉及应用层(Layer 7)的内容,比如URL。因此,LVS的调度算法通常侧重于传输层的信息,而不是应用层的具体内容。

    四、 ipvsadm 工具

     ipvsadm 工具选项说明

    1. -A: 添加虚拟服务器
    2. -D: 删除整个虚拟服务器
    3. -s: 指定负载调度算法(轮询: rr、加权轮询: wrr、最少连接: lc、加权最少连接: wlc)
    4. -a: 添加真实服务器(节点服务器)
    5. -d: 删除某一个节点
    6. -t: 指定VIP地址及TCP端口
    7. -r: 指定RIP地址及TCP端口
    8. -m: 表示使用NAT群集模式
    9. -g: 表示使用DR模式
    10. -i: 表示使用TUN模式
    11. 一w: 设置权重(权重为0时表示暂停节点)
    12. -p 60: 表示保持长连接60秒
    13. -l: 列表查看 LVS虚拟服务器(默认为查看所有)
    14. -n: 以数字形式显示地址、端口等信息,常与"-l“选项组合使用。ipvsadm -ln
    15. #管理集群服务
    16. ipvsadm -A|E -t|u|f service-address [-s scheduler] [-p [timeout]] [-M netmask] [--pe persistence_engine] [-b sched-flags]
    17. ipvsadm -D -t|u|f service-address #删除
    18. ipvsadm –C #清空
    19. ipvsadm –R #重载,相当于ipvsadm-restore
    20. ipvsadm -S [-n] #保存,相当于ipvsadm-save
    21. #管理集群中的RS
    22. ipvsadm -a|e -t|u|f service-address -r server-address [-g|i|m] [-w weight]  
    23. ipvsadm -d -t|u|f service-address -r server-address
    24. ipvsadm -L|l [options]
    25. ipvsadm -Z [-t|u|f service-address]
    26. 选项:
    27. lvs类型:
    28.    -g: gateway, dr类型,默认
    29.    -i: ipip, tun类型
    30.    -m: masquerade, nat类型        
    31. -w weight:权重
    32. 例子:
    33. ipvsadm -A -t 12.0.0.1:80 -s rr
    34. ipvsadm -a -t 12.0.0.1:80 -r 192.168.80.11:80 -m
    35. yum install ipvsadm
    36. Unit File: ipvsadm.service
    37. 主程序:/usr/sbin/ipvsadm
    38. 规则保存工具:/usr/sbin/ipvsadm-save
    39. 规则重载工具:/usr/sbin/ipvsadm-restore
    40. 配置文件:/etc/sysconfig/ipvsadm-config
    41. ipvs调度规则文件:/etc/sysconfig/ipvsadm

    ipvsadm    是lvs内核使用工具

    keepalive协助ipvsadm工具生成高可用

    五、NAT模式 LVS负载均衡部署

    NFS 是一种基于 TCP/IP 传输的网络文件系统协议,最初由 Sun 公司开发。通过使用 NFS

    协议,客户机可以像访问本地目录一样访问远程服务器中的共享资源。对于大多数负载均衡

    群集来说,使用 NFS 协议来共享数据存储是比较常见的做法,NFS 也是 NAS 存储设备必然支

    持的一种协议。

    NFS 服务的实现依赖于 RPC(Remote Process Call,远端过程调用)机制,以完成远程

    到本地的映射过程。在 CentOS 7 系统中,需要安装 nfs-utils、rpcbind 软件包来提供 NFS

    共享服务,前者用于 NFS 共享发布和访问,后者用于 RPC 支持

    实验拓朴图:

    lvs负载调度器:配置双网卡 内网:192.168.246.7 (ens33)  外网卡:12.0.0.1 (ens36)
    二台WEB服务器集群池:192.168.246.8、192.168.246.9  
    一台NFS共享服务器:192.168.246.10
    客户端:访问curl 12.0.0.1

    ①四台服务器都关闭防火墙、防护

    ②7-4共享服务器NFS配置

    1. [root@localhost ~]# yum install nfs-utils.x86_64 rpcbind -y
    2. #安装nfs服务
    3. [root@localhost ~]# systemctl start rpcbind
    4. [root@localhost ~]# systemctl start nfs
    5. #开启服务

    ③7-2web服务器配置

    ④7-3web服务器配置

    先检测下:

    ⑤7-1 调度服务器 配置

    我们使用本地yum源安装软件ipvsadm

    网关地址别忘记啊      修改7-2、7-3真实服务器网关地址

    RIP和DIP应在同一个IP网络,且应使用私网地址;RS的网关要指向DIP 

    去检测:

    lvs 的nat模式 是通过修改源ip和目的ip来实现负载均衡

    六、安装软件ipvsadm的两种方法

    方法一:使用yum安装

    [root@zzzcentos1 ~]#yum install ipvsadm.x86_64 -y

    ipvsadm相关配置文件:

    主程序:/usr/sbin/ipvsadm
    规则保存工具:/usr/sbin/ipvsadm-save
    规则重载工具:/usr/sbin/ipvsadm-restore
    配置文件:/etc/sysconfig/ipvsadm-config
    ipvs调度规则文件:/etc/sysconfig/ipvsadm

    方法二:可以使用本地yum源安装软件ipvsadm

  • 相关阅读:
    泛积木-低代码 使用攻略
    java Math概念以常用方法
    IWDG与WWDG (学习)
    洛谷 P3460 [POI2007]TET-Tetris Attac
    计算机网络篇之TCP滑动窗口
    用python实现mac地址加一
    java springboot2.7 写一个本地 pdf 预览的接口
    CTF-SMB信息泄露【简单易懂】
    在Win11上部署ChatGLM2-6B详细步骤--(上)准备工作
    ArrayList,LinkedList和Vector的区别
  • 原文地址:https://blog.csdn.net/zzzxxx520369/article/details/136469402