使用Nginx和Tomcat来做负载均衡与集群(垂直集群)

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

参考博客:

http://www.cnblogs.com/whtydn/p/4950524.html

http://blog.csdn.net/sxdtzhaoxinguo/article/details/49182063

Nginx官方网站:http://nginx.org/http://nginx.org/

Tomcat集群配置官方文档:http://tomcat.apache.org/tomcat-8.0-doc/cluster-howto.html

环境:

JDK 1.7.0_80

Tomcat 8.0.35(准备2个,分别拷贝在不同目录下即可)

Nginx 1.12.1

windows10

下载安装Nginx服务器

JDK和Tomcat的安装就不说了。

在官网上下载Nginx:http://nginx.org/en/download.html

解压到任意目录即可。

然后在安装目录下打开cmd,输入命令start nginx,即可开启Nginx服务器。

打开浏览器输入访问localhost,出现如下界面证明Nginx开启成功。

使用Nginx和Tomcat来做负载均衡与集群(垂直集群)_第1张图片

Nginx服务器默认使用80端口,若您的80端口被占用,可修改至其它未占用端口。

在如下地方修改,打开Niginx根目录->conf->nginx.conf配置文件。

使用Nginx和Tomcat来做负载均衡与集群(垂直集群)_第2张图片

关于nginx更多命令,参考官方文档:http://nginx.org/en/docs/windows.html

使用Nginx和Tomcat来做负载均衡与集群(垂直集群)_第3张图片

配置负载均衡

由于我们是在同一台机器上搭建负载均衡(垂直集群),故启动两台Tomcat服务器实例为了防止端口号冲突,则需要修改Tomcat的Server.xml的端口号。

我们修改其中一个tomcat的端口号,需要修改的地方如下(一共三个):

155927_Zq9i_2608182.png

160039_7PAA_2608182.png

160101_JwV5_2608182.png

然后是配置 Niginx根目录->conf->nginx.conf配置文件,

在http模块内加入如下代码:

upstream  localhost{  
	   server localhost:8080 weight=1;
	   server localhost:9090 weight=1;
	}

使用Nginx和Tomcat来做负载均衡与集群(垂直集群)_第4张图片

上图服务器端口号对应于以下tomcat server.xml中配置的端口号:

160039_7PAA_2608182.png

然后在以下块中加入两行。

使用Nginx和Tomcat来做负载均衡与集群(垂直集群)_第5张图片

记得在两个tomcat中部署测试用的项目。

我用来测试的jsp文件内容为(这个测试jsp文件是从网上Copy来的哟,不过挺好用):

<%@ page language = "java" import = "java.util.*" pageEncoding = "UTF-8" %>
<%@taglib prefix = "c" uri = "http://java.sun.com/jsp/jstl/core" %>
<%
    String path = request.getContextPath();
    String basePath =
            request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + path + "/";
%>



    
    
    


    Server Info:
    <%
        out.println(request.getLocalAddr() + " : " + request.getLocalPort() + "
");%> <% out.println("
ID " + session.getId() + "
"); // 如果有新的 Session 属性设置 String dataName = request.getParameter("dataName"); if (dataName != null && dataName.length() > 0) { String dataValue = request.getParameter("dataValue"); session.setAttribute(dataName, dataValue); } out.println("Session 列表
"); System.out.println("============================"); Enumeration e = session.getAttributeNames(); while (e.hasMoreElements()) { String name = (String) e.nextElement(); String value = session.getAttribute(name).toString(); out.println(name + " = " + value + "
"); System.out.println(name + " = " + value); } %>
名称:
值:

然后,

重启Nginx服务器和两个tomcat服务器。

现在测试负载均衡的效果,

我们先单独通过Tomcat服务器访问,

8080端口服务器正常访问:

使用Nginx和Tomcat来做负载均衡与集群(垂直集群)_第6张图片

9090端口服务器正常访问:

使用Nginx和Tomcat来做负载均衡与集群(垂直集群)_第7张图片

以上证明我们的Tomcat服务器启动正常。

现在通过Nginx访问四次:

使用Nginx和Tomcat来做负载均衡与集群(垂直集群)_第8张图片

使用Nginx和Tomcat来做负载均衡与集群(垂直集群)_第9张图片

使用Nginx和Tomcat来做负载均衡与集群(垂直集群)_第10张图片

使用Nginx和Tomcat来做负载均衡与集群(垂直集群)_第11张图片

从以上四次访问中我们可以看到已经实现了Nginx的负载均衡。

配置Tomcat的集群(Session的复制)

tomcat的集群配置非常简单,我们来看看官网的文档描述的配置步骤,

使用Nginx和Tomcat来做负载均衡与集群(垂直集群)_第12张图片

我们需要在tomcat的server.xml中的Engine标签下加入Cluster节点内容:

        

          

          
            
            

            
              
            
            
            
          

          
          

          

          
        

以上这些都是tomcat的默认配置,根据官方描述,若全部使用默认配置的话我们只需要取出以下注释即可,不需要再加入上面那一大段配置:

使用Nginx和Tomcat来做负载均衡与集群(垂直集群)_第13张图片

这里我们需要注意的是,两个tomcat中都需要配置这个,但是Cluster中Receiver节点中的port属性值不能一样,防止端口冲突。

我们将其中一个tomcat的此属性设置为4001:

使用Nginx和Tomcat来做负载均衡与集群(垂直集群)_第14张图片

然后在部署在2个tomcat的测试项目中的web.xml文件中加入节点:

使用Nginx和Tomcat来做负载均衡与集群(垂直集群)_第15张图片

其实这些配置在上面给的的官网截图中已有描述了。

配置完毕。

重启两个tomcat服务器。

现在来测试。

打开页面如下:

使用Nginx和Tomcat来做负载均衡与集群(垂直集群)_第16张图片

现在输入名称和值,点击提交,页面如下:

使用Nginx和Tomcat来做负载均衡与集群(垂直集群)_第17张图片

现在我们把端口号为9090的Tomcat服务器关闭,模拟服务器宕机的情况。

再输入名称和值(名称跟前一次不要一样),点击提交,页面如下:

使用Nginx和Tomcat来做负载均衡与集群(垂直集群)_第18张图片

我们发现在9090tomcat添加的值在8080中依然存在,证明在9090中创建的Session在8080中也复制了一份,所以出现这种情况。

故,至此,我们实现了Tomcat集群。

 

 

转载于:https://my.oschina.net/u/2608182/blog/1542983

你可能感兴趣的:(使用Nginx和Tomcat来做负载均衡与集群(垂直集群))