易陆发现互联网技术论坛

 找回密码
 开始注册
查看: 1912|回复: 1
收起左侧

nginx负载均衡

[复制链接]
发表于 2021-8-16 15:00:13 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?开始注册

x
一、轮询(默认)
# T. _4 z) V9 |, T; u! y, u' F每一个请求按时间顺序逐一分配到不一样的后端服务器,若是后端服务器down掉,能自动剔除。
2 o8 k' U, f  p; Xupstream backserver {
* a3 S5 C" e' ]8 X! y* t; \! J/ Jserver 192.168.0.14;
) s2 v7 w% m0 Mserver 192.168.0.15;
8 W5 \; D* G$ @7 t3 _} 6 z# b" f6 x6 x7 V+ R) y' Z4 c

- z# B% v5 Z  {  R# [+ t. Y  ?) w二、指定权重  N# }3 B& q- J) q! }  ~- y
指定轮询概率,weight和访问比率成正比,用于后端服务器性能不均的状况。 & Y+ K  [% b' O0 ]( a0 Q9 T
upstream backserver { ' s* E  n4 i3 Y9 Z2 E2 R& K& O1 \
server 192.168.0.14 weight=8;
' F: {6 l9 `" l; f2 i5 @server 192.168.0.15 weight=10;
8 d  _, h" u6 g, r7 w}
! w4 |% [6 G+ s# G/ \  L9 d, r5 I# A& ?$ }. S' R
三、IP绑定 ip_hash/ A& Q' m- @. p0 u4 ~
每一个请求按访问ip的hash结果分配,这样每一个访客固定访问一个后端服务器,能够解决session的问题。
3 F% R) P8 ~" \( z1 d) C/ Vupstream backserver {
9 S6 I8 i3 f* `  i1 @7 D) F. Iip_hash;
, O# h3 J1 U% Q. O$ Dserver 192.168.0.14:88;
+ F' Q# w! O7 v# a8 Lserver 192.168.0.15:80; ( i0 m% ?* w' [$ C3 ?( M
} ' Y7 `- _/ W$ Q4 k! _4 M' I

5 u; j( r  H9 r/ K; T四、fair(第三方)
2 \1 k3 |3 Y" k9 W. E" x4 f按后端服务器的响应时间来分配请求,响应时间短的优先分配。
; j1 ]3 t6 ~4 Y& aupstream backserver { ( a) A' `3 Q9 o  v* G
server server1; * ], M# R5 {4 L+ I, V
server server2; 1 Q6 `) p9 H8 }+ H; |& Q7 r
fair;
! q8 [# o; W- l; K' g# b/ G}
3 r8 z8 C( u- Y( C3 ~- Z3 b1 X2 k
" T1 @2 P5 n' N. R: i; X* H五、url_hash(第三方)
3 w: J: Z5 p6 M) h1 L  q  o0 ]按访问url的hash结果来分配请求,使每一个url定向到同一个后端服务器,后端服务器为缓存时比较有效。 " k: @: S5 Y# u( o8 p1 R$ V' ~  j
upstream backserver { 4 J& x! g& o- s
server squid1:3128;
/ ~6 k* Z$ L8 |8 C1 y! F* oserver squid2:3128;
- q- K" [$ t, u/ J( l4 Khash $request_uri;
% r2 c8 ]1 l8 n0 Vhash_method crc32;
* Y- S; a/ V, X3 x6 B+ N7 I}
0 t9 I/ }- |0 a1 F5 P) ]4 _
# Z. l  s' w$ j1 T7 H在须要使用负载均衡的server中增长
$ L$ S& D" X  e3 s$ g1 ]. d4 h
$ _0 |. \* u  ^proxy_pass http://backserver/;
( O$ I$ ]8 d0 V, p* _& gupstream backserver{
. S# F& v- ]6 X) s8 g- Oip_hash; / j5 ~! d' v8 ?0 l
server 127.0.0.1:9090 down; (down 表示当前的server暂时不参与负载)
  D: s+ x  s' ]2 qserver 127.0.0.1:8080 weight=2; (weight 默认为1.weight越大,负载的权重就越大) + ^5 V1 h. I0 j
server 127.0.0.1:6060; 4 t9 B8 A6 k2 |/ V# f$ W  W
server 127.0.0.1:7070 backup; (其它全部的非backup机器down或者忙的时候,请求backup机器) , h% G& F. I  X+ {" d
} - E) i$ Z1 ~6 a( O4 q

6 C' [: R9 P7 a- Umax_fails :容许请求失败的次数默认为1.当超过最大次数时,返回proxy_next_upstream 模块定义的错误 ( F3 `5 z# r  y$ f) @1 W
fail_timeout:max_fails次失败后,暂停的时间前端
2 x( C: \" S: ^% \9 @8 q4 b" w# J' f$ _
 楼主| 发表于 2021-8-16 15:00:14 | 显示全部楼层
首先给大家说下upstream这个配置的,这个配置是写一组被代理的服务器地址,然后配置负载均衡的算法。这里的被代理服务器地址有2中写法。
+ a" p* J3 x& `& M* x# U
[backcolor=rgb(245, 245, 245) !important][url=]
7 M7 E$ v0 s) v7 S. X* T
                               
登录/注册后可看大图
[/url]
9 T( P1 |) @0 U, R
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=]

. |) m# R7 k7 I' ]( V                               
登录/注册后可看大图
[/url]

6 a. W1 H" P& A) j) p, x7 C0 m5 K5 Q+ y
0 W* w( P4 g. \1 p& x9 j! o7 w  ]
[backcolor=rgb(245, 245, 245) !important][url=]

2 R& J- v; P6 [7 v7 ]( r                               
登录/注册后可看大图
[/url]

: |9 ^! w7 o5 e% B2 Tupstream 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=]

, M  E9 x! C% v: W$ M# \! a                               
登录/注册后可看大图
[/url]

# G, D! `1 ]0 J* l5 N# H: r4 M6 ?9 P$ L3 `, Z+ Q' e4 `
然后,就来点实战的东西。
1、热备:如果你有2台服务器,当一台服务器发生事故时,才启用第二台服务器给提供服务。服务器处理请求的顺序:AAAAAA突然A挂啦,BBBBBBBBBBBBBB.....
upstream mysvr {       server 127.0.0.1:7878;       server 192.168.10.121:3333 backup;  #热备         }
. M2 D9 L  y+ F( d" {: k* c
2、轮询:nginx默认就是轮询其权重都默认为1,服务器处理请求的顺序:ABABABABAB....
upstream mysvr {       server 127.0.0.1:7878;      server 192.168.10.121:3333;           }
! j: ^9 R& s+ e) n1 J, ^
3、加权轮询:跟据配置的权重的大小而分发给不同服务器不同数量的请求。如果不设置,则默认为1。下面服务器的请求顺序为:ABBABBABBABBABB....
upstream mysvr {       server 127.0.0.1:7878 weight=1;      server 192.168.10.121:3333 weight=2;( u; o9 N; y' D: b5 ]
}
* C+ h. U, }+ F+ v1 @
4、ip_hash:nginx会让相同的客户端ip请求相同的服务器。
upstream mysvr {       server 127.0.0.1:7878;       server 192.168.10.121:3333;      ip_hash;    }5 U: k! q$ M0 ~
5、如果你对上面4种均衡算法不是很理解,那么麻烦您去看下我上一篇配的图片,可能会更加容易理解点。
到这里你是不是感觉nginx的负载均衡配置特别简单与强大,那么还没完,咱们继续哈,这里扯下蛋。
关于nginx负载均衡配置的几个状态参数讲解。
  • down,表示当前的server暂时不参与负载均衡。
  • backup,预留的备份机器。当其他所有的非backup机器出现故障或者忙的时候,才会请求backup机器,因此这台机器的压力最轻。
  • max_fails,允许请求失败的次数,默认为1。当超过最大次数时,返回proxy_next_upstream 模块定义的错误。
  • fail_timeout,在经历了max_fails次失败后,暂停服务的时间。max_fails可以和fail_timeout一起使用。

    . ]* Y4 `# ~0 u7 |% ]) ^
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;        }
0 s! ^1 f1 @) L5 S* ^( Q
到这里应该可以说nginx的内置负载均衡算法已经没有货啦。如果你像跟多更深入的了解nginx的负载均衡算法,nginx官方提供一些插件大家可以了解下。
您需要登录后才可以回帖 登录 | 开始注册

本版积分规则

关闭

站长推荐上一条 /4 下一条

北京云银创陇科技有限公司以云计算运维,代码开发

QQ|返回首页|Archiver|小黑屋|易陆发现技术论坛 ( 蜀ICP备2026014127号-1 )点击这里给我发消息

GMT+8, 2026-4-8 23:52 , Processed in 0.050899 second(s), 22 queries .

Powered by Discuz! X3.4 Licensed

© 2012-2025 Discuz! Team.

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