四、Nginx配置文件-负载均衡

目录

一、负载均衡的作用

二、负载均衡状态

三、负载均衡的指令

[1、upstream 指令](#1、upstream 指令)

2、server指令

四、负载均衡几种方式

[1、轮询(Round Robin 常用)](#1、轮询(Round Robin 常用))

[2、IP Hash (较少)](#2、IP Hash (较少))

[3、最少连接数(Least Connections 较少)](#3、最少连接数(Least Connections 较少))

[4、加权轮询(Weighted Round Robin 常用)](#4、加权轮询(Weighted Round Robin 常用))

5、fair(较少)

6、backup(一般)


一、负载均衡的作用

  1. 解决服务器的高并发压力,提高应用程序的处理性能。
  2. 提供故障转移,实现高可用。
  3. 通过添加或减少服务器数量,增强网站的可扩展性。
  4. 在负载均衡器上进行过滤,可以提高系统的安全性。

二、负载均衡状态

|--------------|----------------------------|
| 状态 | 概述 |
| down | 当前的server暂时不参与负载均衡 |
| backup | 预留的备份服务器,当主服务器不可用时,将用来传递请求 |
| max_fails | 允许请求失败的次数 |
| fail_timeout | 经过max_fails失败后, 服务暂停时间 |
| max_conns | 限制最大的接收连接数 |

三、负载均衡的指令

1、upstream 指令

该指令是用来定义一组服务器,它们可以是监听不同端口的服务器,并且也可以是同时监听TCP和Unix socket的服务器。服务器可以指定不同的权重,默认为1。

2、server指令

该指令用来指定后端服务器的名称和一些参数,可以使用域名、IP、端口或者unix socket。与之前的server指令不一样。

四、负载均衡几种方式

1、轮询(Round Robin 常用)

轮询是最常见的负载均衡方式,Nginx会按照请求的顺序依次将请求分发给后端服务器。例如,如果有3台后端服务器,Nginx会将第1个请求分发给服务器A,第2个请求分发给服务器B,第3个请求分发给服务器C,然后循环重复。适于无状态的请求。

配置示例:

复制代码
upstream backend {
    server backend1;
    server backend2;
    server backend3;
}

server {
    listen 80;
    location / {
        proxy_pass http://backend;
    }
}

示例:
upstream backend{
    server 192.168.153.128:8081;
    server 192.168.153.128:8082;
    server 192.168.153.128:8083;
}
server {
    listen 8080;
    server_name localhost;
    location /{
        proxy_pass http://backend;
    }
}

   
示例2:对特定资源负载

upstream videobackend{
    server 192.168.153.128:9001;
    server 192.168.153.128:9002;
}
upstream filebackend{
    server 192.168.153.128:9003;
    server 192.168.153.128:9004;
}
server {
    listen 8084;
    server_name localhost;
    location /video/ {
        proxy_pass http://videobackend;
    }
    location /file/ {
        proxy_pass http://filebackend;
    }
}

示例3:对不同域名实现负载

upstream qwe{
    server 192.168.153.128:9001;
    server 192.168.153.128:9002;
}
upstream asd{
    server 192.168.153.128:9003;
    server 192.168.153.128:9004;
}
server {
    listen    8085;
    server_name www.qwe.cn;
    location / {
        proxy_pass http://qwe;
    }
}
server {
    listen    8086;
    server_name www.asd.cn;
    location / {
        proxy_pass http://asd;
    }
}

2、IP Hash (较少)

IP Hash方式根据客户端的IP地址进行哈希计算,将同一个客户端的请求始终转发到同一台后端服务器上。这样可以保证同一个客户端的请求都由同一台服务器处理,适合于需要保持会话的应用场景。

配置示例:

复制代码
upstream backend {
    ip_hash;
    server backend1;
    server backend2;
    server backend3;
}

server {
    listen 80;
    location / {
        proxy_pass http://backend;
    }
}

3、最少连接数(Least Connections 较少)

最少连接数方式会将请求分发给当前连接数最少的后端服务器,以达到负载均衡的效果。这种方式适用于后端服务器性能不一致的情况。

配置示例:

复制代码
upstream backend {
    least_conn;
    server backend1;
    server backend2;
    server backend3;
}

server {
    listen 80;
    location / {
        proxy_pass http://backend;
    }
}

4、加权轮询(Weighted Round Robin 常用)

加权轮询方式可以根据后端服务器的性能配置不同的权重,来调整请求的分发比例。权重越高的服务器会接收到更多的请求。

配置示例:

复制代码
upstream backend {
    server backend1 weight=3;
    server backend2 weight=2;
    server backend3 weight=1;
}

server {
    listen 80;
    location / {
        proxy_pass http://backend;
    }
}

示例:
upstream backend{
    server 192.168.153.128:9001 weight=7;
    server 192.168.153.128:9002 weight=5;
    server 192.168.153.128:9003 weight=3;
}
server {
    listen 8083;
    server_name localhost;
    location /{
        proxy_pass http://backend;
    }
}

5、fair(较少)

复制代码
upstream backend {
    fair;
    server backend1 weight=3;
    server backend2 weight=2;
    server backend3 weight=1;
}

server {
    listen 80;
    location / {
        proxy_pass http://backend;
    }
}

fair模块是比上面几个更加智能的负载均衡算法。此种算法可以依据页面大小和加载时间长短智能地进行负载均衡,也就是根据后端服务器的响应时间来分配请求,响应时间短的优先分配。Nginx本身是不支持fair的,如果需要使用这种调度算法,必须下载Nginx的upstream_fair模块;再次不做演示

6、backup(一般)

backup关键字用于定义备份服务器。当主服务器宕机或无法处理请求时,备份服务器将接手处理请求。

复制代码
upstream backend {
    server backend1;
    server backend2 backup;
}

server {
    listen 80;
    location / {
        proxy_pass http://backend;
    }
}

当 backend1 处于在线状态并且能够处理请求时,Nginx将只将请求发送到backend1。
只有当backend1 宕机或者由于某些原因无法处理请求时,Nginx才会将请求发送到backend2。
这种配置通常用于高可用性部署,确保在主服务器宕机时,有一个备用服务器可以接手处理请求,从而减少服务中断的影响。
相关推荐
Web极客码10 分钟前
用 SSH Key 认证提升文件传输安全:SFTP/SSH 加固实战(适合站点运维与外贸站)
运维·安全·ssh
zhojiew15 分钟前
在中国区EKS集群使用 kgateway 代理 Lambda 函数的实践过程
运维·envoy
小李独爱秋2 小时前
模拟面试:什么是容器技术,Docker是什么?
运维·docker·容器·面试·职场和发展
yangyanping201082 小时前
系统监控Prometheus之Docker安装部署Prometheus
运维·docker·容器·prometheus
一叶星殇2 小时前
Windows 下用 Nginx 部署 Vue + .NET WebApi 全流程实战
vue.js·windows·nginx
盟接之桥2 小时前
制造业EDI数字化:连接全球供应链的桥梁
linux·运维·服务器·网络·人工智能·制造
大梦想家~3 小时前
在职牛马,因为考过阿里云ACP,浅说下一次过的强度
运维·云计算·网络工程师·阿里云acp·云计算工程师·阿里云acp考试·阿里云acp备考
暴力求解4 小时前
Linux-进程(三)进程的孤儿状态和僵尸状态
linux·运维·服务器
乾元4 小时前
数据投毒:如何通过训练数据污染埋下“后门”
运维·人工智能·网络协议·安全·网络安全·系统架构·自动化
小鸡食米4 小时前
Keepalived高可用
运维·服务器·网络