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

nginx负载均衡

[复制链接]

1

主题

0

回帖

12

积分

管理员

积分
12
QQ
发表于 2021-8-16 15:00:13 | 显示全部楼层 |阅读模式
一、轮询(默认)
, h' v8 t" E8 o$ U每一个请求按时间顺序逐一分配到不一样的后端服务器,若是后端服务器down掉,能自动剔除。 , V, P( q. Z; `
upstream backserver { 3 K; E( X5 q+ l9 Y& L. c3 o  t
server 192.168.0.14;
; e: ^2 Q8 i6 g9 F, p, Fserver 192.168.0.15; 5 C' z% f  X6 ]9 f- C
}
5 b/ P; T% ^; e% `: F+ U- P- g; V* U3 C* [
二、指定权重: `, }9 B7 V1 L  A7 X
指定轮询概率,weight和访问比率成正比,用于后端服务器性能不均的状况。 1 Q/ W9 o2 g5 `+ [1 Q. C" T9 u
upstream backserver {
" F/ P! c5 _* ~( E. }server 192.168.0.14 weight=8; ; O! \1 [/ e4 O' j3 |- b
server 192.168.0.15 weight=10; % A& k( ^* r& g- U/ n& S1 ?6 h4 b
}
" N+ [: ~4 Y+ _$ a9 }- K7 y  W( C5 u0 ~8 g4 Y, l* E3 p7 L  W
三、IP绑定 ip_hash5 J) p: @+ G) F2 ?
每一个请求按访问ip的hash结果分配,这样每一个访客固定访问一个后端服务器,能够解决session的问题。
' p$ F$ j+ J+ d3 _. s; [upstream backserver {
5 ~  y8 y' W+ k8 ^! b* jip_hash;
4 Y$ \% ~# D6 K1 Kserver 192.168.0.14:88; 9 q; n) @, ]0 s9 Q5 d
server 192.168.0.15:80; ' L6 w2 T9 o. R9 ~$ t. X& c
} ' {0 a% y6 A" w8 I) K9 P1 p* ^
7 ]3 ]9 s" K0 ^7 s* \
四、fair(第三方)
* ~+ J. q# I+ `6 m: a0 R: D按后端服务器的响应时间来分配请求,响应时间短的优先分配。 , `4 x& A. N' U- f1 f+ u+ c+ t- `
upstream backserver {
, {0 |5 }$ ?$ u- @* Q: Vserver server1; 3 {$ f! }/ m) U: e- i& t
server server2;
) ?$ q5 |* C) F) ^/ n' M7 pfair; 3 \6 d7 z2 H. Q) [
}
7 h7 a" c- M5 m' A  n0 M! x0 @  e; [0 r3 H8 k& O
五、url_hash(第三方)
0 r; ?/ @$ H# a8 i* v按访问url的hash结果来分配请求,使每一个url定向到同一个后端服务器,后端服务器为缓存时比较有效。
7 G% G" A* R) vupstream backserver {
: ^5 c  J) a5 p& V) aserver squid1:3128; ! j0 `! ]4 S- N) G6 Z0 l
server squid2:3128;
* ]) m  |8 U7 L6 K1 B* |hash $request_uri; . e& q' `% j; g5 D' [7 c4 \
hash_method crc32; ; m% V0 o- m6 A
} 3 M- i% I8 N& D5 g3 h- a
* Y: M+ W4 r' `5 h2 C
在须要使用负载均衡的server中增长
# p+ d( F, k  R- }* J' O. i  G5 `0 c% N& u/ Y8 f: f: b% J& o0 U
proxy_pass http://backserver/; 8 l5 O5 ?) H% c/ D+ R, z( p
upstream backserver{
7 T8 [6 H; _2 |ip_hash; 6 a7 @4 i# F( p% H; X( P+ u
server 127.0.0.1:9090 down; (down 表示当前的server暂时不参与负载)
! ~/ Y" z+ i- b: S; v( |server 127.0.0.1:8080 weight=2; (weight 默认为1.weight越大,负载的权重就越大)
8 F4 `, W) G& P3 h$ Qserver 127.0.0.1:6060;
; h) r/ Z" u+ X& Y8 ~( n5 Xserver 127.0.0.1:7070 backup; (其它全部的非backup机器down或者忙的时候,请求backup机器)
) ~  T- C2 `6 C}
/ a1 Z% A- n, G/ C/ t& s: R0 e0 v, w; x
, e7 O: ]4 h7 ~max_fails :容许请求失败的次数默认为1.当超过最大次数时,返回proxy_next_upstream 模块定义的错误 ( C% C, l$ `1 W+ l) q9 j' k
fail_timeout:max_fails次失败后,暂停的时间前端
, ^: M3 F4 e* t

1

主题

0

回帖

12

积分

管理员

积分
12
QQ
 楼主| 发表于 2021-8-16 15:00:14 | 显示全部楼层
首先给大家说下upstream这个配置的,这个配置是写一组被代理的服务器地址,然后配置负载均衡的算法。这里的被代理服务器地址有2中写法。
: A% J! P! _3 m4 K* {: W! `
[backcolor=rgb(245, 245, 245) !important][url=][/url]* D" Q( D+ W6 T) Q! o+ a; f, |8 d
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]1 P2 q* H4 q3 d3 e, \. a: q% d

5 d8 `/ j; x; B0 j2 I7 j5 @" b2 h( `& o1 z) I" }
[backcolor=rgb(245, 245, 245) !important][url=][/url]
) J! J! X# _% S, r( kupstream 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]
8 I9 Z. A) Y7 D' N( b0 {8 q, f+ H- j+ h. b
然后,就来点实战的东西。
1、热备:如果你有2台服务器,当一台服务器发生事故时,才启用第二台服务器给提供服务。服务器处理请求的顺序:AAAAAA突然A挂啦,BBBBBBBBBBBBBB.....
upstream mysvr {       server 127.0.0.1:7878;       server 192.168.10.121:3333 backup;  #热备         }
/ i+ E; [5 x" e
2、轮询:nginx默认就是轮询其权重都默认为1,服务器处理请求的顺序:ABABABABAB....
upstream mysvr {       server 127.0.0.1:7878;      server 192.168.10.121:3333;           }
+ e9 a9 _9 J& M" R3 B
3、加权轮询:跟据配置的权重的大小而分发给不同服务器不同数量的请求。如果不设置,则默认为1。下面服务器的请求顺序为:ABBABBABBABBABB....
upstream mysvr {       server 127.0.0.1:7878 weight=1;      server 192.168.10.121:3333 weight=2;
) ]0 C$ [, s  q( Y}
* ?) k& t! \/ e
4、ip_hash:nginx会让相同的客户端ip请求相同的服务器。
upstream mysvr {       server 127.0.0.1:7878;       server 192.168.10.121:3333;      ip_hash;    }
! o; d$ m" P* ~$ W7 X9 Z
5、如果你对上面4种均衡算法不是很理解,那么麻烦您去看下我上一篇配的图片,可能会更加容易理解点。
到这里你是不是感觉nginx的负载均衡配置特别简单与强大,那么还没完,咱们继续哈,这里扯下蛋。
关于nginx负载均衡配置的几个状态参数讲解。
  • down,表示当前的server暂时不参与负载均衡。
  • backup,预留的备份机器。当其他所有的非backup机器出现故障或者忙的时候,才会请求backup机器,因此这台机器的压力最轻。
  • max_fails,允许请求失败的次数,默认为1。当超过最大次数时,返回proxy_next_upstream 模块定义的错误。
  • fail_timeout,在经历了max_fails次失败后,暂停服务的时间。max_fails可以和fail_timeout一起使用。
      g5 I' s8 [/ d
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;        }( P# p) L8 @6 J5 M! r
到这里应该可以说nginx的内置负载均衡算法已经没有货啦。如果你像跟多更深入的了解nginx的负载均衡算法,nginx官方提供一些插件大家可以了解下。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-6-12 03:04 , Processed in 0.018651 second(s), 22 queries .

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

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