前言:
本系列文章的目的,在于记录下来本人本次实现Nginx+Tomcat+Redis实现负载均衡,tomcat集群并同时解决Session共享整个流程的攻坚细节。在这个过程中也在网上搜索了许多资料,但是发现许多资料都不完全,有许多遗漏,学习使用起来会碰到许多错误却没有解决办法。秉着一个交流学习的原则,这次我将从Java的JDK安装起到整个集群的实现,将每一个细节点都记录下来。使学习者通俗易懂,大家都能跟着步骤一步步搭建并成功运行。
PS:本次搭建是在Win环境下实现,后续本人将在Linux环境下搭建运行,并仍会写成博客记录下来。
测试环境是基于WinServer 2012 R2,tomcat、nginx的配置如下
1、tomcat7下载(本次搭建我使用的版本如上表格所示,是7.0.81)
tomcat7.0.81下载地址
2、修改tomcat的server.xml
修改 tomcat解压路径\conf\server.xml配置文件下的三个参数(防止端口冲突,tomcat启动失败)
3、启动两个tomcat
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)使用命令模式
4、进行第三步骤后,可发现有个窗口一闪而过。而查看进程却没有nginx.exe存在,说明nginx启动失败。失败原因查询可见如下博文
ngnix启动失败:http://blog.csdn.net/xie_xiansheng/article/details/78028051
Nginx启动成功后,可以在任务管理器里看到如下两个进程
1、nginx.config配置文件简介
我们进入解压后的nginx文件,我的路径如下:E:\tomcat7+jdk7+nginx\nginx\nginx-1.12.1\conf ,我们可以打开nginx.config文件,可以看到这样一段配置
我们仔细分析一下:
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;
}
}
从上面实例不难看出upstream中server指令语法如下:
server address [parameters]
server:必填。
address:也必选,可以是主机名、域名、ip或unix socket,也可以指定端口号。
parameters是可选参数,可以是如下参数:
down:表示当前server已停用
backup:表示当前server是备用服务器,只有其它非backup后端服务器都挂掉了或者很忙才会分配到请求。
weight:表示当前server负载权重,权重越大被请求几率越大。默认是1.
max_fails和fail_timeout一般会关联使用,如果某台server在fail_timeout时间内出现了max_fails次连接失败,那么Nginx会认为其已经挂掉了,从而在fail_timeout时间内不再去请求它,fail_timeout默认是10s,max_fails默认是1,即默认情况是只要发生错误就认为服务器挂掉了,如果将max_fails设置为0,则表示取消这项检查。
3、重启nginx
使用命令模式,reload一下nginx的配置文件,重新启动nginx。
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
第二次访问,访问到的是tomcat_2,即端口号为:8082的tomcat