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