参考地址:
http://www.cnblogs.com/zhrxidian/p/5432886.html
http://blog.csdn.net/chszs/article/details/42610365
环境:
window 7 X64
nginx 1.10.2
tomcat 7.0-X64
redis-x64-3.05
jdk7
负载均衡
代理服务器通过一定的计算规则将用户请求转发到真实的不同服务器上。
1、下载并安装nginx
这里下载的是1.10.2稳定版本:
下载完成后,解压到某个文件夹下:
直接启动nginx.exe 即可.访问http://localhost看是否能进入nginx首页。
而且如果启动成功了,可以在任务管理其中看到。
如果无法在任务管理其中找到该服务,看下日志文件,是否端口被占用(nginx默认端口号是80)。
可以在conf/nginx.conf中修改端口号80为8888。
2、准备Tomcat服务器
由于是一台机器,这里下载并拷贝出一份tomcat7.0,如下图:
这里我修改了两个服务的端口号分别为:18080,19080
同时还修改了ajp端口号:18843,19943
tomcat 1:
tomcat2:
在网上找的一个测试项目,我这里放在了webapps/root下面,index.jsp的内容
<%@ page contentType="text/html; charset=GBK"%>
<%@ page import="java.util.*"%>
<html>
<head>
<title>Cluster App Test</title>
</head>
<body>
Server Info:
<%
out.println(request.getLocalAddr() + " : " + request.getLocalPort() + "<br>");
%>
<%
out.println("<br> ID " + session.getId() + "<br>");
// 如果有新的 Session 属性设置
String dataName = request.getParameter("dataName");
if (dataName != null && dataName.length() > 0) {
String dataValue = request.getParameter("dataValue");
session.setAttribute(dataName, dataValue);
}
out.println("<b>Session 列表</b><br>");
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 + "<br>");
System.out.println(name + " = " + value);
}
%>
<form action="index.jsp" method="POST">
名称:
<input type=text size=20 name="dataName">
<br>
值:
<input type=text size=20 name="dataValue">
<br>
<input type=submit>
</form>
</body>
</html>
这里分别启动tomcat1和tomcat2,分别访问成功
3、配置nginx负载均衡服务器
在http中找到server,配置集群服务,权重均为1.
这里需要注意的是upstream中的url,不要带更目录,例如localhost:18080/test
此时分别启动nginx,tomcat1,tomcat2.访问
http://localhost:8888
刷新访问,可以看到:
通过不同的刷新可以看到两个服务器被交替访问了。但是session值不同。
redis实现tomcat的session共享
负载均衡时,同一个用户访问不同服务器时,得到相同的session值。
1、下载并安装redis-x64-3.05
(官网是不支持windows系统的),开源为我们提供了window x64的redis,下载地址:
http://pan.baidu.com/s/1o8JbzIU
下载解压后,通过命令行进入redis-server.exe所在目录,执行
redis-server redis.windows.conf 命令
可以看到:
说明安装,启动成功,可以redis-cli.exe进行验证。设置值set name zhangsan
获取值:get name.
利用第三方提供的tomcat-redis-session-manager.
将下图中src/main/java下的类编译,打包生成
tomcat-redis-session.jar.(
这里用的是jdk1.7
)
具体的打包生成jar命令是通过命令行进入编译后的文件目录,执行jar -cvf tomcat-redis-session.jar *.*
我们共需要三个jar包:
其中tomcat-redis-seesion.jar需要自己生成。
2、将上面的三个jar包分别添加到tomcat的lib目录下,并配置tomcat的context.xml文件。
添加如下内容:
<Valve className="com.orangefunction.tomcat.redissessions.RedisSessionHandlerValve"/>
<Manager className="com.orangefunction.tomcat.redissessions.RedisSessionManager"
host="127.0.0.1"
port="6379"
database="0"
maxInactiveInterval="60"
/>
如下图:
这里注意端口号是6379,是上面redis启动成功后的端口号。
分别启动redis数据库,nginx,tomcat1,tomcat2
3、上面的所有服务启动成功后,访问htt://localhost:8888
录入test=123提交,刷新访问:
刷新访问了不同的服务器器,且session值保持不变。