ICode9

精准搜索请尝试: 精确搜索
首页 > 系统相关> 文章详细

Nginx Http 负载均衡

2021-08-03 11:02:23  阅读:165  来源: 互联网

标签:负载 Http server Nginx upstream 服务 com example backend


文章目录

一、概述

将流量负载均衡到多个应用实例是一个优化资源利用率的常规技术,可以最大化吞吐量,减少延迟并且提高容错性。

二、将Http流量代理到一组服务

为了使用nginx将http流量负载均衡到一组服务,你首先需要通过 upstream 指令定义一组服务,该指令应放在http模块内。upstream内的单个服务通过server指令进行指定,指定的值可以是IP也可以是域名,例如以下配置定义了一个名为backend的一组服务,由三个服务组成:

http {
    upstream backend {
        server backend1.example.com weight=5;
        server backend2.example.com;
        server 192.0.0.1 backup;
    }
}

一组服务定义好之后,便可以通过反向代理配置将一个请求代理到该组服务,如下所示:

server {
    location / {
        proxy_pass http://backend;
    }
}

三、选择一种负载均衡方式

nginx支持4种负载均衡方式:

1、循环分发
请求会根据每个服务的权重被均匀的分发到各个服务,权重越大,分发的时候就会被优先考虑,该方式也是默认方式,因此不需要在配置中明确指定使用此种方式。

2、最少连接
每次请求会结合权重分发给连接最少的服务,需要在upstream中使用least_conn进行指定使用此种方式:

upstream backend {
    least_conn;
    server backend1.example.com;
    server backend2.example.com;
}

3、IP哈希
此种方式下,请求分发给哪一个服务取决于请求客户端的IP地址,IP地址会被用来计算出一个hash值,根据hash值再决定分发给哪一个服务,因此该方式的特点是同一个客户端IP的请求会被分发到同一个服务,该方式需要在upstream中使用ip_hash进行指定:

upstream backend {
    ip_hash;
    server backend1.example.com;
    server backend2.example.com;
}

如果服务组中的某一个服务需要临时下线,可以在最后将其标记一个down,请求就会跳过该服务而分发给下一个:

upstream backend {
    server backend1.example.com;
    server backend2.example.com;
    server backend3.example.com down;
}

4、通用哈希
请求会分发给哪一个服务由用户定义的键确定,该键可以是文本字符串、变量或它们的组合。例如,键可以是成对的源 IP 地址和端口,或 URI,如本例所示:

upstream backend {
    hash $request_uri consistent;
    server backend1.example.com;
    server backend2.example.com;
}

上例中,指定将请求URI作为键,也就是说具体分发给哪一个服务,会由请求的URI经过hash后得到的值决定。hash 指令的可选参数consistent用于指定是否 启用ketama 一致性哈希负载平衡。如果启用,请求根据用户定义的散列键值均匀分发给所有服务。

四、服务权重

默认情况下,nginx在循环分发时,如果没有给服务指定权重,它们的权重都默认为1,要修改的话可以使用weight进行配置:

upstream backend {
    server backend1.example.com weight=5;
    server backend2.example.com;
    server 192.0.0.1 backup;
}

上例中,backend1.example.com的权重被配置为5,backend2.example.com为默认权重1,而192.0.0.1被标记为backup(不接受请求),意味着6次请求中,5次会分发给backend1.example.com,1次分发给backend2.example.com

标签:负载,Http,server,Nginx,upstream,服务,com,example,backend
来源: https://blog.csdn.net/qq_38515961/article/details/119343104

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有