当前位置:   article > 正文

Linux系统——LVS负载均衡群集

lvs

目录

一、LVS定义

1.企业群集应用概述

1.1群集的含义

1.1.1Cluster分三种类型

 1.1.2扩展——SLA

1.2问题

1.3解决方法

1.4集群和分布式

1.4.1分布式系统

1.4.2分布式常见应用

1.5集群和分布式的对比

1.6集群设计原则

1.7集群设计实现

1.7.1基础设施层面

1.7.2业务层面

2.企业群集分类

2.1根据群集所针对的目标差异

2.2负载均衡群集(Load Balance Cluster)

2.3高可用群集(High Availability Cluster)

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

3.负载均衡群集架构

3.1LB Cluster负载均衡集群

3.1.1按实现方式划分

3.1.1.1硬件

3.1.1.2软件

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

3.1.2.1传输层(通用)——DNAT和DPORT

3.1.2.2应用层(专用)——针对特定协议(常称为Proxy Server)

3.1.3负载均衡的会话保持

3.2 HA 高可用集群实现

二、LVS 介绍

1.LVS简介

2.LVS工作原理

3.LVS功能及组织架构

3.1应用于高访问量的业务

3.2扩展应用程序

3.3消除单点故障

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

4.LVS集群类型中术语

5.LVS工作模式和相关命令

5.1LVS集群的工作模式

5.1.1LVS的NAT模式

6.LVS调度算法

6.1静态调度算法

6.2动态调度算法

6.3其他调度算法

7.ipvsadm 工具

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

1.搭建实验环境

2.部署NFS共享存储服务器

3.搭建中间件服务器

4.搭建代理服务器配置 

5.测试 

6.补充


LVS集群(Linux Vritual Server)

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

一、LVS定义

1.企业群集应用概述

1.1群集的含义

  • Cluster,集群、群集,为解决某个特定问题将多台计算机组合起来形成的单个系统
  • 由多台主机构成,但对外只表现为一个整体,只提供一个访问入口(域名和IP地址),相当于一台大型计算机。
1.1.1Cluster分三种类型
  • LB: Load Balancing,负载均衡,多个主机组成,每个主机只承担一部分访问请求
  • HA: High Availiablity,高可用,避免 SPOF(single Point Of failure)
  • HPC: High-performance computing,高性能
 1.1.2扩展——SLA

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

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%;

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秒

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

1.2问题

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

1.3解决方法

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

通过整合多台服务器,使用LVS来达到服务器构建服务群集,并以同一个IP地址对外提供相同的服务;在企业中常用的一种群集技术——LVSLinux Virtual Server,Linux虚拟服务器)

1.4集群和分布式

系统性能扩展方式

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

水平扩展  增加服务器的数量   垂直扩展  提升单台服务器的性能;

横向扩展就是群集;

垂直扩展不再提及  随着计算机性能的增长,其价格会成倍增长。

1.4.1分布式系统

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

分布式计算:hadoop,Spark

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

1.5集群和分布式的对比

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

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

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

1.6集群设计原则

  • 可扩展性—集群的横向扩展能力
  • 可用性—无故障时间 (SLA service level agreement)
  • 性能—访问响应时间
  • 容量—单位时间内的最大并发吞吐量(C10K 并发问题)

1.7集群设计实现

1.7.1基础设施层面
  • 提升硬件资源性能—从入口防火墙到后端 web server 均使用更高性能的硬件资源
  • 多域名—DNS 轮询A记录解析
  • 多入口—将A记录解析到多个公网IP入口
  • 多机房—同城+异地容灾
  • CDN(Content Delivery Network)—基于GSLB(Global Server Load Balance)实现全局负载均衡,如:DNS
1.7.2业务层面
  • 分层:安全层、负载层、静态层、动态层、(缓存层、存储层)持久化与非持久化
  • 分割:基于功能分割大业务为小服务
  • 分布式:对于特殊场景的业务,使用分布式计算
  • 微服务

2.企业群集分类

2.1根据群集所针对的目标差异

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

2.2负载均衡群集(Load Balance Cluster)

  • 提高应用系统的响应能力、尽可能处理更多的访问请求、减少延迟为目标,获得高并发、高负载(LB)的整体性能
  • LB的负载分配依赖于主节点的分流算法,将来自客户机的访问请求分担给多个服务器节点,从而缓解整个系统的负载

2.3高可用群集(High Availability Cluster)

  • 提供应用系统的可靠性、尽可能地减少中断时间为目标,确保服务的连续性,达到高可用(HA)的容错效果
  • HA的工作方式包括双工和主从两种模式,双工即所有节点同时在线;主从则只有主节点在线,但当出现故障时从节点能自动切换为主节点。例如,“故障切换”“双机热备”等

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

  • 以提高应用系统的CPU运算速度,扩展硬件资源和分析能力为目标,获得相当于大型、超级计算机的高性能(HPC)能力
  • 高性能依赖于“分布式运算”、“并行运算”,通过专用硬件和软件将多个服务器的CPU、内存等资源整合在一起,实现只有大型、超级计算机才具备的计算能力。例如,”云计算“”网络计算“等

3.负载均衡群集架构

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

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

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

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

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

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

3.1LB Cluster负载均衡集群

3.1.1按实现方式划分
3.1.1.1硬件
  • F5 Big-IP(F5服务器负载均衡模块)
  • Citrix Netscaler
  • A10 A10

3.1.1.2软件
  • lvs:Linux Virtual Server,阿里四层 SLB (Server Load Balance)使用
  • nginx:支持七层调度,阿里七层SLB使用 Tengine
  • haproxy:支持七层调度
  • ats:Apache Traffic Server,yahoo捐助给apache
  • perlbal:Perl 编写
  • pound
3.1.2基于工作的协议层次划分
3.1.2.1传输层(通用)——DNAT和DPORT
  • LVS
  • nginx:stream
  • haproxy:mode tcp

以上三个软件都可以使用四层

SNAT:内网用户可以通过SNAT技术科学上网到达外网;

DNAT:把内网服务共享给公网(公网用户可以访问内网)

3.1.2.2应用层(专用)——针对特定协议(常称为Proxy Server)
  • http:nginx, httpd, haproxy(mode http)
  • fastcgi:nginx, httpd
  • mysql:mysql-proxy, mycat
3.1.3负载均衡的会话保持
  • session sticky:同一用户调度固定服务器   Source IP:LVS sh算法(对某一特定服务而言)  Cookie
  • session replication:每台服务器拥有全部session(复制)  session multicast cluster
  • session server:专门的session服务器(server)  Memcached,Redis

3.2 HA 高可用集群实现

keepalived:vrrp协议

Ais:应用接口规范

  • heartbeat
  • cman+rgmanager(RHCS)
  • coresync_pacemaker

二、LVS 介绍

1.LVS简介

LVS:Linux Virtual Server,负载调度器,内核集成,针对Linux内核开发的负载均衡解决方案;1998年5月,由我国章文嵩(花名正明)博士创建, 阿里的四层SLB(Server Load Balance)是基于LVS+keepalived实现;LVS实际上相当于基于IP地址的虚拟化应用,为基于IP地址和内容请求分发的负载均衡提出了一种高效的解决方法。

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

整个SLB系统由三部分构成:四层负载均衡七层负载均衡控制系统

  • 四层负载均衡,采用开源软件LVS(Linux Virtual Server),并根据云计算需求对其进行定制化;该技术已经在阿里巴巴内部业务全面上线应用2年多
  • 七层负载均衡,采用开源软件Tengine,该技术已经在阿里巴巴内部业务全面上线应用3年多
  • 控制系统,用于配置和监控负载均衡系统

2.LVS工作原理

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

  1. [root@localhost ~]#grep -i -C 10 ipvs /boot/config-3.10.0-693.el7.x86_64
  2. #可以看到编译操作系统时开启或者关闭哪些功能
  3. CONFIG_NETFILTER_XT_MATCH_CPU=m
  4. CONFIG_NETFILTER_XT_MATCH_DCCP=m
  5. CONFIG_NETFILTER_XT_MATCH_DEVGROUP=m
  6. CONFIG_NETFILTER_XT_MATCH_DSCP=m
  7. CONFIG_NETFILTER_XT_MATCH_ECN=m
  8. CONFIG_NETFILTER_XT_MATCH_ESP=m
  9. CONFIG_NETFILTER_XT_MATCH_HASHLIMIT=m
  10. CONFIG_NETFILTER_XT_MATCH_HELPER=m
  11. CONFIG_NETFILTER_XT_MATCH_HL=m
  12. CONFIG_NETFILTER_XT_MATCH_IPRANGE=m
  13. CONFIG_NETFILTER_XT_MATCH_IPVS=m
  14. CONFIG_NETFILTER_XT_MATCH_LENGTH=m
  15. CONFIG_NETFILTER_XT_MATCH_LIMIT=m
  16. CONFIG_NETFILTER_XT_MATCH_MAC=m
  17. CONFIG_NETFILTER_XT_MATCH_MARK=m
  18. CONFIG_NETFILTER_XT_MATCH_MULTIPORT=m
  19. CONFIG_NETFILTER_XT_MATCH_NFACCT=m
  20. CONFIG_NETFILTER_XT_MATCH_OSF=m
  21. CONFIG_NETFILTER_XT_MATCH_OWNER=m
  22. CONFIG_NETFILTER_XT_MATCH_POLICY=m
  23. CONFIG_NETFILTER_XT_MATCH_PHYSDEV=m
  24. --
  25. CONFIG_IP_SET_HASH_NET=m
  26. CONFIG_IP_SET_HASH_NETPORT=m
  27. CONFIG_IP_SET_HASH_NETIFACE=m
  28. CONFIG_IP_SET_LIST_SET=m
  29. CONFIG_IP_VS=m
  30. CONFIG_IP_VS_IPV6=y
  31. # CONFIG_IP_VS_DEBUG is not set
  32. CONFIG_IP_VS_TAB_BITS=12
  33. #
  34. # IPVS transport protocol load balancing support
  35. #
  36. CONFIG_IP_VS_PROTO_TCP=y
  37. CONFIG_IP_VS_PROTO_UDP=y
  38. CONFIG_IP_VS_PROTO_AH_ESP=y
  39. CONFIG_IP_VS_PROTO_ESP=y
  40. CONFIG_IP_VS_PROTO_AH=y
  41. CONFIG_IP_VS_PROTO_SCTP=y
  42. #
  43. # IPVS scheduler
  44. #
  45. CONFIG_IP_VS_RR=m
  46. CONFIG_IP_VS_WRR=m
  47. CONFIG_IP_VS_LC=m
  48. CONFIG_IP_VS_WLC=m
  49. CONFIG_IP_VS_LBLC=m
  50. CONFIG_IP_VS_LBLCR=m
  51. CONFIG_IP_VS_DH=m
  52. CONFIG_IP_VS_SH=m
  53. CONFIG_IP_VS_SED=m
  54. CONFIG_IP_VS_NQ=m
  55. #
  56. # IPVS SH scheduler
  57. #
  58. CONFIG_IP_VS_SH_TAB_BITS=8
  59. #
  60. # IPVS application helper
  61. #
  62. CONFIG_IP_VS_FTP=m
  63. CONFIG_IP_VS_NFCT=y
  64. CONFIG_IP_VS_PE_SIP=m
  65. #
  66. # IP: Netfilter Configuration
  67. #
  68. CONFIG_NF_DEFRAG_IPV4=m
  69. CONFIG_NF_CONNTRACK_IPV4=m

3.LVS功能及组织架构

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

3.1应用于高访问量的业务

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

3.2扩展应用程序

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

3.3消除单点故障

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

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

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

4.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)

VS 代理服务器;RS 真实服务器;VIP 外网IP代理服务器;DIP 内网IP代理服务器;RIP 真实服务器IP

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

5.LVS工作模式和相关命令

5.1LVS集群的工作模式

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

完整请求过程

1.客户端发起请求报文,源IP为客户端IP地址(CIP),目的地址为VIP(代理服务器的外网地址);

2.当数据包到达我们的代理服务器,源IP不变,需要修改目的IP及端口号,此时源IP为客户端IP地址(CIP),目的地址为RIP(后端真实服务器IP);

3.真实服务器收到报文后构建响应报文,此时源IP修改为真实服务器自己的IP(VIP是内网地址),目的地址为CIP(外网客户端地址);

4.此时再发给代理服务器,源IP为代理服务器IP地址(VIP),目的地址为CIP(外网客户端地址)

6.LVS调度算法

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

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

动态服务器根据一个参考值 确定服务器是否忙 这个值越小 代表服务器比较清闲 代表优先级越高 就会优先调度

6.1静态调度算法

  • RR(Roundrobin) 轮询  较为常用
  • WRR(Weighted RR )加权轮询 较为常用
  • SH(Source Hashing)实现Session Sticky,源IP地址hash,将来自于同一个IP地址的请求始终发往第一次挑中的RS,从而实现会话绑定
  • DH(Destination Hashing)目标地址hash,第一次轮询调度至RS,后续将发往同一个目标地址的请求始终转发至第一次挑中的RS,典型使用场景是正向代理缓存场景中的负载均衡,如: Web缓存

6.2动态调度算法

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

  • LC:least connections 适用于长连接应用,不考虑权重
  • Overhead=activeconns*256+inactiveconns
  • WLC:Weighted LC,默认调度方法,较常用(第一轮不合理,第一轮都是一样的优先级)
  • Overhead=(activeconns*256+inactiveconns)/weight
  • SED:Shortest Expection Delay,初始连接高权重优先,只检查活动连接,而不考虑非活动连接,有可能权重小的空闲时间长
  • 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等

6.3其他调度算法

内核版本 4.15 版本后新增调度算法 FO 和 OVF

  • FO(Weighted Fail Over)调度算法,在此FO算法中,遍历虚拟服务所关联的真实服务器链表,找到还未过载(未设置IP_VS_DEST_F_OVERLOAD标志)的且权重最高的真实服务器,进行调度,属于静态算法
  • OVF(Overflow-Connection)调度算法,基于真实服务器的活动连接数量和权重值实现。将新连接调度到权重最高的真实服务器,直到其活动连接数量超过权重值,之后调度到下一个权重值最高的真实服务器,在此OVF算法中,遍历虚拟服务相关联的真实服务器链表,找到权重值最高的可用真实服务器,属于动态算法

一个可用的真实服务器需要通式满足以下条件

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

7.ipvsadm 工具

ipvsadm是实现LVS内核的工具

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

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

1.搭建实验环境

Centos 7-1作为代理服务器;Centos 7-2和Centos 7-3作为后端真实服务器;Centos7-4作为NFS共享存储服务器

  1. [root@localhost ~]#systemctl stop firewalld
  2. [root@localhost ~]#setenforce 0
  3. setenforce: SELinux is disabled
  1. [root@node2 ~]#systemctl stop firewalld
  2. [root@node2 ~]#setenforce 0
  1. [root@node3 ~]#systemctl stop firewalld
  2. [root@node3 ~]#setenforce 0
  1. [root@G ~]#systemctl stop firewalld
  2. [root@G ~]#setenforce 0

2.部署NFS共享存储服务器

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

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

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

持的一种协议。

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

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

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

  1. [root@G ~]#rpm -qa |grep nfs
  2. nfs-utils-1.3.0-0.48.el7.x86_64
  3. nfs4-acl-tools-0.3.3-15.el7.x86_64
  4. libnfsidmap-0.25-17.el7.x86_64
  5. [root@G ~]#systemctl start nfs
  6. [root@G ~]#systemctl status nfs
  7. ● nfs-server.service - NFS server and services
  8. Loaded: loaded (/usr/lib/systemd/system/nfs-server.service; disabled; vendor preset: disabled)
  9. Active: active (exited) since 二 2024-03-05 15:39:44 CST; 3s ago
  10. Process: 37332 ExecStart=/usr/sbin/rpc.nfsd $RPCNFSDARGS (code=exited, status=0/SUCCESS)
  11. Process: 37325 ExecStartPre=/bin/sh -c /bin/kill -HUP `cat /run/gssproxy.pid` (code=exited, status=0/SUCCESS)
  12. Process: 37324 ExecStartPre=/usr/sbin/exportfs -r (code=exited, status=0/SUCCESS)
  13. Main PID: 37332 (code=exited, status=0/SUCCESS)
  14. CGroup: /system.slice/nfs-server.service
  15. 3月 05 15:39:44 G.D systemd[1]: Starting NFS server and services...
  16. 3月 05 15:39:44 G.D systemd[1]: Started NFS server and services.
  17. [root@G ~]#mkdir /benet
  18. [root@G ~]#mkdir /accp
  19. [root@G ~]#vim /etc/exports
  20. [root@G ~]#cat /etc/exports
  21. /benet *
  22. /accp *
  23. [root@G ~]#exportfs -v
  24. [root@G ~]#exportfs -r
  25. exportfs: No options for /benet *: suggest *(sync) to avoid warning
  26. exportfs: No options for /accp *: suggest *(sync) to avoid warning
  27. [root@G ~]#exportfs -v
  28. /benet <world>(ro,sync,wdelay,hide,no_subtree_check,sec=sys,secure,root_squash,no_all_squash)
  29. /accp <world>(ro,sync,wdelay,hide,no_subtree_check,sec=sys,secure,root_squash,no_all_squash)
  30. [root@G ~]#cd /accp/
  31. [root@G accp]#ls
  32. [root@G accp]#echo accp > index.html
  33. [root@G accp]#cat index.html
  34. accp
  35. [root@G accp]#cd /benet/
  36. [root@G benet]#ls
  37. [root@G benet]#echo benet > index.html
  38. [root@G benet]#cat index.html
  39. benet

3.搭建中间件服务器

  1. [root@node2 ~]#yum install httpd -y
  2. [root@node2 ~]#showmount -e 192.168.241.24
  3. Export list for 192.168.241.24:
  4. /accp *
  5. /benet *
  6. [root@node2 ~]#mount 192.168.241.24:/accp /var/www/html
  7. [root@node2 ~]#df
  8. Filesystem 1K-blocks Used Available Use% Mounted on
  9. /dev/mapper/centos-root 52403200 3622304 48780896 7% /
  10. devtmpfs 917604 0 917604 0% /dev
  11. tmpfs 933524 0 933524 0% /dev/shm
  12. tmpfs 933524 17412 916112 2% /run
  13. tmpfs 933524 0 933524 0% /sys/fs/cgroup
  14. /dev/sda1 5232640 182380 5050260 4% /boot
  15. tmpfs 186708 12 186696 1% /run/user/42
  16. tmpfs 186708 0 186708 0% /run/user/0
  17. 192.168.241.24:/accp 52403200 4006912 48396288 8% /var/www/html
  18. [root@node2 ~]#systemctl start httpd
  19. [root@node2 ~]#systemctl status httpd
  20. ● httpd.service - The Apache HTTP Server
  21. Loaded: loaded (/usr/lib/systemd/system/httpd.service; disabled; vendor preset: disabled)
  22. Active: active (running) since Tue 2024-03-05 02:49:04 EST; 8s ago
  23. Docs: man:httpd(8)
  24. man:apachectl(8)
  25. Main PID: 6712 (httpd)
  26. Status: "Processing requests..."
  27. CGroup: /system.slice/httpd.service
  28. ├─6712 /usr/sbin/httpd -DFOREGROUND
  29. ├─6716 /usr/sbin/httpd -DFOREGROUND
  30. ├─6717 /usr/sbin/httpd -DFOREGROUND
  31. ├─6718 /usr/sbin/httpd -DFOREGROUND
  32. ├─6719 /usr/sbin/httpd -DFOREGROUND
  33. └─6720 /usr/sbin/httpd -DFOREGROUND
  34. Mar 05 02:48:09 node2.localdomain systemd[1]: Starting The Apache HTTP Se....
  35. Mar 05 02:48:29 node2.localdomain httpd[6712]: AH00558: httpd: Could not r...
  36. Mar 05 02:49:04 node2.localdomain systemd[1]: Started The Apache HTTP Server.
  37. Hint: Some lines were ellipsized, use -l to show in full.
  1. [root@node3 ~]#yum install httpd -y
  2. [root@node3 ~]#systemctl start httpd
  3. [root@node3 ~]#systemctl status httpd
  4. ● httpd.service - The Apache HTTP Server
  5. Loaded: loaded (/usr/lib/systemd/system/httpd.service; disabled; vendor preset: disabled)
  6. Active: active (running) since 三 2024-03-06 00:03:52 CST; 8s ago
  7. Docs: man:httpd(8)
  8. man:apachectl(8)
  9. Main PID: 37651 (httpd)
  10. Status: "Processing requests..."
  11. CGroup: /system.slice/httpd.service
  12. ├─37651 /usr/sbin/httpd -DFOREGROUND
  13. ├─37653 /usr/sbin/httpd -DFOREGROUND
  14. ├─37654 /usr/sbin/httpd -DFOREGROUND
  15. ├─37655 /usr/sbin/httpd -DFOREGROUND
  16. ├─37656 /usr/sbin/httpd -DFOREGROUND
  17. └─37657 /usr/sbin/httpd -DFOREGROUND
  18. 3月 06 00:03:26 node3.node3 systemd[1]: Starting The Apache HTTP Server...
  19. 3月 06 00:03:52 node3.node3 systemd[1]: Started The Apache HTTP Server.
  20. [root@node3 ~]#mount 192.168.241.24:/benet /var/www/html
  21. [root@node3 ~]#df
  22. 文件系统 1K-块 已用 可用 已用% 挂载点
  23. /dev/mapper/centos-root 52403200 3625648 48777552 7% /
  24. devtmpfs 917604 0 917604 0% /dev
  25. tmpfs 933524 0 933524 0% /dev/shm
  26. tmpfs 933524 9172 924352 1% /run
  27. tmpfs 933524 0 933524 0% /sys/fs/cgroup
  28. /dev/sda1 5232640 182372 5050268 4% /boot
  29. tmpfs 186708 12 186696 1% /run/user/42
  30. tmpfs 186708 0 186708 0% /run/user/0
  31. 192.168.241.24:/benet 52403200 4006912 48396288 8% /var/www/html

测试

  1. [root@localhost ~]#curl 192.168.241.22
  2. accp
  3. [root@localhost ~]#curl 192.168.241.23
  4. benet

4.搭建代理服务器配置 

  1. [root@localhost ~]#cd /etc/sysconfig/network-scripts/
  2. [root@localhost network-scripts]#ls
  3. ifcfg-ens33 ifdown-ppp ifup-ib ifup-Team
  4. ifcfg-lo ifdown-routes ifup-ippp ifup-TeamPort
  5. ifdown ifdown-sit ifup-ipv6 ifup-tunnel
  6. ifdown-bnep ifdown-Team ifup-isdn ifup-wireless
  7. ifdown-eth ifdown-TeamPort ifup-plip init.ipv6-global
  8. ifdown-ib ifdown-tunnel ifup-plusb network-functions
  9. ifdown-ippp ifup ifup-post network-functions-ipv6
  10. ifdown-ipv6 ifup-aliases ifup-ppp
  11. ifdown-isdn ifup-bnep ifup-routes
  12. ifdown-post ifup-eth ifup-sit
  13. [root@localhost network-scripts]#cp ifcfg-ens33 ifcfg-ens36
  14. [root@localhost network-scripts]#vim ifcfg-ens33

[root@localhost network-scripts]#vim ifcfg-ens36

  1. [root@localhost ~]#systemctl restart network
  2. [root@localhost ~]#ip a
  3. 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1
  4. link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
  5. inet 127.0.0.1/8 scope host lo
  6. valid_lft forever preferred_lft forever
  7. inet6 ::1/128 scope host
  8. valid_lft forever preferred_lft forever
  9. 2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
  10. link/ether 00:0c:29:51:4b:b5 brd ff:ff:ff:ff:ff:ff
  11. inet 192.168.241.11/24 brd 192.168.241.255 scope global ens33
  12. valid_lft forever preferred_lft forever
  13. inet6 fe80::de6f:32c8:5a64:a6b2/64 scope link
  14. valid_lft forever preferred_lft forever
  15. 3: virbr0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN qlen 1000
  16. link/ether 52:54:00:53:c1:45 brd ff:ff:ff:ff:ff:ff
  17. inet 192.168.122.1/24 brd 192.168.122.255 scope global virbr0
  18. valid_lft forever preferred_lft forever
  19. 4: virbr0-nic: <BROADCAST,MULTICAST> mtu 1500 qdisc pfifo_fast master virbr0 state DOWN qlen 1000
  20. link/ether 52:54:00:53:c1:45 brd ff:ff:ff:ff:ff:ff
  21. 5: ens36: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
  22. link/ether 00:0c:29:51:4b:bf brd ff:ff:ff:ff:ff:ff
  23. inet 12.0.0.1/24 brd 12.0.0.255 scope global ens36
  24. valid_lft forever preferred_lft forever
  25. inet6 fe80::8cb:b13b:40ac:6df1/64 scope link
  26. valid_lft forever preferred_lft forever
  27. [root@localhost ~]#route -n
  28. Kernel IP routing table
  29. Destination Gateway Genmask Flags Metric Ref Use Iface
  30. 0.0.0.0 192.168.241.11 0.0.0.0 UG 100 0 0 ens33
  31. 0.0.0.0 12.0.0.1 0.0.0.0 UG 101 0 0 ens36
  32. 12.0.0.0 0.0.0.0 255.255.255.0 U 100 0 0 ens36
  33. 192.168.122.0 0.0.0.0 255.255.255.0 U 0 0 0 virbr0
  34. 192.168.241.0 0.0.0.0 255.255.255.0 U 100 0 0 ens33
  35. [root@localhost ~]#sysctl -a|grep ip_forward
  36. net.ipv4.ip_forward = 0
  37. net.ipv4.ip_forward_use_pmtu = 0
  38. sysctl: reading key "net.ipv6.conf.all.stable_secret"
  39. sysctl: reading key "net.ipv6.conf.default.stable_secret"
  40. sysctl: reading key "net.ipv6.conf.ens33.stable_secret"
  41. sysctl: reading key "net.ipv6.conf.ens36.stable_secret"
  42. sysctl: reading key "net.ipv6.conf.lo.stable_secret"
  43. sysctl: reading key "net.ipv6.conf.virbr0.stable_secret"
  44. sysctl: reading key "net.ipv6.conf.virbr0-nic.stable_secret"
  45. [root@localhost ~]#vim /etc/sysctl.conf
  46. [root@localhost ~]#sysctl -p
  47. net.ipv4.ip_forward_use_pmtu = 1

本地yum仓库搭建ipvsadm

  1. [root@localhost ~]#cd /etc/yum.repos.d/
  2. [root@localhost yum.repos.d]#ls
  3. CentOS-Base.repo CentOS-fasttrack.repo CentOS-Vault.repo
  4. CentOS-CR.repo CentOS-Media.repo epel.repo
  5. CentOS-Debuginfo.repo CentOS-Sources.repo epel-testing.repo
  6. [root@localhost yum.repos.d]#mkdir bak
  7. [root@localhost yum.repos.d]#mv *.repo bak/
  8. [root@localhost yum.repos.d]#ls
  9. bak
  10. [root@localhost yum.repos.d]#vim local.repo
  11. [root@localhost yum.repos.d]#cat local.repo
  12. [local]
  13. name=local
  14. baseurl=file:///mnt
  15. gpgcheck=0
  16. [root@localhost yum.repos.d]#yum clean all
  17. [root@localhost yum.repos.d]#yum makecache
  18. [root@localhost yum.repos.d]#mount /dev/sr0 /mnt
  19. mount: /dev/sr0 写保护,将以只读方式挂载
  20. [root@localhost yum.repos.d]#yum install ipvsadm.x86_64 -y
  21. [root@localhost yum.repos.d]#ipvsadm-save > /etc/sysconfig/ipvsadm
  22. [root@localhost yum.repos.d]#systemctl start ipvsadm
  23. [root@localhost yum.repos.d]#systemctl status ipvsadm
  24. ● ipvsadm.service - Initialise the Linux Virtual Server
  25. Loaded: loaded (/usr/lib/systemd/system/ipvsadm.service; disabled; vendor preset: disabled)
  26. Active: active (exited) since 二 2024-03-05 17:19:22 CST; 5s ago
  27. Process: 10518 ExecStart=/bin/bash -c exec /sbin/ipvsadm-restore < /etc/sysconfig/ipvsadm (code=exited, status=0/SUCCESS)
  28. Main PID: 10518 (code=exited, status=0/SUCCESS)
  29. 3月 05 17:19:22 localhost.localdomain systemd[1]: Starting Initialise the...
  30. 3月 05 17:19:22 localhost.localdomain systemd[1]: Started Initialise the ...
  31. Hint: Some lines were ellipsized, use -l to show in full.
  32. [root@localhost yum.repos.d]#ipvsadm -C
  33. [root@localhost yum.repos.d]#ipvsadm -ln
  34. IP Virtual Server version 1.2.1 (size=4096)
  35. Prot LocalAddress:Port Scheduler Flags
  36. -> RemoteAddress:Port Forward Weight ActiveConn InActConn
  37. [root@localhost yum.repos.d]#ipvsadm -A -t 12.0.0.1:80 -s rr
  38. [root@localhost yum.repos.d]#ipvsadm -ln
  39. IP Virtual Server version 1.2.1 (size=4096)
  40. Prot LocalAddress:Port Scheduler Flags
  41. -> RemoteAddress:Port Forward Weight ActiveConn InActConn
  42. TCP 12.0.0.1:80 rr
  43. [root@localhost yum.repos.d]#ipvsadm -a -t 12.0.0.1:80 -r 192.168.241.22:80 -m
  44. [root@localhost yum.repos.d]#ipvsadm -a -t 12.0.0.1:80 -r 192.168.241.23:80 -m
  45. [root@localhost yum.repos.d]#ipvsadm -ln
  46. IP Virtual Server version 1.2.1 (size=4096)
  47. Prot LocalAddress:Port Scheduler Flags
  48. -> RemoteAddress:Port Forward Weight ActiveConn InActConn
  49. TCP 12.0.0.1:80 rr
  50. -> 192.168.241.22:80 Masq 1 0 0
  51. -> 192.168.241.23:80 Masq 1 0 0
[root@node2 ~]#vim /etc/sysconfig/network-scripts/ifcfg-ens33 

  1. [root@node2 ~]#systemctl restart network
  2. [root@node2 ~]#route -n
  3. Kernel IP routing table
  4. Destination Gateway Genmask Flags Metric Ref Use Iface
  5. 0.0.0.0 192.168.241.11 0.0.0.0 UG 100 0 0 ens33
  6. 192.168.122.0 0.0.0.0 255.255.255.0 U 0 0 0 virbr0
  7. 192.168.241.0 0.0.0.0 255.255.255.0 U 100 0 0 ens33
[root@node3 ~]#vim /etc/sysconfig/network-scripts/ifcfg-ens33 

  1. [root@node3 ~]#systemctl restart network
  2. [root@node3 ~]#route -n
  3. Kernel IP routing table
  4. Destination Gateway Genmask Flags Metric Ref Use Iface
  5. 0.0.0.0 192.168.241.11 0.0.0.0 UG 100 0 0 ens33
  6. 192.168.122.0 0.0.0.0 255.255.255.0 U 0 0 0 virbr0
  7. 192.168.241.0 0.0.0.0 255.255.255.0 U 100 0 0 ens33

5.测试 

6.补充

  1. [root@localhost ~]#cat /proc/net/ip_vs
  2. IP Virtual Server version 1.2.1 (size=4096)
  3. Prot LocalAddress:Port Scheduler Flags
  4. -> RemoteAddress:Port Forward Weight ActiveConn InActConn
  5. TCP 0C000001:0050 rr
  6. -> C0A8F117:0050 Masq 1 0 0
  7. -> C0A8F116:0050 Masq 1 0 0
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/盐析白兔/article/detail/820425
推荐阅读
相关标签
  

闽ICP备14008679号