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

nginx负载均衡

[复制链接]

1

主题

0

回帖

12

积分

管理员

积分
12
QQ
发表于 2021-8-16 15:00:13 | 显示全部楼层 |阅读模式
一、轮询(默认)
: m0 [$ x/ M2 h+ x/ Z) s' x每一个请求按时间顺序逐一分配到不一样的后端服务器,若是后端服务器down掉,能自动剔除。
' @! T( Y* I% o% }upstream backserver {
9 V4 h3 b$ w3 m; `server 192.168.0.14;
- c: i7 f: M+ @" u( p. ?* @server 192.168.0.15; : `1 @, a) h# f7 ]  _
} 7 R. r4 }% x. {6 \
6 }  U) a3 g$ a
二、指定权重# P3 y9 {8 L0 M) e! b# N
指定轮询概率,weight和访问比率成正比,用于后端服务器性能不均的状况。
& X3 Q+ j; @; h& @% Xupstream backserver {
4 ^% O/ p' b7 m- ~  S2 Xserver 192.168.0.14 weight=8;
3 u' b) C1 q( userver 192.168.0.15 weight=10;
" Z& @3 U9 a6 J# x3 o) N} 3 V+ K( M4 S+ N
/ A$ M* j; v# I" u" f* E
三、IP绑定 ip_hash
' o  s# j6 `- P, s9 Q' {% x9 Y每一个请求按访问ip的hash结果分配,这样每一个访客固定访问一个后端服务器,能够解决session的问题。
, w: W9 ~" L3 N. Tupstream backserver { 2 h. m" ]) x- Y: I7 |1 X/ R
ip_hash;
/ i) h+ S) B7 w% J  K8 a/ nserver 192.168.0.14:88; 4 O  z+ k  B. G8 n. l' y
server 192.168.0.15:80; 6 j/ e. ~+ U, P! S
} ; ~% w# G& ~6 F8 @

5 f7 S8 |! E* D! @& X) ]- ]+ \8 i四、fair(第三方)/ S+ a6 I; N6 {1 b5 P+ L1 G; C
按后端服务器的响应时间来分配请求,响应时间短的优先分配。
5 W- D; x3 c# N; Uupstream backserver {
  Z7 T4 I/ l" C4 t$ d& F8 g6 d) |server server1; 1 Z4 l  ]; R, Y0 S9 Y& `9 v& i+ C
server server2; 0 M3 Z5 r0 ]) L3 H( i0 ~
fair; 4 r2 q! p0 k. g/ s
}
& @- ?& E- B+ n! o' B4 I1 ^$ L& }$ Q: z2 M
五、url_hash(第三方)
& M) ]3 g9 E: Z0 n) k  \按访问url的hash结果来分配请求,使每一个url定向到同一个后端服务器,后端服务器为缓存时比较有效。
8 n+ Z; i1 O, cupstream backserver { ) d5 V# s/ W: v9 r6 W0 P" S; ^
server squid1:3128; * r; E. p3 c% x0 M& N
server squid2:3128; 0 {: Z4 F( ^) h4 }' y6 ^
hash $request_uri;
# q5 U* Y4 K- \8 P% n6 Shash_method crc32; 0 Q. @0 w4 [% X1 r
}
0 _3 v' X  g! K3 m
! L! Q/ g5 M0 P在须要使用负载均衡的server中增长
8 J1 h5 i. T' ~; o( j3 ^, c0 i7 o& a6 f
proxy_pass http://backserver/; 4 `9 I' x( q1 p. a5 W, F4 o/ O5 N* J2 y
upstream backserver{
9 O3 Z  w4 s; c" Eip_hash;
$ f8 ?" Z9 u. y1 U2 V9 `: Dserver 127.0.0.1:9090 down; (down 表示当前的server暂时不参与负载) % ^7 u" b4 k* t- o; H% {3 B5 e$ Q
server 127.0.0.1:8080 weight=2; (weight 默认为1.weight越大,负载的权重就越大)
+ k1 {& v9 H4 E- j+ X+ b/ _" Tserver 127.0.0.1:6060; 3 a; k3 R1 W2 T$ z3 N: C2 }  X
server 127.0.0.1:7070 backup; (其它全部的非backup机器down或者忙的时候,请求backup机器)
, D7 u( ]$ _. G0 l}
2 q/ ^. m! P+ C0 C/ \* ~
4 `5 V8 a! v( g# lmax_fails :容许请求失败的次数默认为1.当超过最大次数时,返回proxy_next_upstream 模块定义的错误 & n  d; o* A$ r
fail_timeout:max_fails次失败后,暂停的时间前端

- S/ m0 X' a  m

1

主题

0

回帖

12

积分

管理员

积分
12
QQ
 楼主| 发表于 2021-8-16 15:00:14 | 显示全部楼层
首先给大家说下upstream这个配置的,这个配置是写一组被代理的服务器地址,然后配置负载均衡的算法。这里的被代理服务器地址有2中写法。
( ~1 |: y. g6 _
[backcolor=rgb(245, 245, 245) !important][url=][/url]+ L$ l4 N* m) ^, X+ T
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]6 L  W' r; C/ [1 j/ x3 O
2 G( o; \$ \" ]1 ^
( A0 e; M) f# W" F
[backcolor=rgb(245, 245, 245) !important][url=][/url]
! @; J' r0 e4 `9 yupstream 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]  H8 C# F, w- d# c! s

" l+ ^3 B7 E# D( l
然后,就来点实战的东西。
1、热备:如果你有2台服务器,当一台服务器发生事故时,才启用第二台服务器给提供服务。服务器处理请求的顺序:AAAAAA突然A挂啦,BBBBBBBBBBBBBB.....
upstream mysvr {       server 127.0.0.1:7878;       server 192.168.10.121:3333 backup;  #热备         }6 r: V1 Y' w# a) Y. k) b  s5 m
2、轮询:nginx默认就是轮询其权重都默认为1,服务器处理请求的顺序:ABABABABAB....
upstream mysvr {       server 127.0.0.1:7878;      server 192.168.10.121:3333;           }: }( b7 q- ~  F$ a% n- [3 R
3、加权轮询:跟据配置的权重的大小而分发给不同服务器不同数量的请求。如果不设置,则默认为1。下面服务器的请求顺序为:ABBABBABBABBABB....
upstream mysvr {       server 127.0.0.1:7878 weight=1;      server 192.168.10.121:3333 weight=2;
6 Q* f2 M9 ~/ Y5 k8 r  K& ~}
$ V* z/ h# b; T- x1 V$ u
4、ip_hash:nginx会让相同的客户端ip请求相同的服务器。
upstream mysvr {       server 127.0.0.1:7878;       server 192.168.10.121:3333;      ip_hash;    }
/ H( V1 [$ @# ~
5、如果你对上面4种均衡算法不是很理解,那么麻烦您去看下我上一篇配的图片,可能会更加容易理解点。
到这里你是不是感觉nginx的负载均衡配置特别简单与强大,那么还没完,咱们继续哈,这里扯下蛋。
关于nginx负载均衡配置的几个状态参数讲解。
  • down,表示当前的server暂时不参与负载均衡。
  • backup,预留的备份机器。当其他所有的非backup机器出现故障或者忙的时候,才会请求backup机器,因此这台机器的压力最轻。
  • max_fails,允许请求失败的次数,默认为1。当超过最大次数时,返回proxy_next_upstream 模块定义的错误。
  • fail_timeout,在经历了max_fails次失败后,暂停服务的时间。max_fails可以和fail_timeout一起使用。
    ' K, V1 t3 V6 o/ C( u: Y- f" r2 j
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;        }) g5 c. `3 O6 u( a' R
到这里应该可以说nginx的内置负载均衡算法已经没有货啦。如果你像跟多更深入的了解nginx的负载均衡算法,nginx官方提供一些插件大家可以了解下。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

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