Nginx负载平衡详解

下面将先容Nginx开源版内置的4种负载平衡计策和2种三方负载平衡计策,他们别离是:

轮询

最少毗连数

ip_hash

hash

fair

consistent_hash

本文只是展示了部门nginx实现负载平衡时可以利用的计策模块,别的在nginx贸易版中还存在其他内置的计策模块。负载平衡的三方计策可以在三方模块列表这里找到。

轮询 默认环境

nginx将所有请求匀称的分给集群中的每台处事器。

upstream test { server 127.0.0.1:7001; # 等同于server 127.0.0.1:7001 weight=1; server 150.109.118.85:7001; # 等同于server 150.109.118.85:7001 weight=1; } server { listen 8081; server_name localhost; location / { proxy_pass ; } }

upstream:界说一个处事集群。
proxy_pass: 将匹配的请求署理转发到proxy_pass后头设置的处事上,这里因为需要设置负载平衡,所以这里后头必需要跟上upstream界说的处事集群。

留意:upstream界说处事集群时,设置的处事地点只能是域名+端口可能ip+端口,不能带有协议和路径,不然nginx会报nginx: [emerg] invalid host in upstream这个错误信息。

加权(weight) upstream test { server 127.0.0.1:7001 weight=2; server 150.109.118.85:7001 weight=1; }

前面两次请求城市转发到127.0.0.1:7001这个处事,后头一次请求会转发到150.109.118.85:7001这个处事,再后头两次转发到127.0.0.1:7001,。。。

最少毗连数

文件位置:src/http/modules/ngx_http_upstream_least_conn_module.c

nginx请求分派给active_connection/weight最小的处事器。

upstream test { least_conn; server 127.0.0.1:7001 weight=1; server 150.109.118.85:7001 weight=1; } ip_hash

文件位置:src/http/modules/ngx_http_upstream_ip_hash_module.c

按照用户的ip,计较出一个hash值,假如负载平衡缓存中有这个hash对应的处事器,那就直接转发到对应的处事器上。

upstream test { ip_hash; server 127.0.0.1:7001; server 150.109.118.85:7001; }

nginx利用ip_hash计策后,只要用户电脑的ip稳定革,就会始终请求同一台业务处事。

应用场景:在实现文件上传成果时,要实现一个大文件上传,往往会将这个大文件分成多个片断,然后上传随处事器,假如利用前面给的计策,就会呈现同一个文件的分片被上传到差异处事器,导致文件归并失败,不能到达预期结果。nginx利用ip_hash计策后,客户端只要上传了当前文件的一个片断,后续文件片断上传的时候,nginx通过计较ip的hash,自动把请求转发到hash对应的处事器。

hash

文件位置:src/http/modules/ngx_http_upstream_hash_module.c

可以举办hash计较的有remote_addr(客户端ip)(从测试功效上面看感受可以直接替换掉ip_hash)、request_uri(请求uri)、args(请求参数),下面主要以request_uri的利用作为展示,其他两个利用都雷同。

按照请求的uri计较出一个hash值,然后将该请求转发到一台处事器上面,后续请求通过hash计较后,假如有沟通的hash,那么就会将该请求转发到该hash对应的处事器。

假如集群中某台处事器宕机之后会呈现什么环境:假设r1掷中a处事器;r2掷中b处事器。当a处事器宕机,之前通过r1计较出来的hash与a处事器的对应环境会失效,r1将从头分派给b处事器。后续a处事器规复正常后,r1照旧会分派给b处事器。

upstream test { hash $request_uri; server 127.0.0.1:7001; server 150.109.118.85:7001; }

应用场景:所有请求沟通的文件资源的请求城市被转发到同一个处事器,资源更容易掷中缓存,淘汰宽带和资源下载时间。

consistent_hash

consistent_hash(一致性hash)这个模块利用方法和nginx内置的hash模块险些沟通。可以或许利用consistent_hash举办计较的内容和前面提到的nginx内置的hash模块一样,有remote_addr、request_uri、args。这是一个三方模块,可以在ngx_http_consistent_hash这里下载。

upstream test { consistent_hash $request_uri; server 127.0.0.1:7001; server 150.109.118.85:7001; } fair

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wsddpp.html