• 分布式系统系列--(二)使用Nginx实现负载均衡


    Nginx负载均衡

    Nginx是一款轻量级的web服务器/反向代理服务器以及电子邮件代理服务器,并在BSD协议下发行,可以在Unit、GNU/Linux、BSD、macos x、windows等操作系统中运行。其特点是占有内存少,高性能,并发能力强(10k并发),并且还能够提供强大的反向代理功能,它的并发能力在同类型的网络服务器中表现很好。
    基于反向代理的功能,Nginx作为负载均衡主要有以下几点理由:

    • 高并发连接
    • 内存消耗少
    • 配置文件非常简单
    • 支持Rewrite重写规则
    • 内置的健康监测功能
    • 节省带宽
    • 稳定性高

    正向代理和反向代理

    正向代理
    正向代理类似一个跳板机,代理访问外部资源。(客户端->正向代理服务器->互联网->正向代理服务器->客户端)
    反向代理
    实际运行方式是指代理服务器来接受Internet互联网上的连接请求,然后将请求转发给内部网络上的服务器(也就是说反向代理服务器与内网的服务器在同一个内网中,它是客户端访问内网的入口),并将从服务器上得到的结果返回给Internet上请求连接的客户端,此时代理服务器对外就表现为一个服务器。(客户端->反向代理服务器->内网服务器->反向代理服务器->客户端)
    反向代理的作用:

    • 保证内网的安全,可以使用反向代理提供WAF功能,阻止web攻击。大型网站,通常将反向代理作为公网范文地址,web服务器是内网。
    • 负载均衡,通过反向代理服务器来优化网站的负载。

    Nginx负载均衡的4种方案配置

    1. 轮询
      轮询即Round Robin,这是Nginx默认的配置策略。根据Nginx配置文件中的顺序,依次把客户端的web请求分发到不同的后端服务器上。
      它的配置文件如下:
    user www-data;
    worker_processes auto;
    pid/run/nginx.pid;
    
    events{
            #epoll是Linux上的事件模型,如果是其他系统,请注释掉
    	use epoll;
    	worker_connections 65535;
    }
    
    http{
            # 指定被反向代理转发的网址以及负载均衡后的IP+port
    	upstream www.young.com {
    		server 127.0.0.1:8881;
    		server 127.0.0.1:8882;
    		server 127.0.0.1:8883;
    	}
    
    	server{
    		listen 80;
                     #指定虚拟主机的地址,通常是用户访问的网址
    		server_name www.young.com;
    
    		location / {
                             # 指定反向代理的网址
    			proxy_pass http://www.young.com;
    			proxy_set_header Host $host;
    			proxy_set_header X-Real-Ip $remote_addr;
    		}
    	}
    }
    

    注意:需要在本机的hosts中添加"127.0.0.1 www.young.com"的网址映射。

    注意事项

    • 在http的配置项中配置负载均衡策略,如果不写,默认为轮询模式
    • Nginx负载均衡支持http和https协议,只需要修改proxy_pass后协议即可。
    • Nginx支持FastCGI,SCGI,uwsgi,memcached的负载均衡,只需将proxy_pass改为fastcgi_pass,uwsgi_pass,scgi_pass,memcached_pass即可。
    • 轮询策略适合服务器配置相当,无状态且短平快的服务使用
    1. 最少连接least_conn
      web请求会被转发到连接数最少的服务器上。它适合请求处理时间长短不一造成服务器过载的情况。配置时需要在upstream中添加least_conn;即开启此策略。

    2. IP地址哈希
      上边的两种负载均衡方案中,同一客户端连接的web请求可能会被分发到不同的后端服务器进行处理,因此会涉及到会话session,因为不同服务器的会话session是不一样的,所以要想识别当前请求是否与上次会话为同一用户,那么需要将session会话保存在Redis、memcached、MySQL等缓存服务器上去。而另外一种解决session一致的方法就是使用IP地址哈希的分发方案,使同一用户的请求一直被分发到同一服务器。
      配置文件中,在upstream中添加ip_hash的配置参数即开启了此策略。
      注意事项

    • 它使用ip_hash指令定义
    • Nginx使用客户端的ip地址进行哈希计算,确保使用同一个服务器响应请求。
    • 此策略适合有状态服务,比如session。
    1. 基于权重的分发
      对不同的服务器设置不同的权重,权重越高接收到的请求数量越多。配置文件中,在upstream的每个server后边添加weight=权重值即可。
      注意事项
    • 权重越高分配到需要处理的请求越多。
    • 它可以与最少连接负载和ip哈希策略结合使用。
    • 它适合服务器硬件配置差别比较大的情况。

    关于Nginx具体的配置文件的参数说明,请看下一节分布式系统系列--(三)Nginx配置文件的相关参数说明

  • 相关阅读:
    来谈谈JAVA面向对象
    手把手的SpringBoot教程,SpringBoot创建web项目(一)
    【Java框架型项目从入门到装逼】第十五节
    印章文字识别
    《图像处理实例》之 曲线之间距离求解
    机器学习常用模块
    Ubutu16.04+Cuda9.2/9.0+Cudnn7.12/7.05+TensorFlow-gpu-1.8/1.6
    滑动平均模型原理+源码分析
    AlexNet实践
    TensorFlow NormLization
  • 原文地址:https://www.cnblogs.com/mr-ziyoung/p/13719896.html
Copyright © 2020-2023  润新知