乐趣区

关于服务器:nginx负载均衡策略你知道多少

作者:烧鸡太子爷

起源:恒生 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 的程序轮训??

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 的配置

发送申请

咱们利用 postman 工具间断发送 6 次

查看后果

依据后果咱们能够看到,6 次申请别离权重的 weight= 1 的机器上申请了 2 次,权重 weight= 2 的机器上轮训了 4 次。

好了,本次就总结到这里,前面咱们有工夫的话能够跟大家一起聊聊,upstream 的实现原理,有趣味的能够在下方给我留言哦

参考

官网:http://nginx.org/en/docs/http…

退出移动版