LVS集群

文章目录

  • [LVS集群(Linux Virtual server)](#LVS集群(Linux Virtual server))
    • 一、集群和分布式
      • [1、集群 Cluster](#1、集群 Cluster)
        • [1.1 Cluster分为三种类型](#1.1 Cluster分为三种类型)
      • 2、分布式系统
      • 3、集群和分布式
        • [3.1 集群](#3.1 集群)
        • [3.2 分布式](#3.2 分布式)
      • 4、集群设计原则
      • 5、集群设计实现
        • [5.1 基础设施层面](#5.1 基础设施层面)
        • [5.2 业务层面](#5.2 业务层面)
      • [6、LB Cluster 负载均衡集群](#6、LB Cluster 负载均衡集群)
        • [6.1 按实现方式划分](#6.1 按实现方式划分)
          • [6.1.1 硬件](#6.1.1 硬件)
          • [6.1.2 软件](#6.1.2 软件)
        • [6.2 基于工作的协议层次划分](#6.2 基于工作的协议层次划分)
          • [6.2.1 传输层(通用):DNAT 和 DPORT](#6.2.1 传输层(通用):DNAT 和 DPORT)
          • [6.2.2 应用层(专用):针对特定协议,常称为 proxy server](#6.2.2 应用层(专用):针对特定协议,常称为 proxy server)
        • [6.3 负载均衡的会话保持](#6.3 负载均衡的会话保持)
          • [6.3.1 session sticky:同一用户调度固定服务器](#6.3.1 session sticky:同一用户调度固定服务器)
          • [6.3.2 session replication:每台服务器拥有全部session(复制)](#6.3.2 session replication:每台服务器拥有全部session(复制))
          • [6.3.3 session server:专门的session服务器(server)](#6.3.3 session server:专门的session服务器(server))
      • [7、HA 高可用集群实现](#7、HA 高可用集群实现)
    • [二、Linux Virtual Server简介](#二、Linux Virtual Server简介)
    • 三、LVS工作模式和相关命令
      • 1、LVS集群的工作模式
        • [1.1 LVS的NAT模式](#1.1 LVS的NAT模式)
        • [1.2 IP隧道](#1.2 IP隧道)
        • [1.3 直接路由](#1.3 直接路由)
        • [1.4 LVS工作模式总结和比较](#1.4 LVS工作模式总结和比较)
      • [2、LVS 调度算法](#2、LVS 调度算法)
        • [2.1 静态算法](#2.1 静态算法)
        • [2.2 动态算法](#2.2 动态算法)
    • [四、ipvsadm 工具](#四、ipvsadm 工具)
      • [1、ipvsadm 工具选项说明](#1、ipvsadm 工具选项说明)
    • [五、NAT模式 LVS负载均衡部署](#五、NAT模式 LVS负载均衡部署)
    • [六、LVS DR模式部署](#六、LVS DR模式部署)

LVS集群(Linux Virtual server)

  • 集群概念
  • lvs模型
  • lvs调度算法
  • lvs实现
  • lvs高可用性,负载均衡

一、集群和分布式

系统性能扩展方式:

  • Scale UP:垂直扩展,向上扩展,增强,性能更强的计算机运行同样的服务
  • Scale Out:水平扩展,向外扩展,增加设备,并行地运行多个服务调度分配问题,Cluster

1、集群 Cluster

Cluster:集群,为解决某个特定问题将多台计算机组合起来形成的单个系统

1.1 Cluster分为三种类型
  • LB: Load Balancing,负载均衡,多个主机组成,每个主机只承担一部分访问请求
  • HA: High Availiablity,高可用(所有高可用都是备胎技术),避免 SPOF(single Point Of failure),单点故障
  • HPC: High-performance computing,高性能
bash 复制代码
MTBF:Mean Time Between Failure 平均无故障时间,正常时间
MTTR:Mean Time To Restoration( repair)平均恢复前时间,故障时间
A = MTBF /(MTBF+MTTR) (0,1):99%,99.5%,99.9%,99.99%,99.999%

SLA:服务等级协议(简称:SLA,全称:service level agreement)。
是在一定开销下为保障服务的性能和可用性,服务提供商与用户间定义的一种双方认可的协定。通常这个开销是驱动提供服务质量的主要因素。在常规的领域中,总是设定所谓的三个9,四个9来进行表示,当没有达到这种水平的时候,就会有一些列的惩罚措施,而运维,最主要的目标就是达成这种服务水平。

1年 = 365天 = 8760小时
90 = (1-90%)*365=36.5天
99 = 8760 * 1% = 87.6小时
99.9 = 8760 * 0.1% = 8760 * 0.001 = 8.76小时
99.99 = 8760 * 0.0001 = 0.876小时 = 0.876 * 60 = 52.6分钟
99.999 = 8760 * 0.00001 = 0.0876小时 = 0.0876 * 60 = 5.26分钟
99.9999= (1-99.9999%)*365*24*60*60=31秒

#停机时间又分为两种,一种是计划内停机时间,一种是计划外停机时间,而运维则主要关注计划外停机时间。


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

#加权轮询(Weighted Round Robin):根据调度器设置的权重值来分发请求,权重 值高的节点优先获得任务并且分配的请求越多,这样可以保证性能高的节点承担更 多请求。 

#最少连接(Least Connections):根据真实服务器已建立的连接数进行分配,将收 到的访问请求优先分配给连接数最少的节点。如果所有的服务器节点性能相近,采用这种方式可以更好地均衡负载。 

#加权最少连接(Weighted Least Connections):在服务器节点的性能差异较大的 情况下,调度器可以根据节点服务器负载自动调整权重,权重较高的节点将承担更 大比例的活动连接负载。 

#IP_Hash根据请求来源的IP地址进行Hash计算,得到后端服务器,这样来自同一个IP的请求总是会落到同一台服务器上处理,以致于可以将请求上下文信息存储在这个服务器上,

#url_hash 按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,后端服务器为缓存时比较有效。具体没研究过

#fair采用的不是内建负载均衡使用的轮换的均衡算法,而是可以根据页面大小、加载时间长短智能的进行负载均衡。也就是根据后端服务器时间来分配用户请求,响应时间短的优先分配

2、分布式系统

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

分布式计算:hadoop,Spark

分布式常见应用

  • 分布式应用-服务按照功能拆分,使用微服务(单一应用程序划分成一组小的服务,服务之间互相协调、互相配合,为用户提供最终价值服务)
  • 分布式静态资源--静态资源放在不同的存储集群上
  • 分布式数据和存储--使用key-value缓存系统
  • 分布式计算--对特殊业务使用分布式计算,比如Hadoop集群

3、集群和分布式

3.1 集群

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

3.2 分布式

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

  • 分布式是以缩短单个任务的执行时间来提升效率的,而集群则是通过提高单位时间内执行的任务数来提升效率。

  • 对于大型网站,访问用户很多,实现一个群集,在前面部署一个负载均衡服务器,后面几台服务器完成同一业务。如果有用户进行相应业务访问时,负载均衡器根据后端哪台服务器的负载情况,决定由给哪一台去完成响应,并且一台服务器垮了,其它的服务器可以顶上来。分布式的每一个节点,都完成不同的业务,如果一个节点垮了,那这个业务可能就会失败

4、集群设计原则

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

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

性能---访问响应时间

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

5、集群设计实现

5.1 基础设施层面
  • 提升硬件资源性能---从入口防火墙到后端 web server 均使用更高性能的硬件资源

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

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

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

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

5.2 业务层面
  • 分层:安全层、负载层、静态层、动态层、(缓存层、存储层)持久化与非持久化
  • 分割:基于功能分割大业务为小服务
  • 分布式:对于特殊场景的业务,使用分布式计算

6、LB Cluster 负载均衡集群

6.1 按实现方式划分
6.1.1 硬件
  • F5 Big-IP(F5服务器负载均衡模块)

  • Citrix Netscaler

  • A10 A10

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

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

  • haproxy:支持七层调度

  • ats:Apache Traffic Server,yahoo捐助给apache

  • perlbal:Perl 编写

  • pound

6.2 基于工作的协议层次划分

SNAT:让内网用户可以访问外网

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

6.2.1 传输层(通用):DNAT 和 DPORT
  • LVS:

  • nginx:stream

  • haproxy:mode tcp

6.2.2 应用层(专用):针对特定协议,常称为 proxy server
  • http:nginx, httpd, haproxy(mode http), ...

  • fastcgi:nginx, httpd, ...

  • mysql:mysql-proxy, mycat...

6.3 负载均衡的会话保持
6.3.1 session sticky:同一用户调度固定服务器
  • Source IP:LVS sh算法(对某一特定服务而言)

  • Cookie

6.3.2 session replication:每台服务器拥有全部session(复制)
  • session multicast cluster
6.3.3 session server:专门的session服务器(server)
  • Memcached,Redis

7、HA 高可用集群实现

  • keepalived:vrrp协议

  • Ais:应用接口规范

    heartbeat

    cman+rgmanager(RHCS)

    coresync_pacemaker

二、Linux Virtual Server简介

1、LVS介绍

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

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

2、LVS工作原理

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

3、LVS集群体系架构

4、LVS 功能及组织架构

负载均衡的应用场景为高访问量的业务,提高应用程序的可用性和可靠性。

4.1 应用于高访问量的业务

如果您的应用访问量很高,可以通过配置监听规则将流量分发到不同的云服务器 ECS(Elastic Compute Service 弹性计算服务)实例上。此外,可以使用会话保持功能将同一客户端的请求转发到同一台后端ECS

4.2 扩展应用程序

可以根据业务发展的需要,随时添加和移除ECS实例来扩展应用系统的服务能力,适用于各种Web服务器和App服务器。

4.3 消除单点故障

可以在负载均衡实例下添加多台ECS实例。当其中一部分ECS实例发生故障后,负载均衡会自动屏蔽故障的ECS实例,将请求分发给正常运行的ECS实例,保证应用系统仍能正常工作

4.4 同城容灾 (多可用区容灾)

为了提供更加稳定可靠的负载均衡服务,阿里云负载均衡已在各地域部署了多可用区以实现同地域容灾。当主可用区出现机房故障或不可用时,负载均衡仍然有能力在非常短的时间内(如:大约30s中断)切换到另外一个备可用区恢复服务能力;当主可用区恢复时,负载均衡同样会自动切换到主可用区提供服务。使用负载均衡时,您可以将负载均衡实例部署在支持多可用区的地域以实现同城容灾。此外,建议您结合自身的应用需要,综合考虑后端服务器的部署。如果您的每个可用区均至少添加了一台ECS实例,那么此种部署模式下的负载均衡服务的效率是最高的。

5、LVS集群类型中的术语

  • 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)

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

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

1、LVS集群的工作模式

  • lvs-nat:修改请求报文的目标IP,多目标IP的DNAT
  • lvs-dr:操纵封装新的MAC地址(直接路由)(默认模式)
  • lvs-tun:隧道模式
1.1 LVS的NAT模式

过程:

1.当客户端发起请求报文:

源ip:cip(客户端的ip地址)

目的地址:vip(代理服务器的外网地址)

2.当数据包到达我们的代理服务器,源ip不变,需要修改目的ip及端口号

源ip:cip(客户端的ip地址)

目的地址:rip(后端真实服务器的ip)

3.真实服务器收到报文后,构建响应报文

源ip:改成真实服务器自己的ip(vip是内网地址)

目的地址:cip (外网客户端地址)

4.再发给代理服务器,代理服务器会修改源ip,将内网地址改成外网地址

源ip:vip(代理服务器的外网地址)

目的地址:cip (外网客户端的ip地址)

lvs-nat

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

  • RIP(真实服务器)和DIP(代理服务器的内网)应在同一个IP网络,且应使用私网地址;RS的网关要指向DIP

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

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

  • VS必须是Linux系统,RS可以是任意OS系统

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服务器要向源服务器发送请求,将结果取回,最后将结果返回给用户。

1.3 直接路由

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

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

直接路由,LVS默认模式,应用最广泛,通过请求报文重新封装一个MAC首部

进行转发,源MAC是DIP所在的接口的MAC,目标MAC是某挑选出的RS的RIP所在接口的MAC地址;源IP/PORT,以及目标IP/PORT均保持不变

DR模式的特点

  1. Director和各RS都配置有VIP

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

  • 在前端网关做静态绑定VIP和Director的MAC地址
  • 在RS上使用arptables工具
bash 复制代码
arptables -A IN -d $VIP -j DROP
arptables -A OUT -s $VIP -j mangle --mangle-ip-s $RIP

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

bash 复制代码
##真实服务器修改
/proc/sys/net/ipv4/conf/all/arp_ignore
#忽略arp广播
/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系统

1.4 LVS工作模式总结和比较
说明 NAT TUN DR
优点 端口转换 WAN 性能最好
缺点 性能瓶颈 服务器支持隧道模式 不支持跨网段
真实服务器要求 any Tunneling Non-arp device
支持网络 private(私网) LAN/WAN(私网/公网) LAN(私网)
真实服务器数量 low (10~20) High (100) High (100)
真实服务器网关 lvs内网地址 Own router(网工定义) Own router(网工定义)

2、LVS 调度算法

ipvs scheduler:根据其调度时是否考虑各RS当前的负载状态

分为两种:静态方法和动态方法

  • 静态算法:不管后端服务器的状态,根据本身算法进行调度
  • 动态算法:会根据后端服务器的状态来进行调度
2.1 静态算法
  • RR:roundrobin,轮询,较常用
  • WRR:Weighted RR,加权轮询,较常用(先算总权重,再用自己的权重除以总权重)
  • SH:Source Hashing,实现session sticky,源IP地址hash;将来自于同一个IP地址的请求始终发往第一次挑中的RS,从而实现会话绑定
  • DH:Destination Hashing;目标地址哈希,第一次轮询调度至RS,后续将发往同一个目标地址的请求始终转发至第一次挑中的RS,典型使用场景是正向代理缓存场景中的负载均衡,如:Web缓存
2.2 动态算法

主要根据每RS当前的负载状态及调度算法进行调度Overhead=value 较小的RS将被调度 (根据一个参考值来确定服务器是否忙碌,值越小,表示服务器清闲,就会优先调度使用此服务器)

  • LC:least connections 适用于长连接应用(最小连接数)
bash 复制代码
Overhead=activeconns*256+inactiveconns
  • WLC:Weighted LC,默认调度方法,较常用(加权最小连接数)
bash 复制代码
Overhead=(activeconns*256+inactiveconns)/weight
  • SED:Shortest Expection Delay,初始连接高权重优先,只检查活动连接,而不考虑非活动连接
bash 复制代码
Overhead=(activeconns+1)*256/weight
  • NQ:Never Queue,第一轮均匀分配,后续SED

  • LBLC:Locality-Based LC,动态的DH算法,使用场景:根据负载状态实现正向代理,实现Web Cache等

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

  • FO:Weighted Fail Over 调度算法,在此FO算法中,遍历虚拟服务所关联的真实服务器链表,找到还的且权重最高的真实服务器,进行调度,属于静态算法

  • OVF:Overflow connection 调度算法,基于真是服务器的活动连接数量和权重值实现,将新连接调度到权重最高的真实服务器,知道其活动连接数量超过权重值,之后调度到下一个权重值最高的真实服务器,在此OVF算法中,遍历虚拟服务相关联的真实服务器链表,找到权重值最高的可用真实服务器,属于动态算法

一个可用的真实服务器需要同时满足以下条件:

  • 未过载(未设置IP_VS_DEST_F_OVERLOAD标志)
  • 真实服务器当前的活动连接数量小于其权重值
  • 其权重值不为零

四、ipvsadm 工具

1、ipvsadm 工具选项说明

bash 复制代码
-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 -ln
bash 复制代码
#管理集群服务
ipvsadm -A|E -t|u|f service-address [-s scheduler] [-p [timeout]] [-M netmask] [--pe persistence_engine] [-b sched-flags]

ipvsadm -D -t|u|f service-address #删除
ipvsadm --C #清空
ipvsadm --R #重载,相当于ipvsadm-restore
ipvsadm -S [-n] #保存,相当于ipvsadm-save


#管理集群中的RS
ipvsadm -a|e -t|u|f service-address -r server-address [-g|i|m] [-w weight]  
ipvsadm -d -t|u|f service-address -r server-address
ipvsadm -L|l [options]
ipvsadm -Z [-t|u|f service-address]

选项:
lvs类型:
    -g: gateway, dr类型,默认
    -i: ipip, tun类型
    -m: masquerade, nat类型        
    -w: weight:权重

示例:
ipvsadm -A -t 12.0.0.1:80 -s rr
-A:新建一个代理服务器
-t:tcp协议
-s:代表算法(轮询)

yum install ipvsadm

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

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

配置环境:

bash 复制代码
负载调度器:配置双网卡 内网:192.168.10.11(ens33)  外网卡:10.0.0.1(ens37)
二台WEB服务器集群池:192.168.10.12、192.168.10.13    
一台NFS共享服务器:192.168.10.14
客户端:

1、部署共享存储

  • NFS服务器:192.168.10.14

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

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

bash 复制代码
systemctl stop firewalld
setenforce 0
#关闭防火墙和防护中心

rpm -qa |grep nfs
#查看是否已安装 nfs 相关的软件包

#yum install nfs-utils rpcbind -y
#没有安装时,安装相关软件包

systemctl start nfs
#开启服务

mkdir /benet
mkdir /accp
#建立新的文件夹

#设置共享策略,添加共享文件夹
vim /etc/exports
/benet  *
/accp  *

exportfs -r
#重新加载共享目录

exportfs -v
#显示共享目录信息

cd /accp
#切换目录

echo accp > index.html
#将accp内容写入/accp/index.html文件中,创建站点文件

cd /benet
#切换目录

echo benet > index.html
#将benet内容写入/benet/index.html文件中,创建站点文件

##验证
showmount -e 192.168.10.14
#使用另外的设备访问本机,显示共享目录
  • 验证

2、节点服务器(后端真实服务器)

  • WEB服务器集群池:192.168.10.12、192.168.10.13
bash 复制代码
1、地址:192.168.10.12
systemctl stop firewalld
setenforce 0
#关闭防火墙和防护中心

showmount -e 192.168.10.14
#查看nfs共享服务

rpm -q httpd
#查看httpd服务是否安装

#yum install -y httpd
#如果没有安装,先安装httpd服务

systemctl start httpd
#开启httpd服务

mount 192.168.10.14:/accp /var/www/html
#挂载站点

df
#查看挂载情况

#修改网卡配置文件
vim /etc/sysconfig/network-scripts/ifcfg-ens33
GATEWAY=192.168.10.11
#网关地址要修改成调度服务器的内网地址

systemctl restart network
#重启网卡

route -n
#查看网关


2、地址:192.168.10.13
systemctl stop firewalld
setenforce 0
#关闭防火墙和防护中心

showmount -e 192.168.10.14
#查看nfs共享服务

rpm -q httpd
#查看httpd服务是否安装

#yum install -y httpd
#如果没有安装,先安装httpd服务

systemctl start httpd
#开启httpd服务

mount 192.168.10.14:/benet /var/www/html
#挂载站点

df
#查看挂载情况

#修改网卡配置文件
vim /etc/sysconfig/network-scripts/ifcfg-ens33
GATEWAY=192.168.10.11
#网关地址要修改成调度服务器的内网地址

systemctl restart network
#重启网卡

route -n
#查看网关
  • 第一台web服务器(地址:192.168.10.12)
  • 第二台web服务器(地址:192.168.10.13)

3、调度服务器(代理服务器)

  • 负载调度器:配置双网卡

    内网:192.168.10.11(ens33)

    外网卡(虚拟网卡):10.0.0.1(ens37)

bash 复制代码
systemctl stop firewalld
setenforce 0
#关闭防火墙和防护中心

yum install -y ipvsadm.x86_64
#安装ipvsadm.x86_64软件

添加一块新网卡

cd /etc/sysconfig/network-scripts/
#切换目录

cp ifcfg-ens33 ifcfg-ens37
#复制

#修改ens37网卡配置文件
vim ifcfg-ens37
GATEWAY=10.0.0.1
#将网关地址与自己的ip地址设置成一样的

vim ifcfg-ens33
GATEWAY=192.168.10.11
#将网关地址与自己的ip地址设置成一样的

systemctl restart network
#重启网卡

route -n
#查看网关

sysctl -a |grep ip_forward
#查看路由转发功能(IP转发)状态

vim /etc/sysctl.conf
net.ipv4.ip_forward = 1
#打开路由转发功能,添加上面一行

sysctl -p
#重新加载配置文件

systemctl start ipvsadm.service
#开启ipvsadm服务(会报错,因为没有那个文件或目录/etc/sysconfig/ipvsadm)

ipvsadm-save > /etc/sysconfig/ipvsadm
#保存配置文件

systemctl start ipvsadm.service
#开启ipvsadm服务

systemctl status ipvsadm.service
#查看ipvsadm服务状态

ipvsadm -C
#清空策略

ipvsadm -ln
#查看策略(此时策略是空的)

ipvsadm -A -t 10.0.0.1:80 -s rr
#添加一个监听 10.0.0.1 的 80 端口的虚拟服务,并使用轮询调度算法来分发进入的请求

ipvsadm -a -t 10.0.0.1:80 -r 192.168.10.12:80 -m
#添加一个后端真实服务器 192.168.10.12:80 到已存在的虚拟服务 10.0.0.1:80,并使用 NAT 模式进行负载均衡

ipvsadm -a -t 10.0.0.1:80 -r 192.168.10.13:80 -m
#添加一个后端真实服务器 192.168.10.13:80 到已存在的虚拟服务 10.0.0.1:80,并使用 NAT 模式进行负载均衡

ipvsadm -ln
#查看策略

ipvsadm
#启动

##验证
curl 10.0.0.1
#访问虚拟服务ip,web服务器页面内容轮询出现
bash 复制代码
LVS的负载调度算法有四种最常用的:轮询算法(rr)、加权轮询(wrr)、最少轮询(lc)、加权最少轮询(wlc)

1、创建虚拟服务器(注意:NAT模式要两块网卡,调度器的地址是外网口地址)
群集的VIP地址为192.168.80.33,针对TCP 80端口提供负载分流服务,使用的轮询调度算法。对于负载均衡调度器来说,VIP必须是本机实际已启用的IP地址
ipvsadm -A -t 192.168.20.11:80 -s rr

//选项 "-A"表示添加虚拟服务器,"-t"用来指定VIP地址及TCP端口,"-s"用来指定负载调度算法------rr、wrr、lc、wlc

2、添加服务器节点
ipvsadm -a -t 192.168.20.11:80 -r 192.168.80.33:80 -m
ipvsadm -a -t 192.168.20.11:80 -r 192.168.80.44:80 -m

//选项 "-a"表示添加真实服务器,"-t"用来指定VIP地址及TCP端口,"-r"用来指定RIP地址及TCP端口,"-m"表示使用NAT群集模式("-g"是DR模式,"-i"是TUN模式)
{ -m参数后面还可以跟-w的参数,这里没有做的"-w"用来设置权重(权重为0时表示暂停节点)}

4、删除服务器节点
ipvsadm -d -r 192.168.90.22:80 -t 192.168.80.88:80

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

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

ipvsadm -L	//查看节点状态,加个"-n"将以数字形式显示地址、端口信息
ipvsadm-save  > /etc/sysconfig/ipvsadm	//保存策略

使用导出/导入工具ipvsadm-save/ipvsadm-restore可以保存、恢复LVS策略,方法类似于iptables的规则的导出、导入

六、LVS DR模式部署

1、原理解释

客户机发起请求,经过调度服务器(lvs)和算法调度,去访问真实服务器(RS),由于不原路返回,客户端不知道,真实主机的ip地址,所以只能通过调度服务器的外网ip(vip)去返回报文信息。

2、实际操作---DR模式部署

bash 复制代码
#环境简介
DR 服务器:192.168.10.11
web 服务器1:192.168.10.12
web 服务器2:192.168.10.13
vip(虚拟回环):192.168.10.100
客户端:192.168.10.14
2.1 配置负载调度器
  • DR服务器:192.168.10.11
  • vip(虚拟回环):192.168.10.100
bash 复制代码
systemctl stop firewalld
setenforce 0
#关闭防火墙和防护中心

ifconfig ens33:0 192.168.10.100/32
#设置临时虚拟网卡

#调整/proc响应参数,添加下面内容
vim /etc/sysctl.conf
net.ipv4.ip_forward = 0
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.ens33.send_redirects = 0
#调整/proc响应参数,对于 DR 群集模式来说,由于 LVS 负载调度器和各节点需要共用 VIP 地址,应该关闭 Linux 内核的重定向参数响应服务器不是一台路由器,那么它不会发送重定向,所以可以关闭该功能

sysctl -p
#刷新配置

##配置负载分配策略
modprobe ip_vs
#加载模块

cat /proc/net/ip_vs
#查看加载的模块

yum install -y ipvsadm.x86_64
#安装服务

ipvsadm-save > /etc/sysconfig/ipvsadm
#保存配置文件

systemctl start ipvsadm.service
#开启ipvsadm服务

ipvsadm -A -t 192.168.10.100:80 -s rr
#添加一个监听 192.168.10.100 的 80 端口的虚拟服务,并使用轮询调度算法来分发进入的请求

ipvsadm -a -t 192.168.10.100:80 -r 192.168.10.12:80 -g
#添加一个后端真实服务器 192.168.10.12:80 到已存在的虚拟服务 192.168.10.100:80,并使用 DR 模式进行负载均衡

ipvsadm -a -t 192.168.10.100:80 -r 192.168.10.13:80 -g
#添加一个后端真实服务器 192.168.10.13:80 到已存在的虚拟服务 192.168.10.100:80,并使用 DR 模式进行负载均衡

ipvsadm -ln
#查看策略

ipvsadm
#启动
2.2 节点服务器
  • web 服务器1:192.168.10.12
  • web 服务器2:192.168.10.13
bash 复制代码
1、第一台web服务器:地址:192.168.10.12
systemctl stop firewalld.service
setenforce 0
#关闭防火墙和防护中心

rpm -q httpd
#查看httpd服务是否安装

yum install -y httpd
#安装httpd(如果没有安装,需要先进行安装)

systemctl start httpd
#开启服务

ifconfig lo:0 192.168.10.100/32
##设置临时虚拟网卡

cd /var/www/html
#切换目录

echo this is 192.168.10.12 > index.html
#添加内容

#调整/proc响应参数,添加下面内容
vim /etc/sysctl.conf 
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.default.arp_ignore = 1
net.ipv4.conf.default.arp_announce = 2
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2
#添加系统只响应目的IP为本地IP的ARP请求
#系统不使用原地址来设置ARP请求的源地址,而是物理mac地址上的IP

sysctl -p
#刷新配置


2、第二台web服务器:地址:192.168.10.13
systemctl stop firewalld.service
setenforce 0
#关闭防火墙和防护中心

yum install -y httpd
#安装httpd(如果没有安装,需要先进行安装)

systemctl start httpd
#开启服务

##使用永久生效网卡,添加虚拟网卡配置
cd /etc/sysconfig/network-scripts/
#切换目录

cp ifcfg-lo ifcfg-lo:0
#复制相关配置

#修改配置文件
vim ifcfg-lo:0
DEVICE=lo:0
IPADDR=192.168.10.100
NETMASK=255.255.255.255
NETWORK=127.0.0.0
#修改回环网卡名,IP地址,子网掩码

systemctl restart network
#重启网卡

cd /var/www/html
#切换目录

echo this is 192.168.10.13 > index.html
#添加内容

#调整/proc响应参数,添加下面内容
vim /etc/sysctl.conf 
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.default.arp_ignore = 1
net.ipv4.conf.default.arp_announce = 2
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2
#添加系统只响应目的IP为本地IP的ARP请求
#系统不使用原地址来设置ARP请求的源地址,而是物理mac地址上的IP

sysctl -p
#刷新配置
  • 第一台web服务器(地址:192.168.10.12)
  • 第二台web服务器(地址:192.168.10.13)
  • 验证
bash 复制代码
客户端:192.168.10.14
systemctl stop firewalld
setenforce 0
#关闭防火墙和防护中心

##验证
curl 192.168.10.100
#使用客户端设备访问设置的vip,两台web服务器使用轮询算法交替出现
相关推荐
对你无可奈何13 分钟前
关于Ubuntu的 update造成的内核升级
运维·服务器·ubuntu
qq_3129201137 分钟前
Nginx限流与防爬虫与安全配置方案
运维·爬虫·nginx·安全
GanGuaGua43 分钟前
Linux系统:线程的互斥和安全
linux·运维·服务器·c语言·c++·安全
lsnm1 小时前
【LINUX网络】IP——网络层
linux·服务器·网络·c++·网络协议·tcp/ip
全糖去冰吃不了苦1 小时前
ELK 集群部署实战
运维·jenkins
不掰手腕1 小时前
在UnionTech OS Server 20 (统信UOS服务器版) 上离线安装PostgreSQL (pgsql) 数据库
linux·数据库·postgresql
Lynnxiaowen2 小时前
今天继续昨天的正则表达式进行学习
linux·运维·学习·正则表达式·云计算·bash
努力学习的小廉2 小时前
深入了解linux系统—— POSIX信号量
linux·运维·服务器
刘一说2 小时前
CentOS部署ELK Stack完整指南
linux·elk·centos
从零开始的ops生活2 小时前
【Day 50 】Linux-nginx反向代理与负载均衡
linux·nginx