nginx+tomcat+memcache+session綁定

節點信息

節點1 ip:172.16.30.1 nginx

節點101 ip:172.16.30.101 tomcat

節點102 ip:172.16.30.102 tomcat

通過nginx代理訪問後端tomcat,並實現memcache的會話綁定,即同一個瀏覽器訪問得到的session結果是一樣的

1、節點1安裝nginx

[root@node101 ~]# yum install -y nginx

1.1、啓動nginx測試

[root@node101 ~]# service nginx start


2、節點101和102分別安裝jdk和tomcat

2.1、安裝jdk,版本1.7.67

[root@node101 ~]# rpm -ivh jdk-7u67-linux-x64.rpm
Preparing...                ########################################### [100%] 
1:jdk                    ########################################### [100%] 
Unpacking JAR files... 
rt.jar... 
jsse.jar... 
charsets.jar... 
tools.jar... 
localedata.jar... 
jfxrt.jar...

導出環境變量

[root@node101 ~]# vim /etc/profile.d/jdk.sh
export JAVA_HOME=/usr/java/latest 
export PATH=$JAVE_HOME/bin:$PATH 
[root@node101 ~]# . /etc/profile.d/jdk.sh


測試是否正確安裝以及變量是否導出

[root@node101 lib]# java -version
java version "1.7.0_67" 
Java(TM) SE Runtime Environment (build 1.7.0_67-b01) 
Java HotSpot(TM) 64-Bit Server VM (build 24.65-b04, mixed mode)
2.2、安裝tomcat
[root@node101 ~]# tar xf apache-tomcat-7.0.55.tar.gz  -C /usr/local/
[root@node101 ~]# cd /usr/local/ 
[root@node101 local]# ln -sv apache-tomcat-7.0.55/ tomcat 
`tomcat' -> `apache-tomcat-7.0.55/'

導出環境變量

[root@node101 tomcat]# vim /etc/profile.d/tomcat.sh
export CATALINA_HOME=/usr/local/tomcat 
export PATH=$CATALINA_HOME/bin:$PATH 
[root@node101 tomcat]# . /etc/profile.d/tomcat.sh

啓動tomcat測試是否安裝成功以及環境變量是否導出

[root@node101 tomcat]# catalina.sh start
[root@node101 tomcat]# catalina.sh start
Using CATALINA_BASE:   /usr/local/tomcat 
Using CATALINA_HOME:   /usr/local/tomcat 
Using CATALINA_TMPDIR: /usr/local/tomcat/temp 
Using JRE_HOME:        /usr/java/latest 
Using CLASSPATH:       /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar 
Tomcat started.

訪問測試,注意這裏默認端口是8080,訪問是要注意


關閉tomcat

[root@node101 lib]# catalina.sh stop
Using CATALINA_BASE:   /usr/local/tomcat 
Using CATALINA_HOME:   /usr/local/tomcat 
Using CATALINA_TMPDIR: /usr/local/tomcat/temp 
Using JRE_HOME:        /usr/java/latest 
Using CLASSPATH:       /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar

3、安裝memcache,此處使用的是編譯安裝,版本1.4.15

[root@node101 memcached-1.4.15]# yum install -y  gcc libevent-devel
[root@node101 memcached-1.4.15]# ./configure --with-libevent --prefix=/usr/local/memcached 
[root@node101 memcached-1.4.15]# make && make install

安裝完成去安裝目錄測試是否安裝成功

[root@node101 memcached-1.4.15]# cd /usr/local/memcached/bin
[root@node101 bin]# ./memcached -i 
memcached 1.4.15 
Copyright (c) 2003, Danga Interactive, Inc. 
All rights reserved. 
以下省略N多.......

創建運行memcache的用戶,並連接

[root@node101 bin]# useradd -r memcache
[root@node101 bin]# ./memcached -d -v -p 12000 -m 512 -u memcache

解釋:-d表示以守護進程方式運行memcached;-v表示輸出警告和錯誤信息;-p指定監聽的端口號;-m指定能使用的最大內存,單位MB;-u指定運行memcached的賬戶,非root用戶。

使用# ps -ef | grep memcached查看進程。

命令基本選項說明:

-p     監聽的TCP端口 (默認: 11211)

-d    以守護進程方式運行memcached

-u     運行memcached的賬戶,非root用戶

-m     最大的內存使用,單位是MB,默認是 64 MB

-c     軟連接數量,默認是1024(最大併發連接數)

-v    輸出警告和錯誤信息

-vv    打印客戶端的請求和返回信息

-h    打印幫助信息

-i    打印memcached和libevent的版權信息

使用telnet連接驗證服務是否可用

[root@node101]# yum install -y telnet
[root@node101]# telnet 172.16.30.101 12000 
Trying 172.16.30.101... 
Connected to 172.16.30.101. 
Escape character is '^]'.

使用stats命令查看狀態,會顯示很多當前的狀態

stats
STAT pid 4838 
STAT uptime 6747 
STAT time 1422407090 
STAT version 1.4.15 
STAT libevent 1.4.13-stable
STAT pointer_size 64 
STAT rusage_user 1.142826 
STAT rusage_system 0.705892 
STAT curr_connections 12 
STAT total_connections 15 
STAT connection_structures 13 
STAT reserved_fds 20 
STAT cmd_get 16 
STAT cmd_set 8 
STAT cmd_flush 0 
STAT cmd_touch 0 
STAT get_hits 1

停止memcache服務

[root@node101]# killall memcached

4、爲tomcat配置memcache

Tomcat要支持memcached管理Session,需要調用一些jar庫文件:

memcached-session-manager項目地址,http://code.google.com/p/memcached-session-manager/

下載如下jar文件至各tomcat節點的tomcat安裝目錄下的lib目錄中,其中的${version}要換成你所需要的版本號,tc${6,7,8}要換成與tomcat版本相同的版本號。

memcached-session-manager-${version}.jar

memcached-session-manager-tc${6,7,8}-${version}.jar

spymemcached-${version}.jar

msm-javolution-serializer-${version}.jar

javolution-${version}.jar

不同的版本對應的庫文件不一樣,需要對應使用

本實驗使用的庫文件如下所示

-rw-r--r-- 1 root root  452748 Jan 28 07:43 javolution-5.4.3.1.jar
-rw-r--r-- 1 root root  146932 Jan 28 07:42 memcached-session-manager-1.8.1.jar 
-rw-r--r-- 1 root root   11283 Jan 28 07:42 memcached-session-manager-tc7-1.8.1.jar ##因爲使用的tomcat版本是7.0.55所以此處使用的是tc7 
-rw-r--r-- 1 root root   71050 Jan 28 07:43 msm-javolution-serializer-1.8.1.jar
-rw-r--r-- 1 root root  439107 Jan 28 07:42 spymemcached-2.10.2.jar ##此文件無版本區別

注意:以上節點101上的配置同樣須在節點102進行

5、配置tomcat使之可以使用memcache服務

分別在兩個tomcat上的某host上定義一個用於測試的context容器,並在其中創建一個會話管理器,如下所示:

##可以使用默認host,代碼插入位置如圖

有一處需要注意:Engine處保持默認即可,不需要添加jvmRoute

<Context path="/test" docBase="/usr/local/tomcat/webapps/test" reloadable="true">
              <Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
                memcachedNodes="n1:172.16.100.9:11211,n2:172.16.100.10:11211"
                failoverNodes="n1"
                requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$"
                transcoderFactoryClass="de.javakaffee.web.msm.serializer.javolution.JavolutionTranscoderFactory"
              />
             </Context>

分別爲兩個context提供測試頁面:

節點101:

# mkdir -pv /usr/local/tomcat/webapps/test/WEB-INF/{classes,lib}# vim /usr/local/tomcat/webapps/test/index.jsp

添加如下內容

<%@ page language="java" %>
<html>
  <head><title>TomcatA</title></head>
  <body>
    <h1><font color="red">TomcatA.magedu.com</font></h1>
    <table align="centre" border="1">
      <tr>
        <td>Session ID</td>
    <% session.setAttribute("magedu.com","magedu.com"); %>
        <td><%= session.getId() %></td>
      </tr>
      <tr>
        <td>Created on</td>
        <td><%= session.getCreationTime() %></td>
     </tr>
    </table>
  </body>
</html>

節點102:

# mkdir -pv /usr/local/tomcat/webapps/test/WEB-INF/{classes,lib}
# vim /usr/local/tomcat/webapps/test/index.jsp

添加如下內容:

<%@ page language="java" %>
<html>
  <head><title>TomcatB</title></head>
  <body>
    <h1><font color="blue">TomcatB.magedu.com</font></h1>
    <table align="centre" border="1">
      <tr>
        <td>Session ID</td>
    <% session.setAttribute("magedu.com","magedu.com"); %>
        <td><%= session.getId() %></td>
      </tr>
      <tr>
        <td>Created on</td>
        <td><%= session.getCreationTime() %></td>
     </tr>
    </table>
  </body>
</html>

分別訪問測試


如果此時將n1即節點101的memcache關閉的話,再次訪問session信息便會在n2上

因爲訪問的是兩個節點所以session信息並不一樣,如果通過前端代理訪問則會是同一個session

下面將通過設置nginx實現前端代理實現memcache的session綁定

配置nginx

[root@node1 ~]# vim /etc/nginx/nginx.conf
在http段中添加upstream
upstream tomcat {
server 172.16.30.101:80;
server 172.16.30.102:80;
}
在location中添加代理
location / {
root   html;
index  index.jsp index.html index.htm;
proxy_pass    http://tomcat;
}

按下圖修改即可


重新載入nginx

[root@node1 ~]# service nginx reloadReloading nginx:                                           [  OK  ]

6、訪問測試


此時無論如何刷新都不會變了,我們可以換一個瀏覽器試一試,也是相同的,這樣就實現了通過memcache做session服務器,nginx前端代理的session綁定


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