负载均衡——nginx反向代理

负载均衡,英文名称为Load Balance,其意思就是分摊到多个操作单元上进行执行,例如Web服务器、FTP服务器、企业关键应用服务器和其它关键任务服务器等,从而共同完成工作任务。实现负载均衡的策略有反向代理、HTTP重定向和DNS负载均衡,在本文中主要介绍基于nginx的反向代理负载均衡。

引言

我们首先要知道什么是反向代理负载均衡?

  反向代理服务器是一个位于实际服务器之前的服务器,所有向我们网站发来的请求都首先要经过反向代理服务器,服务器根据用户的请求要么直接将结果返回给用户,要么将请求交给后端服务器处理,再返回给用户。

  使用反向代理服务器可以实现静态页面和常用的动态页面的缓存。但是反向代理服务器还有更常用的功能,即实现负载均衡。所有发送给我们网站的请求都会首先经过反向代理服务器。那么,反向代理服务器就可以充当服务器集群的调度者,它可以根据当前后端服务器的负载情况,将请求转发给一台合适的服务器,并将处理结果返回给用户。

大致流程如下图所示:
这里写图片描述

优点

  1. 隐藏后端服务器。
    与HTTP重定向相比,反向代理能够隐藏后端服务器,所有浏览器都不会与后端服务器直接交互,从而能够确保调度者的控制权,提升集群的整体性能。
  2. 故障转移
    与DNS负载均衡相比,反向代理能够更快速地移除故障结点。当监控程序发现某一后端服务器出现故障时,能够及时通知反向代理服务器,并立即将其删除。
  3. 合理分配任务
    HTTP重定向和DNS负载均衡都无法实现真正意义上的负载均衡,也就是调度服务器无法根据后端服务器的实际负载情况分配任务。但反向代理服务器支持手动设定每台后端服务器的权重。我们可以根据服务器的配置设置不同的权重,权重的不同会导致被调度者选中的概率的不同。

缺点

  1. 调度者压力过大
    由于所有的请求都先由反向代理服务器处理,那么当请求量超过调度服务器的最大负载时,调度服务器的吞吐率降低会直接降低集群的整体性能。
  2. 制约扩展
    当后端服务器也无法满足巨大的吞吐量时,就需要增加后端服务器的数量,可没办法无限量地增加,因为会受到调度服务器的最大吞吐量的制约。

应用

  以下是我在一台服务器中测试负载均衡进行的步骤,在实际的使用中把ip替换为对应服务器的ip即可。

  1. 配置负载均衡策略,在/etc/nginx/conf.d/ 新建一个nginx.conf配置文件,加入以下内容

    upstream backend{
        #ip_hash;
        #weight 服务器权重值,如果服务器性能一致,可以将权重值配置为一样
        server 127.0.0.1:9701 weight=1;
        server 127.0.0.1:9702 weight=2;
        server 127.0.0.1:9703 weight=4;
    }
    server {
        listen         8005;
        server_name    127.0.0.1;
        access_log      /var/log/nginx/nginx_demo_access.log;
        error_log       /var/log/nginx/nginx_demo_error.log;
        charset     utf-8;
    
        client_max_body_size 75M;
        location / {
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_buffering off;
        #Backend可以自定义,但是要上下文的一致性
        proxy_pass http://backend;
       }
    }
    
  2. 将项目上传到服务器,配置uwsgi文件,和项目对应nginx端口的server,因为使用端口做的负载均衡,所以需要将项目复制三份放在不同的目录下,在每一个项目下新建对应的uwsgi.ini文件,加入项目启动的uwsgi相关配置

  3. 在/etc/nginx/conf.d/下新建project_nginx.conf文件,在文件中配置nginx服务监听的server端口,需要监听upstearm backend中监听的三个端口,分别配置三个server,监听不同端口,配置和uwsgi交互的内网端口,例如 9701<->9801 ,9702<->9802,9703<->9803….
  4. 重启nginx服务,分别进入三个项目目录,使用uwsgi –ini xxx.ini 启动项目( 需要启动三次命令行工具)
  5. 可以把三个项目的首页展示内容稍微改改,再访问项目就会看到效果,当前访问的不一定是上次访问的服务器,注意在对应的服务器中配置安全组规则。

猜你喜欢

转载自blog.csdn.net/xinyan233/article/details/80586018