Nginx 负载均衡详解及配置

文章
林里克斯

详解 6 种 Nginx 负载 (round-robin;Weight;ip_hash;least_conn;fair;url_hash);

实验平台:实验平台:CentOS 7.7.1908
nginx-version:1.16.1



一、 安装 Nginx


1.这里测试使用 yum 安装 Nginx

$ yum -y install nginx

2.如需源码安装参考

点我 ---> Linux 下编译安装 Nginx

3.启动

$ systemctl start nginx
$ systemctl enable nginx

二、实操配置


1.简单实现(轮循 round-robin )

  • 最基本的配置方法,它是 upstream 模块默认的负载均衡默认策略;
  • 每个请求会按时间顺序逐一分配到不同的后端服务器;
  • 如果后端服务器 down 掉,能自动剔除;
  • 此策略适合服务器配置相当,无状态且短平快的服务使用。
$ vim /etc/nginx/nginx.conf
http {
    server {
        listen       80 default_server;
        server_name  _;
        root         /usr/share/nginx/html;

        location / {
            proxy_pass http://backserver;
            #指定的访问反向代理到服务器列表
        }
    }

        upstream backserver {
            server 10.10.10.6;
            server 10.10.10.12;
        }
}

参数:

  • down #标记服务器永久停机了

eg:

upstream backserver {
    server 10.10.10.6 down;
    server 10.10.10.12;
}
#相当于 10.10.10.6 服务器 down 了,请求只会去 10.10.10.12
  • max_fails #设置在 fail_timeout 参数设置的时间内最大失败次数,如果在这个时间内,所有针对该服务器的请求都失败了,那么认为该服务器会被认为是停机了
  • fail_timeout #与 max_fails 结合使用
  • fail_time #服务器会被认为停机的时间长度,默认为10s
  • backup #标记该服务器为备用服务器。当主服务器停止时,请求会被发送到它这里
  • max_conns #限制分配给某台服务器的最大连接数,超过这个数量,反向代理服务器将不会分配新的连接,默认为 0,表示不限制;

2.权重(Weight)

  • 权重越高分配到需要处理的请求越多
  • 此策略比较适合服务器的硬件配置差别比较大的情况
  • 此策略可以与 least_conn 和 ip_hash 结合使用
upstream backserver {
    server 10.10.10.6 weight=10;
    server 10.10.10.12 weight=2;
}

3.ip_hash (绑定访问 IP)

  • 在 nginx 版本 1.3.1 之前,不能在 ip_hash 中使用权重 weight
  • ip_hash 不能与 backup 同时使用
  • 此策略适合有状态服务,比如 session
  • 当有服务器需要剔除,必须手动剔除掉
upstream backserver {
    ip_hash;
    server 10.10.10.6;
    server 10.10.10.12;
}

4.least_conn

  • 把请求转发给连接数较少的后端服务器
  • 有些请求占用的时间很长,会导致其所在的后端负载较高。这种情况下,least_conn 这种方式就可以达到更好的负载均衡效果
  • 此负载均衡策略适合请求处理时间长短不一造成服务器过载的情况
upstream backserver {
    least_conn;
    server 10.10.10.6;
    server 10.10.10.12;
}

7.fair(需安装第三方模块)

  • 增强了 Nginx 提供的 round-robin 负载均衡算法,可以跟踪后端服务器的负载来分发请求

官方 github 下载地址:

https://github.com/gnosek/nginx-upstream-fair

如果从 github 下载最新版本,在安装到nginx 1.14.0 版本时,会报出编译错误。修改参照(如果你看到这篇文章时,已经修改了该 bug,或者你用的是 nginx 1.14.0以下版本,请忽视...)

https://github.com/gnosek/nginx-upstream-fair/pull/27/commits/ff979a48a0ccb9217437021b5eb9378448c2bd9e

已编译好的源码

https://files.cnblogs.com/files/ztlsir/nginx-upstream-fair-master

增加模块参考上面 Linux 下编译安装 Nginx

--add-module=/root/nginx-upstream-fair-master
upstream backserver {
    server 10.10.10.6;
    server 10.10.10.12;
    fair;
}

8.url_hash(需安装第三方模块)

  • 按访问 url 的 hash 结果来分配请求,使每个url定向到同一个后端服务器,要配合缓存命中来使用
  • 实现每个 url 定向到同一个后端服务器
  • 在 1.7.2 之后的nginx版本中,该模块应集成到内核中,不需要单独安装
wget http://wiki.nginx.org/images/7/78/Nginx_upstream_hash-0.3.tar.gz
--add-module=/root/Nginx_upstream_hash-0.3.1
upstream backserver {
    hash $request_uri;
    server 10.10.10.6;
    server 10.10.10.12;
}

Over~

版权协议须知!

本篇文章来源于 Uambiguous ,如本文章侵犯到任何版权问题,请立即告知本站,本站将及时予与删除并致以最深的歉意

760 0 2020-09-12


分享:
icon_mrgreen.gificon_neutral.gificon_twisted.gificon_arrow.gificon_eek.gificon_smile.gificon_confused.gificon_cool.gificon_evil.gificon_biggrin.gificon_idea.gificon_redface.gificon_razz.gificon_rolleyes.gificon_wink.gificon_cry.gificon_surprised.gificon_lol.gificon_mad.gificon_sad.gificon_exclaim.gificon_question.gif
博主卡片
林里克斯 博主大人
一个致力于Linux的运维平台
运维时间
搭建这个平台,只为分享及记载自己所遇之事和难题。

现在时间 2024-04-25

今日天气
站点统计
  • 文章总数:240篇
  • 分类总数:29个
  • 评论总数:10条
  • 本站总访问量 215603 次

@奥奥

@Wong arrhenius 牛比

@MakerFace 厉害了!