Nginx实现负载均衡

2022-03-23  本文已影响0人  秋枫叨叨

Nginx负载均衡设置

一、负载均衡算法

实现负载均衡可有以下算法:

二、Nginx实现负载均衡

Nginx实现负载均衡的原理是利用Http重定向实现负载均衡

1)配置文件在哪?

rpm 安装方式nginx配置文件地址 /etc/nginx/conf.d 目录下面,配置文件内容结构如下:

upstream upstream_name {
   server 127.0.0.1:8081;
   server 192.168.0.137:8081;
}

server {
    listen       8000;
    server_name  localhost;
    location / {
        proxy_pass http://upstream_name;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

修改完配置文件以后,还需要输入重新加载配置命令:

//重新加载配置
nginx -s reload

//或者重启nginx
systemctl restart nginx

2)如何配置负载均衡?

我们从官网上面看一下负载均衡配置案例,然后根据案例配置去对每项参数进行解释,案例如下(注意:以下模块内容必须放在http模块下):

resolver 10.0.0.1;

upstream dynamic {
    zone upstream_dynamic 64k;

    server backend1.example.com      weight=5;
    server backend2.example.com:8080 fail_timeout=5s slow_start=30s;
    server 192.0.2.1                 max_fails=3;
    server backend3.example.com      resolve;
    server backend4.example.com      service=http resolve;

    server backup1.example.com:8080  backup;
    server backup2.example.com:8080  backup;
}

server {
    location / {
        proxy_pass http://dynamic;
        health_check;
    }
}

从上面这个案例Nginx会作如下执行,默认情况下,请求使用 加权循环平衡法。 在上面的示例中,每 7 个请求将按如下方式分配: 5个请求去 backend1.example.com向第二台和第三台服务器分别发送一个请求。 如果在与服务器通信过程中发生错误,请求将 被传递到下一个服务器,依此类推,直到所有的功能 服务器将被尝试。 如果无法从任何服务器获得成功的响应, 客户端将收到与最后一个服务器通信的结果。

server命令解析

语法:

句法:     server address [parameters];
默认:     —
语境:     upstream

parameters类别:

参数名 类型 说明
weight number 服务器权重,默认为 1
max_conns number 限制最大值 number同时活跃的 与代理服务器的连接 (1.11.5)。 默认值为零,表示没有限制。
max_fails number 设置与服务器通信失败的尝试次数。默认情况下,不成功的尝试次数设置为 1。
fail_timeout time 指定尝试失败的超时时间,默认情况下,该参数设置为 10 秒。(10s)
backup 将服务器标记为备份服务器。 当主服务器不可用时,它将被传递请求
down 将服务器标记为永久不可用

商业版本需要付费的其他属性这里就不阐述了

Nginx负载均衡策略

1)轮训策略:

upstream模块默认的负载均衡策略是轮训策略,它会依次在服务列表进行分发

2)加权策略:

容器会根据server设置的权重进行请求分配,例如server1 weight=5 ,server2 weight=2 将会使得每 7 个请求将按如下方式分配server1 5个请求,server2两个请求。

3)Ip哈希策略:

其中请求 根据客户端 IP 地址在服务器之间分布,确保来自同一客户端的请求将始终 传递到同一服务器。使用方法是在upstream模块下面添加ip_hash;

upstream backend {
    ip_hash;
    server backend1.example.com;
    server backend2.example.com;
    server backend3.example.com down;
    server backend4.example.com;
}

4)最少连接数策略(least_conn):

指定组应使用负载平衡方法,其中请求 传递给活动连接数最少的服务器, 考虑到服务器的权重。 如果有多个这样的服务器,它们会依次尝试使用 加权循环平衡法。

upstream backend {
    least_conn;
    server backend1.example.com;
    server backend2.example.com;
    server backend3.example.com down;
    server backend4.example.com;
}

5)扩展策略(需要安装插件):

upstream backend {
    fair;
    server backend1.example.com;
    server backend2.example.com;
    server backend3.example.com down;
    server backend4.example.com;
}
upstream backend {
    hash $request_uri;
    server backend1.example.com;
    server backend2.example.com;
    server backend3.example.com down;
    server backend4.example.com;
}

还有一些其他需要付费的策略这里就不进行阐述了,比如:最少时间策略( least_time)、随机策略等。

上一篇 下一篇

猜你喜欢

热点阅读