Nginx负载均衡

Nginx负载均衡

1. 什么是负载均衡

  • 负载均衡是高可用网络基础架构的的一个关键组成部分,有了负载均衡,我们通常可以将我们的应用服务器部署多台,然后通过负载均衡将用户的请求分发到不同的服务器用来提高网站、应用、数据库或其他服务的性能以及可靠性。

2. 为什么要用负载均衡

  • 负载均衡的作用:

    1.解决并发压力,提高应用处理性能(增加吞吐量,加强网络处理能力);

    2.提供故障转移,实现高可用;

    3.通过添加或减少服务器数量,提供网站伸缩性(扩展性);

    4.安全防护;(负载均衡设备上做一些过滤,黑白名单等处理)

  • 负载均衡的架构

    通过代理将流量按照一定的比例,转发到后端。
    在这里插入图片描述

3. 负载均衡的实现

3.1 反向代理

server {
   	listen 80;
   	server_name _;
   	location / {
        proxy_pass http://[连接池];
   	}
}

3.2 IP连接池

  • 将后端服务打包成一个IP连接池
upstream [连接池名称] {
    server [ip]:[port];
    server [ip]:[port];
    server [ip]:[port];
}

3.3 事例

[root@lb01 conf.d]# vim game.conf 

upstream supermarie {
    server 172.16.1.7:80;
    server 172.16.1.8:80;
    server 172.16.1.9:80;
}

server {
    listen 80;
    server_name _;
    location / {
        proxy_pass http://supermarie;
        include /etc/nginx/proxy_params;
    }
}

在这里插入图片描述

4. 负载均衡的比例

4.1 轮询

  • 默认情况下,Nginx负载均衡的轮询状态。会依次循环访问每一个服务器
upstream supermarie {
    server 172.16.1.7:80;
    server 172.16.1.8:80;
    server 172.16.1.9:80;
}

4.2 权重

  • Nginx中权重0-100,数字越大,权重越高。weight=[0-100]
upstream supermarie {
    server 172.16.1.7:80 weight=9;
    server 172.16.1.8:80 weight=5;
    server 172.16.1.9:80 weight=1;
}

在这里插入图片描述

4.3 ip_hash

  • 指定一个IP固定访问某一个端口,通过客户端请求ip进行hash,再通过hash值选择后端server
  • 还有个url_hash,通过请求url进行hash,再通过hash值选择后端server
upstream supermarie {
    server 172.16.1.7:80;
    server 172.16.1.8:80;
    server 172.16.1.9:80;
    ip_hash;
}

5. 负载均衡的后端状态

状态概述
down当前的server暂时不参与负载均衡
backup预留的备份服务器
max_fails允许请求失败的次数
fail_timeout经过max_fails失败后, 服务暂停时间

5.1 down

# 暂时不分配流量, 只会启动.8和.9两台服务器
upstream supermarie {
    server 172.16.1.7:80 down;
    server 172.16.1.8:80;
    server 172.16.1.9:80;
}

server {
    listen 80;
    server_name _;
    location / {
        proxy_pass http://supermarie;
        include /etc/nginx/proxy_params;
    }
}

在这里插入图片描述

5.2 backup

# 只有当所有的机器全部宕机,才能启动。
upstream supermarie {
    server 172.16.1.7:80 backup;
    server 172.16.1.8:80;
    server 172.16.1.9:80;
}

server {
    listen 80;
    server_name _;
    location / {
        proxy_pass http://supermarie;
        include /etc/nginx/proxy_params;
    }
}

5.3 max_fails、fail_timeout

# max_fails 指定最多失败次数,  fail_timeout:  指定经过max_fails次失败后, 服务暂停时间
upstream supermarie {
    server 172.16.1.7:80 max_fails=3 fail_timeout=3s;
    server 172.16.1.8:80 max_fails=3 fail_timeout=3s;
    server 172.16.1.9:80 max_fails=3 fail_timeout=3s;
}

server {
    listen 80;
    server_name _;
    location / {
        proxy_pass http://supermarie;
        proxy_next_upstream error timeout invalid_header http_500 http_503 http_404; 
        include /etc/nginx/proxy_params;
    }
}

在这里插入图片描述

5.4 proxy_next_upstream 后端错误标识

参数含义
error与服务器建立连接,向其传递请求或读取响应头时发生错误
timeout在与服务器建立连接,向其传递请求或读取响应头时发生超时
invalid_header服务器返回空的或无效的响应
http_500服务器返回代码为500的响应
http_502服务器返回代码为502的响应
http_503服务器返回代码为503的响应
http_504服务器返回代码为504的响应
http_4043服务器返回代码为403的响应
http_404服务器返回代码为404的响应
http_429服务器返回代码为429的响应(1.11.13)
non_idempotent通常,请求与 非幂等 方法(POST,LOCK,PATCH)不传递到请求是否已被发送到上游服务器(1.9.13)的下一个服务器; 启用此选项显式允许重试此类请求
off禁用将请求传递给下一个服务器

6.七层负载与四层负载

  • 前文内容均是基于七层负载均衡来实现
  • 所谓四层即运输层,就是基于 IP + 端口的负载均衡;
  • 七层即应用层,就是基于 URL 等应用层信息的负载均衡;能实现HTTP协议

在非HTTP协议的情况下,通常采用的四层负载均衡的方式负载服务。

  • 注意:四层负载均衡中不支持域名。
    案例: 使用四层负载均衡实现SSH的代理,端口为1122
[root@lb01 stream]# cat ssh.conf 
server {
    listen 1122;
    proxy_pass 172.16.1.5:22;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

go&Python

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值