Nginx+Tomcat+Redis实现负载均衡与Session共享之四 — Nginx+Tomcat实现负载均衡

前言:

      本系列文章的目的,在于记录下来本人本次实现Nginx+Tomcat+Redis实现负载均衡,tomcat集群并同时解决Session共享整个流程的攻坚细节。在这个过程中也在网上搜索了许多资料,但是发现许多资料都不完全,有许多遗漏,学习使用起来会碰到许多错误却没有解决办法。秉着一个交流学习的原则,这次我将从Java的JDK安装起到整个集群的实现,将每一个细节点都记录下来。使学习者通俗易懂,大家都能跟着步骤一步步搭建并成功运行。

PS:本次搭建是在Win环境下实现,后续本人将在Linux环境下搭建运行,并仍会写成博客记录下来。


一、环境配置

      测试环境是基于WinServer 2012 R2,tomcat、nginx的配置如下

          


二、Tomcat7配置

      1、tomcat7下载(本次搭建我使用的版本如上表格所示,是7.0.81

     tomcat7.0.81下载地址

      2、修改tomcat的server.xml

      修改 tomcat解压路径\conf\server.xml配置文件下的三个参数(防止端口冲突,tomcat启动失败)

     









      3、启动两个tomcat

 

三、Nginx的安装与启动

      1、Nginx下载(本次搭建我使用的版本如上表格所示,是1.12.1

      登陆Nginx官网下载一个Nginx 地址:http://nginx.org/en/download.html

      2、解压下载下来的nginx-1.12.1.zip文件

      3、开启Nginx,此处有两种方式

          1)进入文件目录 ...\nginx\nginx-1.12.1,双击 nginx.exe 文件

          2)使用命令模式

      Nginx+Tomcat+Redis实现负载均衡与Session共享之四 — Nginx+Tomcat实现负载均衡_第1张图片


      4、进行第三步骤后,可发现有个窗口一闪而过。而查看进程却没有nginx.exe存在,说明nginx启动失败。失败原因查询可见如下博文

      ngnix启动失败:http://blog.csdn.net/xie_xiansheng/article/details/78028051


      Nginx启动成功后,可以在任务管理器里看到如下两个进程

      Nginx+Tomcat+Redis实现负载均衡与Session共享之四 — Nginx+Tomcat实现负载均衡_第2张图片


四、Nginx负载均衡配置

      1、nginx.config配置文件简介

      我们进入解压后的nginx文件,我的路径如下:E:\tomcat7+jdk7+nginx\nginx\nginx-1.12.1\conf ,我们可以打开nginx.config文件,可以看到这样一段配置

      Nginx+Tomcat+Redis实现负载均衡与Session共享之四 — Nginx+Tomcat实现负载均衡_第3张图片

      我们仔细分析一下:

      1)listen:表示当前的代理服务器监听的端口,默认监听80端口。注意,如果我们配置了多个server,这个listen配置需要不同。

      2)server_name:表示监听到之后我们需要转到哪个站点,默认是直接转发到本地localhost

      3)location:表示匹配的路径,默认配置"/"表示所有的请求都被拦截匹配到这里。location这里可以使用正则表达式来过滤请求,使得动静分离(静态文件交由nginx处理,tomcat只处理动态文件如jsp)

      4)root:配置了root时表示当匹配到这个location请求的路径时,将会在这个文件夹内寻找相应的文件

      5)index:当没有指定主页时,默认会选择这个指定的文件,它可以有多个,并且按照配置的顺序来加载。如果前一个不存在,则继续向下寻找。

      6)error_page:代表错误页面

 

      2、实现Nginx负载均衡的配置

      1)在nginx.config文件的http内server外添加一个upstream,然后在server里location内添加proxy_pass,使用http://+upstream的方式。

    upstream myServer {
	    server 10.2.1.248:8081 weight=1 max_fails=1 fail_timeout=10s;
	    server 10.2.1.248:8082 weight=1 max_fails=1 fail_timeout=10s;
    }
		

    server {
        listen       8080;    #测试机80端口已经被占用,所以监听8080
        server_name  localhost;

        location / {
            proxy_pass http://myServer;   #将upstream的myServer填写下来
        }

        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }

    }



      2)upstream配置详解

      从上面实例不难看出upstream中server指令语法如下:
        server address [parameters]
        server:
必填。
        address:也必选,可以是主机名、域名、ip或unix socket,也可以指定端口号。
        parameters是可选参数,可以是如下参数:
        down:表示当前server已停用
        backup:表示当前server是备用服务器,只有其它非backup后端服务器都挂掉了或者很忙才会分配到请求。
        weight:表示当前server负载权重,权重越大被请求几率越大。默认是1.
        max_failsfail_timeout一般会关联使用,如果某台server在fail_timeout时间内出现了max_fails次连接失败,那么Nginx会认为其已经挂掉了,从而在fail_timeout时间内不再去请求它,fail_timeout默认是10s,max_fails默认是1,即默认情况是只要发生错误就认为服务器挂掉了,如果将max_fails设置为0,则表示取消这项检查。

      3、重启nginx

      使用命令模式,reload一下nginx的配置文件,重新启动nginx。

      Nginx+Tomcat+Redis实现负载均衡与Session共享之四 — Nginx+Tomcat实现负载均衡_第4张图片


五、负载均衡测试

      1、编写测试jsp页面,覆盖 E:\tomcat7+jdk7\tomcat7\apache-tomcat-7.0.81\webapps\ROOT 路径下的index.jsp

      2、或者直接复制代码覆盖index.jsp文件,测试代码如下

    <%@ page language="java" %>  
      
      TomcatA  
        
       
        
Session ID <%= session.getId() %>
Created on <%= session.getCreationTime() %>
sessionID:<%=session.getId()%>
SessionIP:<%=request.getServerName()%>
SessionPort:<%=request.getServerPort()%> <% //为了区分,第二个可以是2222 out.println("This is Tomcat Server 1111"); %>


      3、浏览器访问localhost:8080,观察到如下结果,说明负载均衡配置完成!


      第一次访问,访问到的是tomcat_1,即端口号为:8081的tomcat

      Nginx+Tomcat+Redis实现负载均衡与Session共享之四 — Nginx+Tomcat实现负载均衡_第5张图片


      第二次访问,访问到的是tomcat_2,即端口号为:8082的tomcat

      Nginx+Tomcat+Redis实现负载均衡与Session共享之四 — Nginx+Tomcat实现负载均衡_第6张图片




你可能感兴趣的:(架构,nginx,tomcat,负载均衡,集群)