美文网首页
nginx的负载均衡

nginx的负载均衡

作者: 编码之路从零开始 | 来源:发表于2019-10-17 10:20 被阅读0次

    本文来自 http://nginx.org/en/docs/http/load_balancing.html#nginx_load_balancing_methods

    1. 简介

    跨多个应用实例的负载均衡(load balancing)是优化资源利用率(optimizing resource utilization),最大化吞吐量(maximizing throughput),减少延迟(reducing latency),确保容错配置(ensuring fault-tolerant configurations)的通用方法。

    可以使用nginx作为一个非常有效的HTTP负载均衡器,将流量分配到多个应用服务器,并使用nginx提高web应用程序的性能可伸缩性可靠性

    2. 负载均衡策略

    nginx支持以下负载均衡策略(或方法):

    • 轮询(round-robin)—— 将请求以轮询的方式分发给服务器
    • 最少连接(least-connected)—— 将请求分配给活动连接最少的服务器
    • IP 哈希(ip-hash)—— 使用一个hash函数(基于客户机的IP地址)来确定请求应该分发给哪个服务器。

    2.1. 默认负载均衡配置

    http {
        upstream myapp1 {
            server srv1.example.com;
            server srv2.example.com;
            server srv3.example.com;
        }
        server {
            listen 80;
            location / {
                proxy_pass http:\\myapp1;  // 这里应该是 http://myapp1 但是我不会转格式 
            }
        }
    }
    

    在上面的示例中,同一个应用程序有3个实例运行在srv1-srv3上。如果没有特别配置负载均衡策略,则默认为轮询。所有请求都代理到服务器组myapp1, nginx应用HTTP负载均衡来分发请求。

    nginx中的反向代理实现包括HTTP、HTTPS、FastCGI、uwsgi、SCGI、memcached和gRPC的负载平衡。

    在为FastCGI、uwsgi、SCGI、memcached或gRPC设置负载均衡时,分别使用fastcgi_pass、uwsgi_pass、scgi_pass、memcached_pass和grpc_pass指令。

    2.2. 最少连接负载均衡

    upstream myapp1 {
        least_conn;
        server srv1.example.com;
        server srv2.example.com;
        server srv3.example.com;
    }
    

    2.3. 持久性会话

    请注意,通过轮询或最少连接的负载均衡,每个客户机的请求可能分布到不同的服务器。不能保证将相同客户机的请求定向到特定的服务器
    如果需要将客户机绑定到特定的服务器——换句话说,使客户机的会话具有“粘性”或“持久性”,以便总是选择特定的服务器——那么可以使用ip-hash负载均衡机制
    使用ip-hash时,将客户机的IP地址用作散列key,以确定应该为客户机请求选择服务器组中的哪个服务器。此方法确保来自同一客户机的请求总是指向同一服务器,除非该服务器不可用

    upstream myapp1 {
        ip_hash;
        server srv1.example.com;
        server srv2.example.com;
        server srv3.example.com;
    }
    

    2.4. 加权负载均衡

    还可以通过使用服务器权重进一步影响nginx负载均衡算法。
    在上面的示例中,没有配置服务器权重,这意味着对于特定的负载均衡策略,所有的服务器都被同等对待。
    特别是对于轮循,它还意味着请求在服务器上的分布是均等的——只要有足够的请求,并且当请求以统一的方式处理并足够快地完成时。
    当为服务器指定权重参数时,该权值将作为负载均衡决策的一部分

    upstream myapp1 {
        server srv1.example.com weight=3;
        server srv2.example.com;
        server srv3.example.com;
    }
    

    3. 健康检查

    nginx中的反向代理实现包括 in-band(或 passive)服务器健康检查。如果来自特定服务器的响应失败并出现错误,nginx会将此服务器标记为 failed,并暂时避免为后续的请求选择此服务器。

    max_failed 指令设置在 fail_timeout 期间尝试与服务器通信的连续失败次数。默认情况下,max_failed设置为1。将其设置为0时,将禁用此服务器的健康检查。fail_timeout参数还定义了服务器被标记为 failed 的时间长度。在服务器故障之后的 fail_timeout 时间间隔之后,nginx将开始使用活动客户机请求优雅地探测服务器 。如果探测成功,则将服务器标记为活动的探测。

    相关文章

      网友评论

          本文标题:nginx的负载均衡

          本文链接:https://www.haomeiwen.com/subject/phxmmctx.html