• 【Nginx】# 负载均衡配置(容灾)


    反向代理

    实现负载均衡之前,我们首先需要先实现反向代理;

    反向代理:通俗的讲,即用户请求时不必直接请求到Web服务器,而是将请求发送给代理服务器,由代理服务器有策略的将请求分配给不同的Web服务器。此处的代理服务器即是 Nginx

    使用nginx的 upstream 模块实现反向代理:

    • 修改 nginx的配置文件 nginx.conf

      http {
          # 反向代理配置
          upstream myServer {
              # 配置服务的访问路径
              server localhost:8080;
          }
          
          server {
              listen 80;
              server_name localhost;
              
              location / {
                  root html;
                  proxy_pass http://myServer;   # 注意此处最后没有 /
                  index index.html index.htm;
              }
          }
      }
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12
      • 13
      • 14
      • 15
      • 16
      • 17
      • 18

    image-20221106174604894

    使用nginx进行如此配置后,就可以实现 访问http://localhost:80 直接跳转到 http://localhost:8080网址

    负载均衡

    负载均衡:把大量的请求按照指定的方式均衡的分配给集群中的每台服务器。避免大量的请求只请求某一台服务器,从而导致服务器宕机的情况。

    loadBalancing

    1. 轮询(默认)

    修改 upstream 处的反向代理配置,实现每个请求按时间顺序,逐一分配到不同的web服务器

    http {
        # 反向代理配置
        upstream myServer {
            # 配置服务的访问路径
            server localhost:8080;
            server 192.168.191.100:8989; # 在此处新增一个web服务器的地址
        }
        
        server {
            listen 80;
            server_name localhost;
            
            location / {
                root html;
                proxy_pass http://myServer;   # 注意此处最后没有 /
                index index.html index.htm;
            }
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • proxy_pass http://myServer:表示将所有请求转发到 myServer 服务器组中配置的某一台服务器上
    • upstream模块:配置反向代理服务器组,Nginx会根据配置,将请求分发给组内的某一台服务器,myServer 是服务器组的名称
    • upstream模块下的server指令:配置处理请求的服务器 IP或域名,端口可选(不配置则默认80端口)

    通过上面的配置,Nginx默认将请求依次分配给 localhost,192.168.191.100来处理。

    可以通过修改下面的参数来改变默认的分配策略:

    • weight:权重,默认为1,表示将请求平均分配给每个服务器

    • max_fails:最大允许失败次数,默认为1,表示某台服务器允许请求的失败次数,超过最大次数后,在 fail_timeout 的时间内,新的请求将不会分配給这台机器。

      如果设置为 0,表示这台Server为永久无效状态,然后将请求发给定义了proxy_next_upstream, fastcgi_next_upstream, uwsgi_next_upstream, scgi_next_upstream, and memcached_next_upstream 指令的Server来处理这次错误的请求。

    • fail_timeout:失败的超时时间,默认为 10s,表示某台服务器达到 max_fails次失败后,在 fail_timeout期间内,都不会收到新请求

    upstream myServer {
        server localhost:8080 weight=2;  # 代表这台服务器,相较于下面的服务器,分到请求的概率更大
        server 192.168.191.100:8989 max_fails=3 fail_timeout=20; # 代表如果请求它失败 3次后,20内不会再请求它
    }
    
    • 1
    • 2
    • 3
    • 4
    • backup:表示备份机,服务器组中的其它服务器都挂了后,才会生效
    • max_conns:限制分配给某台Server处理的最大连接数量,默认为0(不限制),表示超过这个数量后,将不会分配新的连接给它
    upstream myServer {
        server localhost:8080 backup; # 代表只有当下面192.168.191.100这台服务器挂了后,才会启用它
        server 192.168.191.100:8989 max_conns=1000; # 代表最多给这台机器分配1000个请求,第1001个不会再分配给它
    }
    
    • 1
    • 2
    • 3
    • 4

    2. weight

    同上面介绍的一样,weight代表权重,默认为 1,值越大,代表分配到请求的概率就越大

    upstream myServer {
        server localhost:8080 weight=2;  # 代表请求分配给它的概率,与下面的服务器概率相同(weight都为2)
        server 192.168.191.100:8989 weight=2;
    }
    
    • 1
    • 2
    • 3
    • 4

    3. ip_hash

    第一次请求时,根据客户端的IP算出一个hash值,然后将请求分配到集群中的某一台服务器中。后面该客户端的所有请求,都将通过hash算法,找到之前的那台服务器进行处理。

    可以解决会话 Session丢失的问题,不管刷新多少遍,始终访问的都是同一台服务器。

    upstream myServer {
        ip_hash;
        server localhost:8080;
        server 192.168.191.100:8989;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5

    4. least_conn

    将请求分配给连接数最少的服务器,Nginx会自动统计哪些服务器的连接数最少。

    upstream myServer {
        least_conn;
        server localhost:8080;
        server 192.168.191.100:8989;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5

    5. 第三方负载策略

    5.1 fair

    根据服务器的响应时间来分配请求,响应时间短的优先分配;

    需要 fair模块的支持,下载地址:https://github.com/xyang0917/…;下载完成后,需要重新编译源码,覆盖之前的nginx

    upstream myServer {
        fair;
        server localhost:8080;
        server 192.168.191.100:8989;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5

    注意:使用fair 负载策略后,weight参数也就不起作用了

    5.2 url_hash

    按请求 url的 hash结果来分配请求,使每个url 定向到同一个后台服务器(服务器做缓存时比较有效)

    Nginx 1.7.2 之后,url_hash模块已经集成到 nginx源码中,无需单独安装

    upstream myServer {
        url_hash;
        server localhost:8080;
        server 192.168.191.100:8989;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
  • 相关阅读:
    【C++基础】左值引用、右值引用、move、forward
    【opencv图像处理】-- 5.形态学(膨胀、腐蚀、开闭运算、顶帽、黑帽、二值化)
    云原生的候选应用
    No module named ‘pyqt5‘解决办法
    Windows11 WSL2 Ubuntu编译安装perf工具
    前端工程化——前后端分离,进化流程
    MySQL导入导出、视图、索引、执行计划
    国际经济合作知识点归纳
    单元测试:模块接口、局部数据结构、路径、边界条件、错误处理、代码书写规范
    一种基于柔性事务的分布式事务解决方案设计探究
  • 原文地址:https://blog.csdn.net/qq_38134242/article/details/127762582