热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Linux学习(第十四周)

第十四周学习内容:lvs和nginx第十四周作业:1、简述LVS调度方案及应用场景。      LVS的调度方案根据其调度时是否考虑服务器当前的负载情况可分为静态和动态。搭建环境,

第十四周学习内容:lvs和nginx

第十四周作业:

1、简述LVS调度方案及应用场景 。

      LVS的调度方案根据其调度时是否考虑服务器当前的负载情况可分为静态和动态。搭建环境,共三台主机,其中一台主机运行LVS作为调度器,另外两台作为RS。为了方便起见,模式就使用LVS-NAT,准备完毕后,访问RS主页情况如下。

      image.png

      静态,仅根据算法本身进行调度。所使用的调度规则有:RR(轮询),按顺序一个包一个主机的分配。

      image.png

      image.png

      WRR(加权轮询),在RR的基础上加上了权重的概念,权重大的被分配的多,权重小的被分配的少。

      image.png

      image.png

      SH(源哈希),不管什么用户都根据源地址将其绑定在某台主机上,当用户第一次请求时依然会以轮询的方式将其分配到某台主机,同时会将用户IP地址做哈希计算,将值与服务器的IP地址绑定记于一张哈希表中,以后该用户再访问时,就将被固定分配到那台主机上了。

      image.png

      image.png

      DH(目的哈希),原理和SH一样,只是将目标地址做哈希计算,并将其与服务器绑定,经常用于正向代理的情况,众多客户使用多台正向代理服务器访问外网,为了提高缓存命中率就将目标地址绑定在某台正向代理服务器上,效果显著。

      image.png

      image.png

      动态,根据后端服务器的负载状态进行分配,负载值被称为overhoad:LC(最少连接),overhoad=活动连接数*256+非活动连接数,负载值小的被分配。

      WLC(加权最少连接),overhoad=(活动*256+非活动)/权重,也是越小越容易被分配,这也是LVS默认的调度规则。

      SED(最短期望延迟),overhoad=(活动+1)*256/权重,已不在考虑费活动连接数,并且把0活动连接数的情况考虑进去了。

      NQ(不排队),SED的升级版,从SED的公式可以看出,有可能会出现负载值差距很大的情况。基于这个问题,NQ就是在SED的基础上,先以轮询的方式一个一个分配,然后再看overhead,尽量不要造成排队的情况。

      除此之外,还有两种动静结合的调度规则LBLC,把动态和DH相结合;LBLCR,带复制功能的LBLC,可以吧忙的服务器上的绑定移一部分到空闲服务器上。

      动态的调度规则不是很好测试。

2、详细描述nginx模块并举例说明。

      上一周的作业中已经介绍过了,nginx作为http服务的常用模块,这里写一下nginx作为反代所使用的模块。

      nginx的静态反代:利用了ngx_http_proxy_module模块。有许多配置指令,最基础的是proxy_pass,将其放在location中表示将此location匹配到的请求反代给后端服务器,在反代的过程中会转换其源目IP地址,所在在跨越网络的环境中也依然可以正常使用。搭建环境:两台主机,一台运行nginx作为反代服务器,一台运行httpd作为web服务器,要求所有对反代服务器的访问会被反代至web服务器。

      定义nginx配置文件,为了不产生冲突,换一个监听端口。表示所有对xiaomao2主机8080端口的访问,都会被反代至身后web服务器主机。

      image.png

      image.png

      再增加一台主机,提供.txt文件。通过配置文件,让反代服务器将.txt结尾的请求反代至这台新的服务器上。

      image.png

      image.png

      可以通过proxy_set_header命令修改发往后端主机的请求报文中的某项请求首部的值,约定俗成的两个可添加的首部为X-Real-IP,表示真正的用户主机IP地址和X-Forwarded-For表示转发主机的IP地址。

      image.png

      再在后端web服务器上,修改日志格式,使其能够记录X-Real-IP这个值。

      image.png

      真正的用户主机IP地址就被记录下来了。

      image.png

      可以通过proxy_cache定义缓存,在http配置段中使用proxy_cache_path定义缓存路径,并且要设置三级目录;keys_zone定义缓存名字和哈希表占内存大小;max_size定义缓存大小;inactive定义缓存项的非活动时间,被定义为非活动的缓存将被自动清除。在server配置段中使用proxy_cache加上缓存名字表示启用缓存;proxy_cache_key表示应用缓存的键,也就是遇到哪种报文使用缓存,后面可以跟$request_uri表示遇到请求报文调用缓存;proxy_cache_methods表示遇到哪种方法会调用缓存;proxy_cache_min_uses表示非活动时间最少活动次数。

      image.png

      image.png

      nginx的动态反代:nginx和httpd一样,自身只能处理静态资源,要响应动态请求需要借助工具,其无法像httpd那样把php做成模块,所以只能用反代的方式,把动态资源请求反代到fpm服务器。这要用到fastcgi模块,配置指令是fastcgi_pass。搭建环境,一台主机运行nginx作为反代服务器,一台主机运行php-fpm作为fpm服务器,并准备好一个php测试页。

      image.png

      image.png

      配置文件添加fastcgi_pass指令,将对.php资源的访问反代至fpm服务器;还有include fastcgi_params,这是个非常重要的配置文件,表示反代时要把部分参数传递给后端fpm服务器,此配置文件的大多数配置选项使用默认即可,个别要改的可单独列出,也可以直接在配置文件中修改,位置是/etc/nginx/fastcgi_params;必须改的一条是fastcgi_param SCRIPT_FILENAME+php文件所在路径。

      image.png

      image.png

      此配置即是使用nginx完成动静分离的操作。

      nginx的七层负载均衡:前面所说的是nginx的反代功能,真正要实现负载均衡,还要借助upstream模块。依靠定义upstream组,将多台服务器放入组中,这个组有组名、调度规则等,然后在使用反代命令时,后面跟上的是upstream组,而不是主机名,就可以实现负载均衡集群了。搭建环境:一台主机运行nginx作为反代服务器,两台主机作为web服务器,并做负载均衡集群。

      配置nginx配置文件

      image.png

      image.png

      在server配置命令后还可以添加指令:(1)weight:指明权重,默认为1,一旦配置了权重规则就自然变为wrr,否则就是rr;(2)max-conns:指明最大并发连接数;(3)max-fails和fail-timeout:用来做健康状态检测,表示失败几次和失败多久则判定其为故障不可用,默认为1此和10秒且开启;(4)backup:在组内其他主机都down掉时,由带有此选项的主机提供web服务,一般用作报错页面;(5)down:在做新版本发布时,要让集群中某台主机慢慢下线,可以把权重设为0,也可以用此选项。

      image.png

      image.png

      在upstream配置段中还可以添加指令:(1)ip_hash:类似sh调度规则,基于ip地址做用户与后端主机的绑定;(2)hash+键:以哪个参数为键做绑定,如:hash $COOKIE,以COOKIE作绑定用户与后端主机;hash $remote_addr,以ip地址做绑定,效果与ip_hash一样;hash $request_uri,表示无论那个用户的请求,只要是相同的URI都绑定到固定的后端服务器上,也就是DH调度规则;(3)keepalive:由于nginx基于7层,也就是要通过套接字进行负载均衡,所以响应速度会慢一些,使用此配置可以做到,无论哪个用户请求,调到后台某主机只使用一个连接,而这个值定义得失最多可维持多少个长连接;(4)least_conn:表示使用lc调度规则,server后加了weight的话就是wlc。

      image.png

      image.png

      nginx的四层负载均衡:四层的负载均衡是lvs的长项,nginx是初涉此领域。要使用nginx的stream模块,因为是四层的负载均衡,所以http配置段就可以不用了,取而代之的是stream配置段。其中依然由server段来做面向客户的配置,要指明监听在哪个端口,代理至哪个upstream组。搭建环境:依然是一台主机运行nginx作为反代服务器,两台主机作为web服务器,并做负载均衡集群。

      配置nginx配置文件

      image.png

      作为四层反代就成功了

      image.png

      当然upstream的指令也都可以使用,可以调整为不同调度规则。

      

      

      

      



推荐阅读
  • 网站访问全流程解析
    本文详细介绍了从用户在浏览器中输入一个域名(如www.yy.com)到页面完全展示的整个过程,包括DNS解析、TCP连接、请求响应等多个步骤。 ... [详细]
  • HTTP(HyperTextTransferProtocol)是超文本传输协议的缩写,它用于传送www方式的数据。HTTP协议采用了请求响应模型。客服端向服务器发送一 ... [详细]
  • 为什么多数程序员难以成为架构师?
    探讨80%的程序员为何难以晋升为架构师,涉及技术深度、经验积累和综合能力等方面。本文将详细解析Tomcat的配置和服务组件,帮助读者理解其内部机制。 ... [详细]
  • 本文介绍了如何利用HTTP隧道技术在受限网络环境中绕过IDS和防火墙等安全设备,实现RDP端口的暴力破解攻击。文章详细描述了部署过程、攻击实施及流量分析,旨在提升网络安全意识。 ... [详细]
  • 本文整理了一份基础的嵌入式Linux工程师笔试题,涵盖填空题、编程题和简答题,旨在帮助考生更好地准备考试。 ... [详细]
  • 本文详细介绍了 Java 网站开发的相关资源和步骤,包括常用网站、开发环境和框架选择。 ... [详细]
  • 2020年9月15日,Oracle正式发布了最新的JDK 15版本。本次更新带来了许多新特性,包括隐藏类、EdDSA签名算法、模式匹配、记录类、封闭类和文本块等。 ... [详细]
  • 本文详细介绍了Java代码分层的基本概念和常见分层模式,特别是MVC模式。同时探讨了不同项目需求下的分层策略,帮助读者更好地理解和应用Java分层思想。 ... [详细]
  • Spring Boot 中配置全局文件上传路径并实现文件上传功能
    本文介绍如何在 Spring Boot 项目中配置全局文件上传路径,并通过读取配置项实现文件上传功能。通过这种方式,可以更好地管理和维护文件路径。 ... [详细]
  • 本文详细介绍了如何使用OpenSSL自建CA证书的步骤,包括准备工作、生成CA证书、生成服务器待签证书以及证书签名等过程。 ... [详细]
  • 在JavaWeb开发中,文件上传是一个常见的需求。无论是通过表单还是其他方式上传文件,都必须使用POST请求。前端部分通常采用HTML表单来实现文件选择和提交功能。后端则利用Apache Commons FileUpload库来处理上传的文件,该库提供了强大的文件解析和存储能力,能够高效地处理各种文件类型。此外,为了提高系统的安全性和稳定性,还需要对上传文件的大小、格式等进行严格的校验和限制。 ... [详细]
  • 在PHP中如何正确调用JavaScript变量及定义PHP变量的方法详解 ... [详细]
  • DVWA学习笔记系列:深入理解CSRF攻击机制
    DVWA学习笔记系列:深入理解CSRF攻击机制 ... [详细]
  • 服务器部署中的安全策略实践与优化
    服务器部署中的安全策略实践与优化 ... [详细]
  • Amoeba 通过优化 MySQL 的读写分离功能显著提升了数据库性能。作为一款基于 MySQL 协议的代理工具,Amoeba 能够高效地处理应用程序的请求,并根据预设的规则将 SQL 请求智能地分配到不同的数据库实例,从而实现负载均衡和高可用性。该方案不仅提高了系统的并发处理能力,还有效减少了主数据库的负担,确保了数据的一致性和可靠性。 ... [详细]
author-avatar
ytm5295526049760
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有