nginx+tomcat+memcached
利用memcached把多个tomcat的session集中管理,前端利用nginx负载均衡实现高可用。
memcached采用交叉存储,在文末说明
1. 安装包
jdk-7u79-linux-x64.tar.gz ##Java 语言的软件开发工具包
apache-tomcat-7.0.37.tar.gz ##tomcat包
在server2虚拟机上:
tar zxf jdk-7u79-linux-x64.tar.gz -C /usr/local/ ##解压至/usr/local目录
tar zxf apache-tomcat-7.0.37.tar.gz -C /usr/local/
1. 配置
1.jdk
cd /usr/local/
ln -s jdk1.7.0_79/ java ##软连接,方便调用
vim /etc/profile ##修改全局变量
export JAVA_HOME=/usr/local/java
export CLASSPATH=.:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
export PATH=$PATH:$JAVA_HOME/bin
source /etc/profile ##使修改的环境变量生效
cd ~
vim test.java ##用于测试java
public class test {
public static void main(String[] arge) {
System.out.println("Hello World!");
}
}
测试:
javac test.java ##测试是否有错误
java test ##运行
1.tomcat
cd /usr/local/
ln -s apache-tomcat-7.0.37/ tomcat ##软连接,方便调用
cd tomcat/bin
./startup.sh ##启动tomcat
cd /usr/local/tomcat/webapps/ROOT ##测试页
vim test.jsp
the time is: <%=new java.util.Date()%>
测试:
172.25.36.2:8080 ##tomcat为8080端口
172.25.36.2:8080/test.jsp ##测试页
1.tomcat+nginx
server1:
vim /usr/local/lnmp/nginx/conf/nginx.conf
location ~ \.jsp$ { ##当有以.jsp结尾的访问时代理访问172.25.36.2:8080
proxy_pass http://172.25.36.2:8080;
}
nginx -s reload
测试:
172.25.36.1/test.jsp
2.tomcat+nginx+memcache
2.server3:
yum install -y memcached ##安装memcached缓存包
/etc/init.d/memcached start ##运行memcached服务
2.server2:
yum install -y memcached
/etc/init.d/memcached start
下###2.1.3载memcached的session管理模块包至/usr/local/tomcat/lib/
asm-3.2.jar
kryo-1.04.jar
kryo-serializers-0.10.jar
memcached-session-manager-tc7-1.6.3.jar
memcached-session-manager-1.6.3.jar
minlog-1.2.jar
msm-kryo-serializer-1.6.3.jar
reflectasm-1.01.jar
spymemcached-2.7.3.jar
vim /usr/local/tomcat/conf/context.xml
<Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
memcachedNodes="n1:172.25.36.2:11211,n2:172.25.36.3:11211" ##设置memcached的两个节点
failoverNodes="n1" ##当memcached停止运行时将session信息存储至n1节点
requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$"
transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory"
/>
vim /usr/local/tomcat/webapps/ROOT/test.jsp ##用作测试memcache缓存存储情况,server3同
<%@ 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>");
String dataName = request.getParameter("dataName");
if (dataName != null && dataName.length() > 0) {
String dataValue = request.getParameter("dataValue");
session.setAttribute(dataName, dataValue);
}
out.print("<b>Session list</b>");
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="test.jsp" method="POST">
name:<input type=text size=20 name="dataName">
<br>
key:<input type=text size=20 name="dataValue">
<br>
<input type=submit>
</form>
</body>
</html>
cd /usr/local/tomcat/bin/
./startup.sh ##启动tomcat服务
2.server3:
同server2操作
vim /usr/local/tomcat/conf/context.xml
<Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
memcachedNodes="n1:172.25.36.2:11211,n2:172.25.36.3:11211" ##设置memcached的两个节点
failoverNodes="n2" ##当memcached服务器停止运行时将session信息存储至n2节点
requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$"
transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory"
cd /usr/local/tomcat/bin/
./startup.sh ##启动tomcat服务
server1:
vim /usr/local/lnmp/nginx/confnginx.conf
http {
upstream westos { ##负载均衡组
server 172.25.36.2:8080;
server 172.25.36.3:8080;
}
location ~ \.jsp$ { ##以.jsp结尾的访问直接调用westos组负载均衡
proxy_pass http://westos;
测试:
server2:
cd /usr/local/tomcat
tail -f logs/catalina.out #查看当前缓存
web界面:
172.25.36.1/test.jsp #写入信息,web上写入后会有缓存的ID可用telnet查看
server3:
telnet localhost 11211 ##访问本地的11211即memcached端口,可查看到在web上写入的缓存。
get ‘ID’
telnet 172.25.36.2 11211 ##访问server2的memcacehd,查看发现并无缓存
get ‘ID’
3.1sticky
因为nginx1.12.0不支持sticky,需要另外下载sticky的组件包且重新编译nginx时将sticky组件包加入
server1:
安装包:
nginx-goodies-nginx-sticky-module-ng-c78b7dd79d0d.tar.gz
tar zxf nginx-goodies-nginx-sticky-module-ng-c78b7dd79d0d.tar.gz
重新编译nginx且加入sticky模块
./configure --prefix=/opt/nginx --user=nginx --group=nginx --with-threads --with-file-aio --with-http_ssl_module --with-http_stub_status_module --add-module=/root/nginx-goodies-nginx-sticky-module-ng-c78b7dd79d0d
make && make install
vim /opt/nginx/conf/nginx.conf
http {
upstream westos {
sticky; ##sticky模式
server 172.25.36.2:8080;
server 172.25.36.3:8080;
}
location ~ \.jsp$ {
proxy_pass http://westos;
测试:
打开firefox访问172.25.36.1/test.jsp,然后按F12添加storage,查看cookies