2022-03-26

前端代理怎么设置之负载均衡

以下部分内容由小红书www.xiaohongshutuiguang.cn)转载提供

我们先来看张图吧:

  使用集群是网站解决高并发、海量数据问题的常用手段。当一台服务器的处理能力、存储空间不足时,不要企图去换更强大的服务器,对大型网站而言,不管多么强大的服务器,都满足不了网站持续增长的业务需求。这种情况下,更恰当的做法是增加一台服务器分担原有服务器的访问及存储压力。通过负载均衡调度服务器,将来自浏览器的访问请求分发到应用服务器集群中的任何一台服务器上,如果有更多的用户,就在集群中加入更多的应用服务器,使应用服务器的负载压力不再成为整个网站的瓶颈。

  那么下面,我们来看下,如何通过nginx服务器,配置集群。首先,我们需要在nginx服务器,同过不同的端口号,创建几个node服务。node服务的代码类似这样:

varhttp = require( 'http' );varserver =http.createServer(function ( request ,response ){

    response.end('server3 000');

} );

server.listen( 3000 ,function(){

console.log( 'HTTP服务器启动中,端口:3000' );

});

  然后,nginx中可以这样配置:

http{

upstream zhufeng {

    server 127.0.0.1:3000weight=10;

    server 127.0.0.1:4000;

    server 127.0.0.1:5000;

}

server {

        location / {

            proxy_pass http://zhufeng;        }

    }

}

  然后呢,安装一下pm2:

yuminstallpm2 -g

  如果太慢的话,可以试试淘宝源。这里就不说怎么配置了哦。然后安装好pm2后,通过pm2启动各个node服务。pm2是一个node应用的进程管理器。

  然后,可以通过以下命令来启动和查看node服务进程:

# 启动node服务

pm2 start xxx.js name xxx

# 查看当前服务

pm2 list

后端服务器调试状态:

状态描述

down当前的服务器不参与负载均衡

backup当其它节点都无法使用时的备份的服务器

max_fails允许请求失败的次数,到达最大次数就会休眠

fail_timeout经过max_fails失败后,服务暂停的时间,默认10秒

max_conns限制每个server最大的接收的连接数,性能高的服务器可以连接数多一些

例子:

upstream webserver{

  server localhost:3000 down;

  server localhost:4000 backup;

  server localhost:5000max_fails=1fail_timeout=10s;

}

分配方式:

类型种类

轮询(默认)每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除

weight(加权轮询)指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况

ip_hash每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题

least_conn哪个机器上连接数少就分发给谁

url_hash(第三方)按访问的URL地址来分配 请求,每个URL都定向到同一个后端 服务器上(缓存)

fair(第三方)按后端服务器的响应时间来分配请求,响应时间短的优先分配

正定义hashhash自定义key

例子:

upstream webserver{

  ip_hash;

  server 127.0.0.1:3000;

}

upstream webserver{

  least_conn;

  server 127.0.0.1:3000;

}

upstream webserver{

  url_hash;

  server 127.0.0.1:3000;

}

upstream webserver{

  fair;

  server 127.0.0.1:3000;

}

upstream webserver{

  hash $request_uri;

  server 127.0.0.1:3000;

}

三、其他

一)缓存

  首先啊,缓存有很多种,比如之前学过的浏览器缓存,还有应用服务器缓存,代理缓存,客户端缓存等等等等。我们可以在nginx中使用prxoy_cache来设置代理缓存。

http{ 

    # 缓存路径 目录层级 缓存空间名称和大小 失效时间为7天 最大容量为10g

    proxy_cache_path /data/nginx/cache levels=1:2keys_zone=cache:100m inactive=60m max_size=10g; 

  稍微复杂点的方式如下:

if($request_uri ~ ^/cache/(login|logout)) {

      set $nocache 1;

    }

    location / {

      proxy_pass http://webserver;    }

    location ~ ^/cache/ {

    proxy_cache cache;

    proxy_cache_valid  200206304301302 60m;  # 对哪些状态码缓存,过期时间为60分钟

    proxy_cache_key $uri;  #缓存的维度

    proxy_no_cache $nocache;

    proxy_set_header Host $host:$server_port;  #设置头

    proxy_set_header X-Real-IP $remote_addr;  #设置头

    proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;  #设置头

    proxy_pass http://127.0.0.1:6000;}

  然后呢,上面的各个字段的含义如下:

键值含义

proxy_cache使用名为cache的对应缓存配置

proxy_cache_valid 200 206 304 301 302 10d;对httpcode为200的缓存10天

proxy_cache_key $uri定义缓存唯一key,通过唯一key来进行hash存取

proxy_set_header自定义http header头,用于发送给后端真实服务器

proxy_pass指代理后转发的路径,注意是否需要最后的/

二)location

  它的使用其实就是正则表达式,但是语法规则会有些特性,正则我就不在这里多说,咱们直接看下location的语法:

location仅匹配URI,忽略参数

前缀字符串

常规

= 精确匹配

^~ 匹配上后则不再进行正则表达式的匹配

正则表达式

~ 大小写敏感的正则表达式匹配

~*忽略大小写的正则表达式匹配

内部调转

用于内部跳转的命名location @

Syntax location [=|~|~*|^~] uri {...}

      location @name{...}

default -Context server,location   

  匹配的优先级,按照上面的顺序,从上到下,最上面的优先级最高,我们来看个实际的例子:

location ~ /T1/$ {

    return 200'匹配到第一个正则表达式';

}

location ~* /T1/(\w+)$ {

    return 200'匹配到最长的正则表达式';

}

location ^~ /T1/ {

    return 200'停止后续的正则表达式匹配';

}

location  /T1/T2 {

    return 200'最长的前缀表达式匹配';

}

location  /T1 {

    return 200'前缀表达式匹配';

}

location = /T1 {

    return 200'精确匹配';

}

/T1// 精确匹配/T1/// 停止后续的正则表达式匹配/T1/T2// 匹配到最长的正则表达式/T1/T2/// 最长的前缀表达式匹配/t1/T2// 匹配到最长的正则表达式

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,287评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,346评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,277评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,132评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,147评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,106评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,019评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,862评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,301评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,521评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,682评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,405评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,996评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,651评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,803评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,674评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,563评论 2 352

推荐阅读更多精彩内容