Nginx+Tomcat+Memcached

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這裏寫圖片描述
這裏寫圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章