nginx负载均衡
Posted 转角90
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了nginx负载均衡相关的知识,希望对你有一定的参考价值。
目录
负载均衡
- 使用集群是解决高并发、海量数据问题的常用手段
- 增加服务器,分担原有服务器的访问和存储压力,通过负载均衡调度服务器,将访问请求分发到集群中的任何一台服务器上进行处理
upstream
nginx 将请求转发到后台的一组
upstream
服务池
Syntax: upstream name ;
Default: --;
Content: http
upstream hostName1
server 127.0.0.1:3000;
server 127.0.0.1:4000;
server 127.0.0.1:5000;
server
location ~ .*\\.json$
# $http_host 要访问的主机名, $request_uri 请求路径
proxy_pass http://hostName1;
分配方式
-
轮询:默认轮询
upstream hostName1 server 192.168.1.11 down; server 192.168.1.22 backup; server 192.168.1.33 max_fails=1 fail_tiemout=10s;
- down,表示当前 server 已停用;
- backup,表示当前 server 是备用服务器,只有其它非 backup 后端服务器都挂掉了或很忙才会分配请求给它;
- weight,表示当前 server 负载权重,权重越大几率愈高;
- max_fails 和 fail_timeout 一般会关联使用,如果某台 server 在 fail_timeout 时间内出现了 max_fails 次连接失败,那么 Nginx 会认为其已经挂掉,从而在 fail_timeout 时间内不再去请求它,fail_timeout 默认是 10s,max_fails 默认是 1,即默认情况只要是发生错误就认为服务器挂了,如果将 max_fails 设置为 0,则表示取消这项检查。\\
- max_conns: 限制每个 server 最大的接收的连接数,性能高的服务器可以连接数多一些
-
weight:
轮询的加强版,既可以指定轮询比率,weight 和访问几率成正比,主要应用于后端服务器异质的场景下。
upstream hostName1 server 192.168.1.11 weight=1; server 192.168.1.22 weight=2; server 192.168.1.33 weight=3;
-
least_conn:(生产中都会不用)
哪个机器上的连接数少就分发给谁
upstream hostName1 least_conn; server 192.168.1.11:7777; server 192.168.1.22:8888; server 192.168.1.33:9999;
-
ip_hash:(生产中都会不用)
每个请求按照访问 Ip(即 Nginx 的前置服务器或客户端 IP)的 hash 结果分配,这样每个访客会固定访问一个后端服务器,可以解决 session 一致问题。
upstream hostName1 ip_hash; server 192.168.1.11:7777; server 192.168.1.22:8888; server 192.168.1.33:9999;
-
fair(第三方):(生产中都会不用)
公平地按照后端服务器的响应时间(rt)来分配请求,响应时间(rt)小的后端服务器优先分配请求。
upstream hostName1 fair; server 192.168.1.11:7777; server 192.168.1.22:8888; server 192.168.1.33:9999;
-
url_hash(第三方):
按照访问的 URL 地址来分配请求,每个 URL 都定向到同一个后端服务器上
场景:固定资源不在统一服务器上
upstream hostName1 url_hash; server 192.168.1.11:7777; server 192.168.1.22:8888; server 192.168.1.33:9999;
-
自定义 hash
自定义哈希 key
upstream hostName1 hash $request_url; server 192.168.1.11:7777; server 192.168.1.22:8888; server 192.168.1.33:9999;
-
LUA脚本
以上是关于nginx负载均衡的主要内容,如果未能解决你的问题,请参考以下文章