Nginx负载均衡

一、负载均衡分类

(1)软硬件分类

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

(2)硬件负载均衡

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

(3)软件负载均衡

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

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

负载均衡就其所工作的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项目

新建java目录

选择Mark Diretory as再选择Sources Root下

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依赖

<!-- Servlet依赖 -->
<dependency>
  <groupId>javax.servlet</groupId>
  <artifactId>javax.servlet-api</artifactId>
  <version>3.1.0</version>
  <scope>provided</scope>
</dependency>

<!-- JSP依赖 -->
<dependency>
  <groupId>javax.servlet.jsp</groupId>
  <artifactId>javax.servlet.jsp-api</artifactId>
  <version>2.3.3</version>
  <scope>provided</scope>
</dependency>

编辑jsp

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

<body background="images/bj.jpg">
    Nginx World Welcome You!<br>
    Nginx Addr = ${pageContext.request.remoteAddr} <br>
    Tomcat Addr = ${pageContext.request.localAddr} <br>
</body>

</html>

(4)tomcat配置以及部署

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

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

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

两台tomcat部署项目

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

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

(5)Nginx配置

(6)效果

三、Nginx负载均衡策略

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

(1)轮询

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

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

(2)ip_hash

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

需要注意:

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

(3)least_conn

四、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/

  • 1
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值