负载均衡可以通过负载均衡软件实现,也可通过硬件负载均衡器实现。
硬件负载均衡器的性能稳定,且有生产厂商作为专业的服务团队。但其成本很高,一台硬件负载均衡器的价格一般都在十几万到几十万,甚至上百万。知名的负载均衡器有F5、Array、深信服、梭子鱼等
软件负载均衡成本几乎为零,基本都是开源软件。例如,LVS、HAProxy、Nginx等。
负载均衡就其所工作的OSI(开放系统互联模型)层次,在生产应用层面分为四类:
(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依赖
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类内容:
部署在apache-tomcat-8082的SomeServlet类内容:
(5)Nginx配置
(6)效果
Nginx内置了三种负载均衡策略,另外,其还支持第三方的负载均衡。而每种负载均衡主机根据负载均衡策略的不同,又可设置很多性能相关的属性
默认的负载均衡策略,其是按照各个主机的权重比例依次进行请求分配的。该策略适用的场景是:根据主机性能设置不同权重。
对于每台主机,除了像weight一样可以设置的属性外,还可以设置如下属性
指定负载均衡器按照基于客户端IP的分配方式,该策略确保了相同的客户端的请求一直发送到相同的服务器,以保证session会话,解决了session不能跨服务器的问题
需要注意:
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/