收藏 分享(赏)

nginx 负载均衡宕机配置.doc

上传人:HR专家 文档编号:7552602 上传时间:2019-05-21 格式:DOC 页数:10 大小:162.54KB
下载 相关 举报
nginx 负载均衡宕机配置.doc_第1页
第1页 / 共10页
nginx 负载均衡宕机配置.doc_第2页
第2页 / 共10页
nginx 负载均衡宕机配置.doc_第3页
第3页 / 共10页
nginx 负载均衡宕机配置.doc_第4页
第4页 / 共10页
nginx 负载均衡宕机配置.doc_第5页
第5页 / 共10页
点击查看更多>>
资源描述

1、1. 摘要(1) 结论详细描述了 nginx记录失效节点的 6种状态(time out、connect refuse、500、502、503、504,后四项 5XX需要配置 proxy_next_upstream中的状态才可以生效)、失效节点的触发条件和节点的恢复条件、所有节点失效后 nginx会进行恢复并进行重新监听。(2) Nginx 负载均衡方式介绍Nginx的负载均衡方式一共有 4种:rr(轮询模式)、ip_hash、fair、url_hash。(3) Ngxin 负载均衡和相关反向代理配置内容Nginx负载均衡和与容错相关的反向代理的配置。(4) 获取后端流程后端 server的自动

2、容错流程图。(5) 测试环境和测试结果针对几种错误方式进行自动容错测试。2. 结论(1) nginx 判断节点失效状态Nginx 默认判断失败节点状态以 connect refuse和 time out状态为准,不以HTTP错误状态进行判断失败,因为 HTTP只要能返回状态说明该节点还可以正常连接,所以 nginx判断其还是存活状态;除非添加了 proxy_next_upstream指令设置对404、502、503、504、500 和 time out等错误进行转到备机处理,在 next_upstream过程中,会对 fails进行累加,如果备用机处理还是错误则直接返回错误信息(但 404不进

3、行记录到错误数,如果不配置错误状态也不对其进行错误状态记录),综述,nginx记录错误数量只记录 timeout 、connect refuse、502、500、503、504 这 6种状态,timeout 和 connect refuse是永远被记录错误状态,而 502、500、503、504 只有在配置 proxy_next_upstream后 nginx才会记录这 4种 HTTP错误到 fails中,当fails大于等于 max_fails时,则该节点失效;(2) nginx 处理节点失效和恢复的触发条件nginx可以通过设置 max_fails(最大尝试失败次数)和 fail_time

4、out(失效时间,在到达最大尝试失败次数后,在 fail_timeout的时间范围内节点被置为失效,除非所有节点都失效,否则该时间内,节点不进行恢复)对节点失败的尝试次数和失效时间进行设置,当超过最大尝试次数或失效时间未超过配置失效时间,则 nginx会对节点状会置为失效状态,nginx 不对该后端进行连接,直到超过失效时间或者所有节点都失效后,该节点重新置为有效,重新探测;(3) 所有节点失效后 nginx 将重新恢复所有节点进行探测如果探测所有节点均失效,备机也为失效时,那么 nginx会对所有节点恢复为有效,重新尝试探测有效节点,如果探测到有效节点则返回正确节点内容,如果还是全部错误,那

5、么继续探测下去,当没有正确信息时,节点失效时默认返回状态为 502,但是下次访问节点时会继续探测正确节点,直到找到正确的为止。3. nginx 负载均衡Nginx的负载均衡方式一共有 4种:rr(轮询模式)、ip_hash、fair、url_hash;Nginx自带的 2种负载均衡为 rr和 ip_hash,fair 和 url_hash为第三方的插件,nginx在不配置负载均衡的模式下,默认采用 rr负载均衡模式。 RR 负载均衡模式:每个请求按时间顺序逐一分配到不同的后端服务器,如果超过了最大失败次数后(max_fails,默认 1),在失效时间内(fail_timeout,默认 10秒)

6、,该节点失效权重变为 0,超过失效时间后,则恢复正常,或者全部节点都为 down后,那么将所有节点都恢复为有效继续探测,一般来说 rr可以根据权重来进行均匀分配。 Ip_hash 负载均衡模式:每个请求按访问 ip的 hash结果分配,这样每个访客固定访问一个后端服务器,可以解决 session的问题,但是 ip_hash会造成负载不均,有的服务请求接受多,有的服务请求接受少,所以不建议采用 ip_hash模式,session 共享问题可用后端服务的session共享代替 nginx的 ip_hash。 Fair(第三方)负载均衡模式:按后端服务器的响应时间来分配请求,响应时间短的优先分配。

7、url_hash(第三方)负载均衡模式:和 ip_hash算法类似,是对每个请求按 url的 hash结果分配,使每个 URL定向到一个同 一个后端服务器,但是也会造成分配不均的问题,这种模式后端服务器为缓存时比较好。4. Nginx 负载均衡配置Nginx的负载均衡采用的是 upstream模块其中默认的采用的负载均衡模式是轮询模式 rr(round_robin),具体配置如下:1) 指令:ip_hash语法:ip_hash 默认值:none 使用字段:upstream 这个指令将基于客户端连接的 IP地址来分发请求。哈希的关键字是客户端的 C类网络地址,这个功能将保证这个客户端请求总是被转

8、发到一台服务器上,但是如果这台服务器不可用,那么请求将转发到另外的服务器上,这将保证某个客户端有很大概率总是连接到一台服务器。无法将权重(weight)与 ip_hash联合使用来分发连接。如果有某台服务器不可用,你必须标记其为“down”,如下例:upstream backend ip_hash;server ;server ;server down;server ;server语法:server name parameters 默认值:none 使用字段:upstream 指定后端服务器的名称和一些参数,可以使用域名,IP,端口,或者 unix socket。如果指定为域名,则首先将其解

9、析为 IP。 weight = NUMBER - 设置服务器权重,默认为 1。 max_fails = NUMBER - 在一定时间内(这个时间在 fail_timeout 参数中设置)检查这个服务器是否可用时产生的最多失败请求数,默认为 1,将其设置为 0 可以关闭检查,这些错误在 proxy_next_upstream 或 fastcgi_next_upstream(404 错误不会使 max_fails 增加)中定义。 fail_timeout = TIME - 在这个时间内产生了 max_fails 所设置大小的失败尝试连接请求后这个服务器可能不可用,同样它指定了服务器不可用的时间(在

10、下一次尝试连接请求发起之前),默认为 10 秒,fail_timeout 与前端响应时间没有直接关系,不过可以使用proxy_connect_timeout 和 proxy_read_timeout 来控制。 down - 标记服务器处于离线状态,通常和 ip_hash 一起使用。 backup - (0.6.7 或更高)如果所有的非备份服务器都宕机或繁忙,则使用本服务器(无法和 ip_hash 指令搭配使用)。示例配置upstream backend server weight=5;server 127.0.0.1:8080 max_fails=3 fail_timeout=30s;ser

11、ver unix:/tmp/backend3;注意:如果你只使用一台上游服务器,nginx 将设置一个内置变量为 1,即 max_fails和 fail_timeout参数不会被处理。结果:如果 nginx不能连接到上游,请求将丢失。解决:使用多台上游服务器。upstream语法:upstream name 默认值:none 使用字段:http 这个字段设置一群服务器,可以将这个字段放在 proxy_pass和 fastcgi_pass指令中作为一个单独的实体,它们可以可以是监听不同端口的服务器,并且也可以是同时监听 TCP和 Unix socket的服务器。服务器可以指定不同的权重,默认为

12、1。示例配置upstream backend server weight=5;server 127.0.0.1:8080 max_fails=3 fail_timeout=30s;server unix:/tmp/backend3;请求将按照轮询的方式分发到后端服务器,但同时也会考虑权重。在上面的例子中如果每次发生 7个请求,5 个请求将被发送到,其他两台将分别得到一个请求,如果有一台服务器不可用,那么请求将被转发到下一台服务器,直到所有的服务器检查都通过。如果所有的服务器都无法通过检查,那么将返回给客户端最后一台工作的服务器产生的结果。2) 变量版本 0.5.18以后,可以通过 log_m

13、odule中的变量来记录日志:log_format timing $remote_addr - $remote_user $time_local $request upstream_response_time $upstream_response_time msec $msec request_time $request_time;log_format up_head $remote_addr - $remote_user $time_local $request upstream_http_content_type $upstream_http_content_type; $upstream

14、_addr前端服务器处理请求的服务器地址 $upstream_cache_status0.8.3版本中其值可能为:MISS EXPIRED - expired。请求被传送到后端。UPDATING - expired。由于 proxy/fastcgi_cache_use_stale正在更新,将使用旧的应答。STALE - expired。由于 proxy/fastcgi_cache_use_stale,后端将得到过期的应答。HIT $upstream_status前端服务器的响应状态。 $upstream_response_time前端服务器的应答时间,精确到毫秒,不同的应答以逗号和冒号分开。

15、$upstream_http_$HEADER随意的 HTTP协议头,如:$upstream_http_host $upstream_http_host3) Proxy 指令:proxy_next_upstream语法:proxy_next_upstreamerror|timeout|invalid_header|http_500|http_502|http_503|http_504|http_404|off 默认值:proxy_next_upstream error timeout 使用字段:http, server, location 确定在何种情况下请求将转发到下一个服务器:error -

16、 在连接到一个服务器,发送一个请求,或者读取应答时发生错误。timeout - 在连接到服务器,转发请求或者读取应答时发生超时。invalid_header - 服务器返回空的或者错误的应答。http_500 - 服务器返回 500代码。http_502 - 服务器返回 502代码。http_503 - 服务器返回 503代码。http_504 - 服务器返回 504代码。http_404 - 服务器返回 404代码。off - 禁止转发请求到下一台服务器。转发请求只发生在没有数据传递到客户端的过程中。其中记录到 nginx后端错误数量的有 500、502、503、504、timeout,40

17、4 不记录错误。proxy_connect_timeout语法:proxy_connect_timeout timeout_in_seconds 默认值:proxy_connect_timeout 60s 使用字段:http, server, location 指定一个连接到代理服务器的超时时间,单位为秒,需要注意的是这个时间最好不要超过 75秒。这个时间并不是指服务器传回页面的时间(这个时间由 proxy_read_timeout声明)。如果你的前端代理服务器是正常运行的,但是遇到一些状况(例如没有足够的线程去处理请求,请求将被放在一个连接池中延迟处理),那么这个声明无助于服务器去建立连接。

18、可以通过指定时间单位以免引起混乱,支持的时间单位有”s”(秒), “ms”(毫秒), “y”(年), “M”(月), “w”(周), “d”(日), “h”(小时),和 “m”(分钟)。这个值不能大于 597小时。proxy_read_timeout语法:proxy_read_timeout time 默认值:proxy_read_timeout 60s 使用字段:http, server, location 决定读取后端服务器应答的超时时间,单位为秒,它决定 nginx将等待多久时间来取得一个请求的应答。超时时间是指完成了两次握手后并且状态为 established的超时时间。相对于 pro

19、xy_connect_timeout,这个时间可以扑捉到一台将你的连接放入连接池延迟处理并且没有数据传送的服务器,注意不要将此值设置太低,某些情况下代理服务器将花很长的时间来获得页面应答(例如如当接收一个需要很多计算的报表时),当然你可以在不同的 location里面设置不同的值。可以通过指定时间单位以免引起混乱,支持的时间单位有”s”(秒), “ms”(毫秒), “y”(年), “M”(月), “w”(周), “d”(日), “h”(小时),和 “m”(分钟)。这个值不能大于 597小时。proxy_send_timeout语法:proxy_send_timeout seconds 默认值:

20、proxy_send_timeout 60s 使用字段:http, server, location 设置代理服务器转发请求的超时时间,单位为秒,同样指完成两次握手后的时间,如果超过这个时间代理服务器没有数据转发到被代理服务器,nginx 将关闭连接。可以通过指定时间单位以免引起混乱,支持的时间单位有”s”(秒), “ms”(毫秒), “y”(年), “M”(月), “w”(周), “d”(日), “h”(小时),和 “m”(分钟)。这个值不能大于 597小时。5. 获取后端流程GET_RR_PEER: 通过 RR算法获取后端流程K:是判断 peer是否宕机和判断失效状态算法FAIL:尝试次数

21、用尽有,跳转到失败流程,如果有备机,备机再尝试监听,如果监听失败则返回 NGX_BUSY,成功则返回当前状态。6. 测试环境操作系统:centos5.6Cpu:16核内存:32gWeb 服务器:nginxWeb 应用服务器:tomcat(2 台)7. 测试结果 设置 tomcat1 超时时间,造成超时状态(总有一台 server 为有效状态):Tomcat1的 connectionTimeout 设置为-1,永远超时,nginx 设置 tomcat1和tomcat2权重为 10,tomcat1 的 max_fails为 10,fail_timeout=120;在连接 tomcat1的 10次后

22、,返回给 nginx为 10次超时,ngxin 判断 tomcat1为失效,然后将 tomcat1超时时间恢复为 1000重新启动 tomcat1,在这段时间内 nginx判断 tomcat1还是失效状态,所以在 2分钟后,nginx 继续监听到 tomcat1正常后,那么 nginx会将 tomcat1判断为有效,将连接继续均匀分配到 2个 tomcat上。 设置 tomcat1 连接数量,造成超时状态(总有一台 server 为有效状态):Tomcat1的线程数量设置为 1,nginx 设置 tomcat1和 tomcat2权重为10,tomcat1 的 max_fails为 10,fai

23、l_timeout=120;在连接 tomcat1超过线程接受数量后,tomcat1 会返回超时状态,在返回给 nginx10次超时状态后,ngxin 判断tomcat1为失效,然后将 tomcat线程数量恢复为 700,重新启动 tomcat1,在这段时间内 nginx判断 tomcat1还是失效状态,超过 2分钟失效后,nginx 继续监听到 tomcat1正常后,那么 nginx会将 tomcat1判断为有效,将连接继续均匀分配到 2个 tomcat上。 设置 tomcat1 关闭,造成拒绝状态(总有一台 server 为有效状态):Tomcat1为关闭,nginx 设置 tomcat1

24、和 tomcat2权重为 10,tomcat1 的max_fails为 10,fail_timeout=120;在连接 tomcat1的 10次后,nginx 收到tomcat1返回 connect refuse状态,ngxin 判断 tomcat1为失效,然后重新启动tomcat1,在这段时间内 nginx判断 tomcat1还是失效状态,超过 2分钟失效后,nginx继续监听到 tomcat1正常后,那么 nginx会将 tomcat1判断为有效,将连接继续均匀分配到 2个 tomcat上。 设置 tomcat1 在 nginx1 标记失效,tomcat1 恢复正常,在 nginx 失效范

25、围内,将全部服务变为失效,然后重启:Tomcat1为关闭,nginx 设置 tomcat1和 tomcat2权重为 10,tomcat1 的max_fails为 10,fail_timeout=120;在连接 tomcat1的 10次后,nginx 收到tomcat1返回 connect refuse状态,ngxin 判断 tomcat1为失效,然后重新启动tomcat1,在这段时间内 nginx判断 tomcat1还是失效状态,然后将 tomcat2关闭,然后重启 tomcat2,由于所有服务均失效,所以 nginx 将所有服务重新置为有效进行监听,然后将 2连接均匀分布到了 tomcat1和 tomcat2上。 http 错误状态,nginx 是否记录失效:nginx设置 tomcat1和 tomcat2权重为 10,tomcat1 的 max_fails为10,fail_timeout=120;配置 proxy_next_upstream 500、404、502、503、504、timeout 后,当 HTTP状态为500、502、503、504(timeout 和 refuse默认是记录失效的)时,nginx 会判断该次请求为失败记录失败状态,其他所有 HTTP均不记录失败

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报