前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >nginx 负载均衡

nginx 负载均衡

作者头像
九霄道长
发布2021-04-09 11:13:11
5970
发布2021-04-09 11:13:11
举报
文章被收录于专栏:九霄道长

nginx的负载均衡用于upstream模板定义的后端服务器列表中选取一台服务器接收用户的请求。一个基本的upstream模块如下:

代码语言:javascript
复制
upstream test{
  server 127.0.0.1:8080;
  server 127.0.0.1:8081;
}
代码语言:javascript
复制
server {
    listen       80;
    server_name  localhost;
    location / {
        proxy_pass http://test/;    #负载均衡
    }
}

nginx :负载均衡 策略

目前Nginx的upstream模块支持6种方式的负载均衡策略(算法):轮询(默认方式)、weight(权重方式)、ip_hash(依据ip分配方式)、least_conn(最少连接方式)、fair(第三方提供的响应时间方式)、url_hash(第三方通过的依据URL分配方式)。 1)轮询

  最基本的配置方法,是upstream模块默认的负载均衡策略。每个请求会按时间顺序平均分配到不同的后端服务器。有如下参数: fail_timeout 与max_fails结合使用 max_fails 在fail_timeout参数设置的时间内最大失败次数。如果在这个时间内,所有该服务器的请求都失败了,那么认为该服务器停机 fail_time 服务器被认为停机的时长,默认10s(被认为停机的服务器尝试间隔?) backup 标记该服务器为备用服务器。当主服务器停止时,请求会被发送到它这里 down 标记服务器永久停机

1 轮训

代码语言:javascript
复制
  upstream  test {
       server    localhost:10001;
       server    localhost:10002; 
  }

2 权重 指定每个服务的权重比例,weight和访问比率成正比,通常用于后端服务机器性能不统一,将性能好的分配权重高来发挥服务器最大性能,如下配置后10002服务的访问比率会是10001服务的二倍。

代码语言:javascript
复制
upstream  test {
      server    localhost:10001 weight=1;
      server    localhost:10002 weight=2;
}

3 iphash 每个请求都根据访问ip的hash结果分配,经过这样的处理,每个访客固定访问一个后端服务,如下配置(ip_hash可以和weight配合使用)。

代码语言:javascript
复制
upstream  test {
       ip_hash; 
       server    localhost:10001 weight=1;
       server    localhost:10002 weight=2;
}

4 最少连接

将请求分配到连接数最少的服务上。

代码语言:javascript
复制
upstream  test {
       least_conn;
       server    localhost:10001 weight=1;
       server    localhost:10002 weight=2;
}

5 fair 按后端服务器的响应时间来分配请求,响应时间短的优先分配。

代码语言:javascript
复制
upstream  test {
       server    localhost:10001 weight=1;
       server    localhost:10002 weight=2;
       fair;  
}

6 url_hash url分配方式,按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,要配合缓存命中来使用。同一个资源多次请求可能会到达不同的服务器上,导致不必要的多次下载,缓存命中率不高,以及一些资源时间的浪费。而使用url_hash,可以使得同一个url(也就是同一个资源请求)会到达同一台服务器,一旦缓存住了资源,再次收到请求,就可以在缓存中读取。upstream模块配置模板如下:

代码语言:javascript
复制
upstream test{
  hash $request_uri;
  server 127.0.0.1:8080 weight=2;
  server 127.0.0.1:8081;
}
代码语言:javascript
复制
location / {  //第43行起
  root html;
  index index.html index.htm;
  if ($request_uri ~* \.html$){
    proxy_pass http://htmlservers;
  }
  if ($request_uri ~* \.php$){
    proxy_pass http://phpservers;
  }
  proxy_pass http://picservers;
}
upstream htmlservers {  //在http模块下,server模块平级处添加
  server 192.168.5.102:80;
  server 192.168.5.103:80;
}
upstream phpservers{
  server 192.168.5.102:80;
  server 192.168.5.103:80;
}
upstream picservers {
  server 192.168.5.102:80;
  server 192.168.5.103:80;
}
e7cd7b899e510fb30f2466c67079df95d143ad4ba602.jpg
e7cd7b899e510fb30f2466c67079df95d143ad4ba602.jpg
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021 年 04 月,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
负载均衡
负载均衡(Cloud Load Balancer,CLB)提供安全快捷的流量分发服务,访问流量经由 CLB 可以自动分配到云中的多台后端服务器上,扩展系统的服务能力并消除单点故障。负载均衡支持亿级连接和千万级并发,可轻松应对大流量访问,满足业务需求。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档