作者:ytm5295526049760 | 来源:互联网 | 2023-06-06 00:15
第十四周学习内容:lvs和nginx第十四周作业:1、简述LVS调度方案及应用场景。 LVS的调度方案根据其调度时是否考虑服务器当前的负载情况可分为静态和动态。搭建环境,
第十四周学习内容:lvs和nginx
第十四周作业:
1、简述LVS调度方案及应用场景 。
LVS的调度方案根据其调度时是否考虑服务器当前的负载情况可分为静态和动态。搭建环境,共三台主机,其中一台主机运行LVS作为调度器,另外两台作为RS。为了方便起见,模式就使用LVS-NAT,准备完毕后,访问RS主页情况如下。
静态,仅根据算法本身进行调度。所使用的调度规则有:RR(轮询),按顺序一个包一个主机的分配。
WRR(加权轮询),在RR的基础上加上了权重的概念,权重大的被分配的多,权重小的被分配的少。
SH(源哈希),不管什么用户都根据源地址将其绑定在某台主机上,当用户第一次请求时依然会以轮询的方式将其分配到某台主机,同时会将用户IP地址做哈希计算,将值与服务器的IP地址绑定记于一张哈希表中,以后该用户再访问时,就将被固定分配到那台主机上了。
DH(目的哈希),原理和SH一样,只是将目标地址做哈希计算,并将其与服务器绑定,经常用于正向代理的情况,众多客户使用多台正向代理服务器访问外网,为了提高缓存命中率就将目标地址绑定在某台正向代理服务器上,效果显著。
动态,根据后端服务器的负载状态进行分配,负载值被称为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服务器主机。
再增加一台主机,提供.txt文件。通过配置文件,让反代服务器将.txt结尾的请求反代至这台新的服务器上。
可以通过proxy_set_header命令修改发往后端主机的请求报文中的某项请求首部的值,约定俗成的两个可添加的首部为X-Real-IP,表示真正的用户主机IP地址和X-Forwarded-For表示转发主机的IP地址。
再在后端web服务器上,修改日志格式,使其能够记录X-Real-IP这个值。
真正的用户主机IP地址就被记录下来了。
可以通过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表示非活动时间最少活动次数。
nginx的动态反代:nginx和httpd一样,自身只能处理静态资源,要响应动态请求需要借助工具,其无法像httpd那样把php做成模块,所以只能用反代的方式,把动态资源请求反代到fpm服务器。这要用到fastcgi模块,配置指令是fastcgi_pass。搭建环境,一台主机运行nginx作为反代服务器,一台主机运行php-fpm作为fpm服务器,并准备好一个php测试页。
配置文件添加fastcgi_pass指令,将对.php资源的访问反代至fpm服务器;还有include fastcgi_params,这是个非常重要的配置文件,表示反代时要把部分参数传递给后端fpm服务器,此配置文件的大多数配置选项使用默认即可,个别要改的可单独列出,也可以直接在配置文件中修改,位置是/etc/nginx/fastcgi_params;必须改的一条是fastcgi_param SCRIPT_FILENAME+php文件所在路径。
此配置即是使用nginx完成动静分离的操作。
nginx的七层负载均衡:前面所说的是nginx的反代功能,真正要实现负载均衡,还要借助upstream模块。依靠定义upstream组,将多台服务器放入组中,这个组有组名、调度规则等,然后在使用反代命令时,后面跟上的是upstream组,而不是主机名,就可以实现负载均衡集群了。搭建环境:一台主机运行nginx作为反代服务器,两台主机作为web服务器,并做负载均衡集群。
配置nginx配置文件
在server配置命令后还可以添加指令:(1)weight:指明权重,默认为1,一旦配置了权重规则就自然变为wrr,否则就是rr;(2)max-conns:指明最大并发连接数;(3)max-fails和fail-timeout:用来做健康状态检测,表示失败几次和失败多久则判定其为故障不可用,默认为1此和10秒且开启;(4)backup:在组内其他主机都down掉时,由带有此选项的主机提供web服务,一般用作报错页面;(5)down:在做新版本发布时,要让集群中某台主机慢慢下线,可以把权重设为0,也可以用此选项。
在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。
nginx的四层负载均衡:四层的负载均衡是lvs的长项,nginx是初涉此领域。要使用nginx的stream模块,因为是四层的负载均衡,所以http配置段就可以不用了,取而代之的是stream配置段。其中依然由server段来做面向客户的配置,要指明监听在哪个端口,代理至哪个upstream组。搭建环境:依然是一台主机运行nginx作为反代服务器,两台主机作为web服务器,并做负载均衡集群。
配置nginx配置文件
作为四层反代就成功了
当然upstream的指令也都可以使用,可以调整为不同调度规则。