李林超博客
首页
归档
留言
友链
动态
关于
归档
留言
友链
动态
关于
首页
工具
正文
Nginx负载均衡介绍
Leefs
2020-11-22 PM
2418℃
2条
# Nginx负载均衡介绍 ### 一、概念 负载均衡:在服务器集群中,需要有一台服务器作为调度者,客户端所有的请求都由调度者接收,调度者再根据每台服务器的负载情况,将请求分配给对应的服务器去处理; ![11.Nginx负载均衡介绍01.png](https://lilinchao.com/usr/uploads/2020/11/2019036280.png) **目的:**我们需要一个调度者,保证所有后端服务器都将性能充分发挥,从而保持服务器集群的整体性能最优 ### 二、策略 **1、轮询法(默认)** 将请求按顺序轮流地分配到后端服务器上,它均衡地对待后端的每一台服务器,而不关心服务器实际的连接数和当前的系统负载。 ```nginx upstream test-server { server localhost:10001; server localhost:10002; } ``` 注意: - 在轮询中,如果服务器down掉了,会自动剔除该服务器。 - 缺省配置就是轮询策略。 - 此策略适合服务器配置相当,无状态且短平快的服务使用。 **2、加权轮询法** 指定每个服务的权重比例,weight和访问比率成正比,通常用于后端服务机器性能不统一,将性能好的分配权重高来发挥服务器最大性能,如下配置后10002服务的访问比率会是10001服务的二倍。 ```nginx upstream test-server { server localhost:10001 weight=1; server localhost:10002 weight=2; } ``` 注意: + 权重越高分配到的请求越多; + 此策略可以和least_conn策略、iphash策略结合使用; + 此策略比较适合服务器硬件配置差距较大的情况。 **3、源地址哈希法(ip_hash)** 根据获取客户端的IP地址,通过哈希函数计算得到一个数值,用该数值对服务器列表的大小取模运算,得到的结果便是客户端要访问服务器的序号。 采用源地址哈希法进行负载均衡,同IP地址的客户端,当后端服务器列表不变时,它每次都会映射到同一台后端服务器进行访问。 ```nginx upstream test-server { ip_hash; server localhost:10001 weight=1; server localhost:10002 weight=2; } ``` 这个方法确保了相同的客户端请求一致发送到相同的服务器,以保证session会话。这样每个访客都固定访问一个后端服务器,可以解决session不能跨服务器的问题。 注意: - 在nginx版本1.3.1之前,不能在ip_hash中使用权重(weight)。 - ip_hash不能与backup同时使用。 - 此策略适合有状态服务,比如session。 - 当有服务器需要剔除,必须手动down掉。 **4、最小连接数法(least_conn)** 最小连接数法根据后端服务器当前的连接情况,动态地选取其中当前积压连接数最少的一台服务器来处理当前的请求,尽可能地提高后端服务的利用效率,将负责合理地分流到每一台服务器。 ```nginx upstream test-server { least_conn; server localhost:10001 weight=1; server localhost:10002 weight=2; } ``` 注意: + 此策略适合请求处理时间长短不一造成的服务器过载情况。 **5、响应时间法(fair)**第三方 按后端服务器的响应时间来分配请求,响应时间短的优先分配。 ```nginx upstream test-server { server localhost:10001 weight=1; server localhost:10002 weight=2; fair; } ``` **6、url_hash** 第三方 按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,要配合缓存命中来使用。 ```nginx upstream test-server { hash $request_uri; #实现每个url定向到同一个后端服务器 server localhost:10001; server localhost:10002; } ``` 同一个资源多次请求,可能会到达不同的服务器上,导致不必要的多次下载,缓存命中率不高,以及一些资源时间的浪费。而使用url_hash,可以使得同一个url(也就是同一个资源请求)会到达同一台服务器,一旦缓存住了资源,再此收到请求,就可以从缓存中读取。 **后端服务在负载均衡调度中的状态:** ```nginx upstream tomcats { server 127.0.0.1:8080 weight=2 max_fails=3 fail_timeout=15; server 127.0.0.1:8080 down; server 127.0.0.1:8080 backup; } ``` | 参数 | 说明 | | ------------ | ------------------------------------- | | dowm | 当前的server暂时不参与负载均衡 | | backup | 预留的备份服务器 | | max_fails | 允许请求失败的次数 | | fail_timeout | 经过max_fails失败后,服务器暂停的时间 | | max_conns | 限制最大的接收连接数 | *注:以上的配置都是在upstream的时候配置的* ### 三、配置 以轮询为例 ```nginx http { # ... 省略其它配置 upstream tomcats { server 192.168.105.108:8080; server 192.168.105.109:8080; } server { listen 80; location / { proxy_pass http://tomcats; } } # ... 省略其它配置 } ``` **参数说明:** + `proxy_pass http://tomcats`:表示将所有请求转发到tomcats服务器组中配置的某一台服务器上。 + `upstream模块`:配置反向代理服务器组,Nginx会根据配置,将请求分发给组里的某一台服务器 + tomcats:是服务器组的名称 + upstream模块下的server指令:配置处理请求的服务器IP或域名,端口可选,不配置默认使用80端口。 通过上面的配置,Nginx默认将请求依次分配给108,109来处理。
标签:
nginx
非特殊说明,本博所有文章均为博主原创。
如若转载,请注明出处:
https://lilinchao.com/archives/956.html
上一篇
Nginx文件结构和Location配置介绍
下一篇
[转载]图解 Docker 架构
取消回复
评论啦~
提交评论
已有 2 条评论
茂林
不容易啊 我又来了
回复
2020-11-23 17:28
Leefs
博主
@茂林
欢迎,欢迎
回复
2020-11-23 20:10
栏目分类
随笔
2
Java
326
大数据
229
工具
31
其它
25
GO
47
标签云
ajax
Spring
正则表达式
MyBatisX
Docker
二叉树
Spark SQL
Spark Streaming
Java编程思想
Java工具类
CentOS
GET和POST
Spark RDD
Redis
Ubuntu
Map
MyBatis-Plus
递归
Http
Thymeleaf
微服务
Linux
LeetCode刷题
Stream流
线程池
人工智能
前端
序列化和反序列化
JavaWEB项目搭建
nginx
友情链接
申请
范明明
庄严博客
Mx
陶小桃Blog
虫洞
不容易啊 我又来了
欢迎,欢迎