Nginx负载均衡

一、负载均衡分类

(1)软硬件分类

负载均衡可以通过负载均衡软件实现,也可通过硬件负载均衡器实现。

(2)硬件负载均衡

硬件负载均衡器的性能稳定,且有生产厂商作为专业的服务团队。但其成本很高,一台硬件负载均衡器的价格一般都在十几万到几十万,甚至上百万。知名的负载均衡器有F5、Array、深信服、梭子鱼等

(3)软件负载均衡

软件负载均衡成本几乎为零,基本都是开源软件。例如,LVS、HAProxy、Nginx等。

(4)负载均衡工作层分类

Nginx负载均衡_第1张图片

负载均衡就其所工作的OSI(开放系统互联模型)层次,在生产应用层面分为四类:

  • 七层负载均衡L7:应用层负载均衡,基于HTTP协议的。其是通过虚拟的URL将请求分配到真实的服务器。其一般应用于基于HTTP协议的B/S架构系统。Nginx提供的就是L7负载均衡。
  •  四层负载均衡L4:传输层负载均衡,基于TCP协议的。其是通过虚拟IP+端口号的形式将请求分配到真实的服务器。其一般应用于C/S架构的ERP系统中。F5与LVS均提供的是L4负载均衡。Nginx Plus提供的也是四层负载均衡。
  •  三层负载均衡L3:网络层负载均衡,基于IP协议的。其是通过虚拟IP的形式将请求分配到真实的服务器。有些DNS提供的是L3负载均衡。
  •  二层负载均衡L2:数据链路层负载均衡,其是通过虚拟MAC地址的形式将请求分配到了真实的服务器。有些DNS提供的是L2的负载均衡。

二、负载均衡的实现

(1)总体规划

该机群包含一台Nginx服务器,两台Tomcat服务器。将前面打过包的web工程直接部署到两台Tomcat主机上。然后,在Nginx服务器上设置对这两台Tomcat主机的负载均衡

(2)新建nginxweb项目

Nginx负载均衡_第2张图片

Nginx负载均衡_第3张图片

Nginx负载均衡_第4张图片

Nginx负载均衡_第5张图片

新建java目录

Nginx负载均衡_第6张图片

选择Mark Diretory as再选择Sources Root下

Nginx负载均衡_第7张图片

3)编辑项目

新建servlet

package nginx.web;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;

@WebServlet("/some")
public class SomeServlet extends HttpServlet {
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        PrintWriter writer = response.getWriter();
        writer.println("Nginx Ip = " + request.getRemoteAddr());
        writer.println("Tomcat Ip = " + request.getLocalAddr());
    }
}

pom.xml文件添加Servlet与JSP依赖



  javax.servlet
  javax.servlet-api
  3.1.0
  provided




  javax.servlet.jsp
  javax.servlet.jsp-api
  2.3.3
  provided

编辑jsp

<%@ page contentType="text/html;charset=UTF-8" %>


    webdemo



    Nginx World Welcome You!
Nginx Addr = ${pageContext.request.remoteAddr}
Tomcat Addr = ${pageContext.request.localAddr}

(4)tomcat配置以及部署

apache-tomcat-8081配置文件server.xml 修改

apache-tomcat-8082配置文件server.xml 修改

说明:因为是一台服务器配置,为了端口不冲突,所以这样修改。

两台tomcat部署项目

为了看到效果,部署在apache-tomcat-8081的SomeServlet类内容:

Nginx负载均衡_第8张图片

部署在apache-tomcat-8082的SomeServlet类内容:

Nginx负载均衡_第9张图片

Nginx负载均衡_第10张图片

(5)Nginx配置

Nginx负载均衡_第11张图片

(6)效果

Nginx负载均衡_第12张图片

Nginx负载均衡_第13张图片

三、Nginx负载均衡策略

Nginx内置了三种负载均衡策略,另外,其还支持第三方的负载均衡。而每种负载均衡主机根据负载均衡策略的不同,又可设置很多性能相关的属性

(1)轮询

默认的负载均衡策略,其是按照各个主机的权重比例依次进行请求分配的。该策略适用的场景是:根据主机性能设置不同权重。
对于每台主机,除了像weight一样可以设置的属性外,还可以设置如下属性

Nginx负载均衡_第14张图片

  • fail_ timeout:表示当前主机被Nginx认定为停机的最长失联时间,默认为10秒。常与max_fails联合使用。
  • max_fails:表示在fail_timeout时间内最多允许的失败次数。
  • backup:表示当前服务器为备用服务器。
  • down:表示当前服务器永久停机。

(2)ip_hash

指定负载均衡器按照基于客户端IP的分配方式,该策略确保了相同的客户端的请求一直发送到相同的服务器,以保证session会话,解决了session不能跨服务器的问题

Nginx负载均衡_第15张图片

需要注意:

  •  适用场景为有状态服务。
  • 在Nginx1.3.1版本之前,该策略中不能指定weight属性。在一个客户端首次访系统时,采用的是根据权重进行分配的轮询策略。
  •  此策略不能与backup同时使用。
  • 当有服务器被Nginx认为停机后,必须手动指定该主机为down,否则请求仍会落到该服务器。

(3)least_conn

Nginx负载均衡_第16张图片

四、Nginx Plus的四层负载均衡实现

Nginx Plus是Nginx的商业版,其官网是: https://nginx.com
同样是修改nginx.conf文件,添加一个stream模块,其与events、http等模块同级。在其中配置upstream{}与server{}模块。此时需要注意,通行代理配置在server{}中,且不能再是http://开头的了,因为其负载均衡协议不再是HTTP协议了。

https://www.nginx.com/

https://docs.nginx.com/nginx/admin-guide/load-balancer/tcp-udp-load-balancer/

你可能感兴趣的:(Nginx)