ITPub博客

首页 > 自动化运维 > 应用服务器 > nginx负载均衡策略你知道多少?

nginx负载均衡策略你知道多少?

原创 应用服务器 作者:恒生LIGHT云社区 时间:2021-12-07 15:05:49 0 删除 编辑

作者:烧鸡太子爷

来源: 恒生LIGHT云社区

简介

nginx做反向代理在我们开发运维的同志日常生活中已经非常常见,当我们后端有多台服务的时候还可以用nginx做负债均衡,而upstream模块就是其中的核心模块。

近期需要针对两台机器的集群做一个测试,而由于两台服务的CPU和内存差距很大(一台4C8G,一台8C16G),导致原先默认的轮训的配置就无法使用,期望实现权重的负载均衡策略,就对nginx的upstream模块做了一些笔记,跟大家一起分享一下

upstream中的常用参数

常用参数 参数作用
server 负载均衡后端的服务器的IP或域名,不写端口默认是80,高并发场景用域名,再通过DNS进行负载均衡
weight 后端服务器的权重,默认为1,权重越大接收的请求越多,比如:weight=2
max_fails 检查节点的健康状态并允许请求失败的次数,达到该次数将节点下线,默认为1,0表示禁止失败尝试,例如:max_fails=3
fail_timeout max_fails失败次数达到限制后暂停该节点服务器时间,默认是10秒。
backup 热备配置,当服务池中所有的服务器出现问题后会自动上线backup服务器。
down 标志服务器不可用,不参与负载均衡,这个参数通常配合IP_HASH使用。
max_conns 限制最大连接数,通常对后端服务器硬件不一致的情况进行配置。
keepalive 限制空闲长连接的最大数量。
keepalive_timeout 空闲长连接的最长保持时间。
keepalive_requests 每个长连接最多可以处理的请求数。

官方支持的分配的方式

1、轮询

轮询是upstream的默认分配的方式,即每个请求按照时间顺序轮流分配到不同的后端服务器,如果某个后端服务器down掉后,能自动剔除。

2、weight

weight就是轮询的加强版,即可以指定轮询比率,weight和访问几率成正比,主要应用于后端服务器配置差异较大的情况下,后面会举例。

upstream backend_developer {


  ip_hash

  server 172.27.26.174:8099 weight=2;

  server 172.27.26.243:8099 weight=1;

}

搜索百度前面的所有举例权重都是1,2,3的排名方式,反而让人疑惑,是按1,2,3的顺序轮训??

1.png

3、ip_hash

每个请求按照访问ip(即Nginx的前置服务器或者客户端IP)的hash结果分配,这样每个访客会固定访问一个后端服务器,可以解决session一致问题。这个存在的问题就是比如某一个部门在一个出口IP段内,这样就会造成可能整个部门的都在访问某一台服务器,造成服务不均衡

upstream backend_developer {


  ip_hash

  server 172.27.26.174:8099;

  server 172.27.26.243:8099;

}

实战

前面也说到,我们是一台4C8G+一台8C16G的机器,单台性能压测的结果是8C的机器的tps是4C的机器的2倍,所以我们需要将两台机器的权重为2:1(即3次请求,有一次请求在4C的机器,有两次请求会在8C的机器)

nginx的配置

2.png

发送请求

我们利用postman工具连续发送6次

3.png

查看结果

4.png

5.png

根据结果我们可以看到,6次请求分别权重的weight=1的机器上请求了2次,权重weight=2的机器上轮训了4次。

好了,本次就总结到这里,后面我们有时间的话可以跟大家一起聊聊,upstream的实现原理,有兴趣的可以在下方给我留言哦

参考

官网: http://nginx.org/en/docs/http/ngx_http_upstream_module.html


来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/70001864/viewspace-2846258/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2021-06-09

  • 博文量
    135
  • 访问量
    93928