写点什么

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

  • 2021 年 12 月 07 日
  • 本文字数:897 字

    阅读完需:约 3 分钟

作者:烧鸡太子爷

来源:恒生LIGHT云社区

简介

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


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

upstream 中的常用参数

官方支持的分配方式

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 的顺序轮训??


3968

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


3969


发送请求


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


3970


查看结果


3971


3973


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


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

参考

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

发布于: 19 小时前阅读数: 7
用户头像

还未添加个人签名 2018.11.07 加入

还未添加个人简介

评论

发布
暂无评论
nginx负载均衡策略你知道多少?