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

nginx负载均衡

[复制链接]

1

主题

0

回帖

12

积分

管理员

积分
12
QQ
发表于 2021-8-16 15:00:13 | 显示全部楼层 |阅读模式
一、轮询(默认)- ?: d: l( l- B+ `0 m, ?
每一个请求按时间顺序逐一分配到不一样的后端服务器,若是后端服务器down掉,能自动剔除。 ( m2 p' l( [  o* ~+ \
upstream backserver {
2 ^8 u# C( U+ C5 N. @0 K! I; a1 cserver 192.168.0.14; . C9 {1 W5 {; w* F5 C+ b% e
server 192.168.0.15;
5 X1 i# F" W  V! S5 e! }}   ^) V1 M+ V0 q# \! z
4 q9 x9 J& N6 L0 B1 d
二、指定权重
, P# G8 `8 l1 i+ w9 v1 v指定轮询概率,weight和访问比率成正比,用于后端服务器性能不均的状况。 ) F& ?3 [" q3 A. v
upstream backserver { 2 Y1 Q9 u5 ^# B/ v; E# T) V
server 192.168.0.14 weight=8;
0 Q5 ^3 g5 G9 r+ V+ E) d3 t; Yserver 192.168.0.15 weight=10; " Z. H5 n- X% M% @' e9 m& N0 l% A
}
/ i& [1 Y# F  O% K; _: |1 Z# I/ q; v, S0 b7 ~6 I& T
三、IP绑定 ip_hash6 _3 _8 U9 M& {4 Q! Y3 H; v' G" C
每一个请求按访问ip的hash结果分配,这样每一个访客固定访问一个后端服务器,能够解决session的问题。 . V. [9 |1 f1 w* ^8 _6 N  d3 |
upstream backserver { % L& o; V: O7 X& ~; N
ip_hash; * X! \& c) e& d2 V& v
server 192.168.0.14:88; " w/ `( R% L. W( W+ H
server 192.168.0.15:80;
$ S6 H( x& o1 U0 s7 z  n3 Q) j: H}
' l. N0 @) u) V
# ^$ h7 j# n, x& K  L' a7 Z四、fair(第三方)
( J( s7 ~1 |6 d: j9 n7 q按后端服务器的响应时间来分配请求,响应时间短的优先分配。
" d- d9 Y& F2 Z  a0 X2 i) d6 `upstream backserver {
2 F" w/ Z. \. v! i8 Q" R4 X, E$ Rserver server1;
# Y$ u0 Y' ]3 m' T2 i4 z4 m1 rserver server2;
* @* D+ w- J- j8 Q0 |fair; " K- k: w/ A9 u3 q& Z
}
) q3 `+ u4 |0 z* |2 z4 A+ _& [2 R$ O
五、url_hash(第三方)8 Z1 t! {, T+ z9 L
按访问url的hash结果来分配请求,使每一个url定向到同一个后端服务器,后端服务器为缓存时比较有效。 1 Q2 ~( g6 X' e. V7 u) S, P& m+ H
upstream backserver {
. U+ j8 Y$ D( D1 ?# Aserver squid1:3128; / R  c# Z+ g" N: B+ W0 {, Z! ~2 H
server squid2:3128; % x( l# I7 U: V/ g! H
hash $request_uri;
2 P# a9 `3 O* |hash_method crc32;   u1 T* I% Y3 E2 u3 e! [
}
- A6 {0 a& A/ _6 B  q4 m% ^% [  j
在须要使用负载均衡的server中增长
2 y. ]% ]4 y6 b9 ~: y
; K) G; `) D+ s# I1 ]% Y! Mproxy_pass http://backserver/;
3 ]% r0 L1 T6 [" i" cupstream backserver{
" U' H, u. z% J. A+ D& }) L* g9 `ip_hash;
" ~- `# C: J/ _! f0 K7 ?' V! d1 }; Iserver 127.0.0.1:9090 down; (down 表示当前的server暂时不参与负载)
) i2 D1 i0 f' k7 _4 Yserver 127.0.0.1:8080 weight=2; (weight 默认为1.weight越大,负载的权重就越大)
' v; p  c  E4 I* P9 Userver 127.0.0.1:6060; * f( P3 I" @! w9 ~) A) l
server 127.0.0.1:7070 backup; (其它全部的非backup机器down或者忙的时候,请求backup机器) $ v: e  i4 V1 `
}
( P0 y7 E5 ^" B( N+ Y+ C$ b$ i. _$ T; [8 v
max_fails :容许请求失败的次数默认为1.当超过最大次数时,返回proxy_next_upstream 模块定义的错误 & S  V; e) E: L, \% ?  Z4 G
fail_timeout:max_fails次失败后,暂停的时间前端

; v% |" i1 f) d

1

主题

0

回帖

12

积分

管理员

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

' x+ `4 @! `0 F  {[backcolor=rgb(245, 245, 245) !important][url=][/url]' U- T  K! B3 _6 Y
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]5 b1 A0 `6 `% l5 f8 @1 C  D

4 K7 z( W! E) N, `# I* L9 l% \, @  n' J4 S+ l; I
[backcolor=rgb(245, 245, 245) !important][url=][/url]
- C- ^/ i1 ]: B  o" Aupstream 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]
  C' n# v: `+ C$ j8 G6 Q* k0 E! l! K' T& t/ X) s
然后,就来点实战的东西。
1、热备:如果你有2台服务器,当一台服务器发生事故时,才启用第二台服务器给提供服务。服务器处理请求的顺序:AAAAAA突然A挂啦,BBBBBBBBBBBBBB.....
upstream mysvr {       server 127.0.0.1:7878;       server 192.168.10.121:3333 backup;  #热备         }
3 |, A. V: I1 d, q7 S7 H
2、轮询:nginx默认就是轮询其权重都默认为1,服务器处理请求的顺序:ABABABABAB....
upstream mysvr {       server 127.0.0.1:7878;      server 192.168.10.121:3333;           }
  m  t3 g0 M! ]4 ~6 O) h& W
3、加权轮询:跟据配置的权重的大小而分发给不同服务器不同数量的请求。如果不设置,则默认为1。下面服务器的请求顺序为:ABBABBABBABBABB....
upstream mysvr {       server 127.0.0.1:7878 weight=1;      server 192.168.10.121:3333 weight=2;* @7 F1 X* N; Z, |3 f
}

6 j( a, V0 t. G: `" s1 ~
4、ip_hash:nginx会让相同的客户端ip请求相同的服务器。
upstream mysvr {       server 127.0.0.1:7878;       server 192.168.10.121:3333;      ip_hash;    }8 I7 }: p& o0 C
5、如果你对上面4种均衡算法不是很理解,那么麻烦您去看下我上一篇配的图片,可能会更加容易理解点。
到这里你是不是感觉nginx的负载均衡配置特别简单与强大,那么还没完,咱们继续哈,这里扯下蛋。
关于nginx负载均衡配置的几个状态参数讲解。
  • down,表示当前的server暂时不参与负载均衡。
  • backup,预留的备份机器。当其他所有的非backup机器出现故障或者忙的时候,才会请求backup机器,因此这台机器的压力最轻。
  • max_fails,允许请求失败的次数,默认为1。当超过最大次数时,返回proxy_next_upstream 模块定义的错误。
  • fail_timeout,在经历了max_fails次失败后,暂停服务的时间。max_fails可以和fail_timeout一起使用。
    7 g! V' H8 z8 a. |# h, t
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;        }6 S- c- L2 j5 B" n! n! B$ N; A) u
到这里应该可以说nginx的内置负载均衡算法已经没有货啦。如果你像跟多更深入的了解nginx的负载均衡算法,nginx官方提供一些插件大家可以了解下。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-6-12 04:06 , Processed in 0.016948 second(s), 21 queries .

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

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