找回密码
 注册
查看: 1916|回复: 1

nginx负载均衡

[复制链接]

1

主题

0

回帖

12

积分

管理员

积分
12
QQ
发表于 2021-8-16 15:00:13 | 显示全部楼层 |阅读模式
一、轮询(默认)1 m$ E" U' x' h3 E4 Z% H, y
每一个请求按时间顺序逐一分配到不一样的后端服务器,若是后端服务器down掉,能自动剔除。
, |5 q8 M7 R/ [7 S" K8 \: A5 h7 fupstream backserver {
7 }$ X; |! H/ l' J: [9 |1 B- ^server 192.168.0.14;
8 q; h' B8 y- m! x$ S6 F% `5 p( Tserver 192.168.0.15;
7 O9 S3 f8 h: r; V, N1 N}
( }# U+ F- a3 d" O
( m' X) S8 U+ i, v9 I4 c二、指定权重
" N8 h" V1 y, o1 S2 V指定轮询概率,weight和访问比率成正比,用于后端服务器性能不均的状况。 ) r# g3 w% ]* L- ?' k+ ?
upstream backserver {
6 W# \* i: c3 {. n% ?- C- aserver 192.168.0.14 weight=8;
, m1 ~! U3 o0 d8 p) tserver 192.168.0.15 weight=10;
" I) L! F1 C3 S$ H+ n7 u' u& w5 r} ) e5 Q  Z# k+ ^4 U

. J. S# L+ a5 Z3 k三、IP绑定 ip_hash
* w2 @8 T+ j1 [0 z! ]每一个请求按访问ip的hash结果分配,这样每一个访客固定访问一个后端服务器,能够解决session的问题。 6 f+ {# y+ A) l/ ^* a+ T
upstream backserver {
+ T+ ^- a& n* m  k7 ~. L1 Nip_hash;
5 D, b( b: }0 [4 r5 j! [5 |server 192.168.0.14:88;
' T. ^7 {$ z$ n7 Userver 192.168.0.15:80; + B4 ?; o/ ?1 c
} # i, @- M+ W* e* z" R6 S3 ?

/ |: f' O/ Z# R- p  r: E) z( R- @四、fair(第三方)
5 `0 P3 J% T7 [) D' u( s按后端服务器的响应时间来分配请求,响应时间短的优先分配。
, k6 m, w9 a7 Z/ Pupstream backserver {
' e$ Q2 v3 N" U0 F4 Aserver server1;
2 a% k* p7 p2 V4 A! C# z; w; Tserver server2; % s+ l1 {5 ~7 b, w* l* r! \1 k
fair;
' Q! S# Y8 i0 q" q}
8 y0 [/ H1 h; V6 C4 ]- z4 {
) [/ z/ r: \6 _$ d1 P& v: c3 ^五、url_hash(第三方)3 B& h. Q- d) k' \- c! x, s
按访问url的hash结果来分配请求,使每一个url定向到同一个后端服务器,后端服务器为缓存时比较有效。 . e, |) g* ^5 D! n! z: ]
upstream backserver {
& z% r! `$ {8 Xserver squid1:3128; " ?7 b* l4 ^  p/ V( b; v
server squid2:3128;   M% I! k( R! U* t5 x
hash $request_uri; / i( k8 e+ c4 ^6 a8 q0 o4 f
hash_method crc32; . t# |; f9 }5 G! C% c4 U- |
}
: v  O# d( k; x" R) C+ j9 r2 h) @5 @2 m' ~; M( j
在须要使用负载均衡的server中增长
) v# s+ u7 F- k3 B( \, k* X- Q, n7 G9 z& s8 Q5 P4 {% E; y
proxy_pass http://backserver/;
* Y" p9 L. ]+ [; uupstream backserver{ % h, F6 G- k% W  r2 ]
ip_hash; ; s2 l# y* O. L8 a: O3 Q9 I
server 127.0.0.1:9090 down; (down 表示当前的server暂时不参与负载) 6 V) s6 I* z; D
server 127.0.0.1:8080 weight=2; (weight 默认为1.weight越大,负载的权重就越大) 0 m7 X5 `5 r. R
server 127.0.0.1:6060;
' \9 ?% K. [4 userver 127.0.0.1:7070 backup; (其它全部的非backup机器down或者忙的时候,请求backup机器) 2 l" `" \+ H/ y; W# n* a) C
}
( H5 L$ K2 z' }# s  l; I- f0 ^0 q3 q! j
max_fails :容许请求失败的次数默认为1.当超过最大次数时,返回proxy_next_upstream 模块定义的错误 2 `. g/ d% t' c  ^
fail_timeout:max_fails次失败后,暂停的时间前端
. W0 _7 j% D; E; e7 C9 {- A1 C

1

主题

0

回帖

12

积分

管理员

积分
12
QQ
 楼主| 发表于 2021-8-16 15:00:14 | 显示全部楼层
首先给大家说下upstream这个配置的,这个配置是写一组被代理的服务器地址,然后配置负载均衡的算法。这里的被代理服务器地址有2中写法。

* e; c$ M% x% I% `( |[backcolor=rgb(245, 245, 245) !important][url=][/url]6 u4 y3 S, L7 r( J: X7 K' }
upstream mysvr {       server 192.168.10.121:3333;      server 192.168.10.122:3333;    } server {        ....        location  ~*^.+$ {                    proxy_pass  http://mysvr;  #请求转向mysvr 定义的服务器列表                 } [backcolor=rgb(245, 245, 245) !important][url=][/url]9 k* P+ `( q4 Q

& P2 |* V6 i0 K4 d: a4 f2 n0 T) H/ v' c0 _8 Q
[backcolor=rgb(245, 245, 245) !important][url=][/url]. o+ T% C0 n% L) G2 J
upstream mysvr {       server  http://192.168.10.121:3333;      server  http://192.168.10.122:3333;    } server {        ....        location  ~*^.+$ {                    proxy_pass  mysvr;  #请求转向mysvr 定义的服务器列表                 } [backcolor=rgb(245, 245, 245) !important][url=][/url]
! i9 H: v  w# y; t( r  [; ^+ d" G! ~. ^* o) N6 N
然后,就来点实战的东西。
1、热备:如果你有2台服务器,当一台服务器发生事故时,才启用第二台服务器给提供服务。服务器处理请求的顺序:AAAAAA突然A挂啦,BBBBBBBBBBBBBB.....
upstream mysvr {       server 127.0.0.1:7878;       server 192.168.10.121:3333 backup;  #热备         }' G: m; [) L* x' J; F
2、轮询:nginx默认就是轮询其权重都默认为1,服务器处理请求的顺序:ABABABABAB....
upstream mysvr {       server 127.0.0.1:7878;      server 192.168.10.121:3333;           }
% b7 d0 o& Q$ J3 ~) T
3、加权轮询:跟据配置的权重的大小而分发给不同服务器不同数量的请求。如果不设置,则默认为1。下面服务器的请求顺序为:ABBABBABBABBABB....
upstream mysvr {       server 127.0.0.1:7878 weight=1;      server 192.168.10.121:3333 weight=2;
% ^9 N9 R7 k" R2 ]: [9 `) Q}
1 \' O8 ~* Z% ~' K: o1 F# Y
4、ip_hash:nginx会让相同的客户端ip请求相同的服务器。
upstream mysvr {       server 127.0.0.1:7878;       server 192.168.10.121:3333;      ip_hash;    }
+ M- k1 }. ?& h5 T' h5 r
5、如果你对上面4种均衡算法不是很理解,那么麻烦您去看下我上一篇配的图片,可能会更加容易理解点。
到这里你是不是感觉nginx的负载均衡配置特别简单与强大,那么还没完,咱们继续哈,这里扯下蛋。
关于nginx负载均衡配置的几个状态参数讲解。
  • down,表示当前的server暂时不参与负载均衡。
  • backup,预留的备份机器。当其他所有的非backup机器出现故障或者忙的时候,才会请求backup机器,因此这台机器的压力最轻。
  • max_fails,允许请求失败的次数,默认为1。当超过最大次数时,返回proxy_next_upstream 模块定义的错误。
  • fail_timeout,在经历了max_fails次失败后,暂停服务的时间。max_fails可以和fail_timeout一起使用。
    ; {7 y6 {8 Y; ]; O
upstream mysvr {       server 127.0.0.1:7878 weight=2 max_fails=2 fail_timeout=2;      server 192.168.10.121:3333 weight=1 max_fails=2 fail_timeout=1;        }) b+ I9 O+ p2 m0 S1 M
到这里应该可以说nginx的内置负载均衡算法已经没有货啦。如果你像跟多更深入的了解nginx的负载均衡算法,nginx官方提供一些插件大家可以了解下。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

返回首页|Archiver|手机版|小黑屋|易陆发现技术论坛 ( 蜀ICP备2026014127号-1 )

GMT+8, 2026-6-12 01:59 , Processed in 0.025148 second(s), 22 queries .

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表