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脚本

posted @ 2023-06-23 01:32  转角90  阅读(14)  评论(0编辑  收藏  举报