系统运行环境为CentOS6.5云服务器,其实在Windows Server服务器上也是一样的。
一、软件准备
1、安装Nginx
安装博文链接:
http://blog.youkuaiyun.com/kevin_coder/article/details/66971711
2、安装Tomcat7
CentOS上Tomcat的安装其实就是个解压操作,去Tomcat官网下载7*.tar.gz包,使用命令unzip src -d dist 解压即可,此处不重点讲解了。
3、安装Memcached
二、配置Nginx与Tomcat实现项目集群
1、Tomcat配置:
准备两个Tomcat服务器(可以是部署在同一个服务器上的),修改TOMCAT_HOME/conf/server.xml,修改端口号,保证两台Tomcat运行不会端口冲突
SHUTDOWN端口:
<Server port="8005" shutdown="SHUTDOWN">
<Server port="7005" shutdown="SHUTDOWN">
服务监听端口:
<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />
<Connector port="9080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="7443" />
以及
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
<Connector port="7009" protocol="AJP/1.3" redirectPort="7443" />
配置路由(jvmRoute名称随意):
<Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat1">
<Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat2">
2、Nginx配置集群:
修改/usr/local/nginx/conf/nginx.conf文件
#测试MSM负载均衡配置,在http{}中配置
upstream test.msm.cn {
#ip_hash;
server localhost:8080;
server localhost:9080;
}
server {
listen 80;
server_name *.domain.cn;
location / {
proxy_pass http://test.msm.cn; #反向代理
#设置主机头和客户端真实地址,以便服务器获取客户端真实IP
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
以上就是实现了,客户端访问www.domain.cn时,Nginx将请求分发至localhost:8080及localhost:9080两台Tomcat服务器。
配置好之后,启动nginx ——> 启动Tomcat,测试集群是否生效。可以修改自带ROOT项目首页,以作区分。
三、配置Tomcat实现Session共享
1、下载MSM所需Jar包(若没特殊需求,请使用本文提供的下载地址下载)下载地址:
http://download.youkuaiyun.com/detail/kevin_coder/9795402,将以上jar包放置到TOMCAT_HOME/lib下;
2、修改TOMCAT_HOME/conf/content.xml文件,<Context>节点中添加:
<Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
sticky="false"
memcachedNodes="n1:localhost:11211"
requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$"
sessionBackupAsync="false"
sessionBackupTimeout="1800"
transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory"/>
说明:
sticky="false"表示非粘性
memcachedNodes:memcached所在主机IP及端口号,此处只有一个节点,若有多个:n1:localhost:11211,n2:192.168.1.168:11211
requestUriIgnorePattern:过滤规则,方行图片、样式、js静态资源
sessionBackupAsync:是否异步保存Session,此处设置为非
sessionBackupTimeout:session保存过期时间,单位毫秒,若超时则放弃此次保存Session操作
transcoderFactoryClass:序列化类,使用Memcached推荐的类去序列化
3、以上两点,两个Tomcat下同步雷同操作。
四、联调测试
测试页面准备,例如:
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8" %>
<%@ page session="true" %>
<%
String path = request.getContextPath();
String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + path + "/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>主机01-Memcached-session-manager</title>
</head>
<body >
主机01
<%
out.print("<br> SESSION-ID:"+session.getId()+"<br>");
out.print("<br> SESSION-PORT:"+request.getServerPort()+"<br>");
out.print("<br> SESSION-IP:"+request.getServerName()+"<br>");
out.println("<br>This is Tomcat Server 8080<br>");
%>
</body>
</html>
启动Memcached、启动Nginx、启动两个Tomcat
浏览器访问www.domain.cn,若发现服务器有切换但sessionID保持不变,则说明集群及Session都配置成功了。