真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

Nginx+Tomcat+memcached實現(xiàn)sessionserver

寫在前面

我們提供的服務(wù)有:網(wǎng)站設(shè)計制作、網(wǎng)站建設(shè)、微信公眾號開發(fā)、網(wǎng)站優(yōu)化、網(wǎng)站認(rèn)證、阜新ssl等。為千余家企事業(yè)單位解決了網(wǎng)站和推廣的問題。提供周到的售前咨詢和貼心的售后服務(wù),是有科學(xué)管理、有技術(shù)的阜新網(wǎng)站制作公司


前一篇文章為大家解釋說明了會話的類型,今天這篇文章將帶領(lǐng)大家一步一步實現(xiàn)一個簡單的session server,主要是讓大家理解session server的工作過程,當(dāng)然了對于中小向站點,這個結(jié)構(gòu)也完全夠用了。本節(jié)主體結(jié)構(gòu):

  • memcached-session-manager介紹

  • 網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)

  • Nginx反向代理配置

  • Tomcat配置

  • memcached配置

  • 測試

  • 錯誤分析

 

memcached-session-manager介紹


memcached-session-manager是一個將會話保存在memcached或redis中的tomcat會話管理器,用于高可用的,可伸縮和容錯的Web服務(wù)場景中。 它支持粘性和非粘性配置,目前正在使用tomcat 6.x,7.x和8.x. 對于粘性會話,支持會話故障轉(zhuǎn)移(tomcat崩潰),對于非粘性會話,這是默認(rèn)的(對于不同的請求,會話由不同的tomcats默認(rèn)提供)。 此外memcached故障轉(zhuǎn)移(memcached崩潰)通過會話遷移來實現(xiàn)。 也不應(yīng)該有單點故障,所以當(dāng)memcached失敗時,會話不會丟失并且可以在tomcat或其他memcached中使用。

在配置上你必須把spymemcached jar和memcached-session-manager jar放到tomcat對應(yīng)的lib目錄下。 如果您想使用Redis而不是memcached,則需要使用Redis客戶端“jedis”對應(yīng)的.jar包, 還需要在Manager類并添加一些配置屬性以便能夠?qū)崿F(xiàn)將會話存儲至memcached中,memcached自身不具有配置功能,必須依賴前端的Tomcat或其他類服務(wù)器。

對于一個簡單的實現(xiàn),您只需要安裝一個tomcat(6,7或8)和一個memcached或Redis(或支持memcached協(xié)議的s.th.)。 在您的生產(chǎn)環(huán)境中,您可能會擁有多個tomcats,并且在不同的硬件上也應(yīng)該有多個memcached節(jié)點可用。 或者,您可以將會話數(shù)據(jù)存儲在Redis中而不是memcached中。 您可以使用粘性會話或非粘性會話,memcached-session-manager(msm)支持兩種操作模式。

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

 

網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)


這里主要是用于一臺Nginx實現(xiàn)前端調(diào)度,后面連接兩臺Tomcat應(yīng)用程序服務(wù)器,在tomcat的后端添加兩臺memcached存儲,實現(xiàn)一個小型的架構(gòu),當(dāng)然了這里省略了離客戶端最近的DNS服務(wù)器,以及靠近用戶的一個負(fù)載均衡集群,以及負(fù)載均衡之后的緩存服務(wù)器集群。其簡單架構(gòu)與網(wǎng)絡(luò)地址規(guī)劃如下:

Nginx+Tomcat+memcached實現(xiàn)session server

本文的所有主機都是centos7.3版本

Nginx反向代理配置


對于nginx來說,這本實驗中只是起了調(diào)度的作用,即反向代理的作用,并沒有實現(xiàn)動靜分離,路徑重寫等操作,這里主要是將客戶端的請求調(diào)度至后端應(yīng)用程序服務(wù)器Tomcat。所以配置起來就顯得容易的多,只需要定義一個upstream組即可。然后按相應(yīng)的算法調(diào)度即可。集體配置如下:

[root@vin ~]# vim /etc/nginx/nginx.conf
...
http {
    upstream vinsent {                      # 定義服務(wù)器集群
            server 192.168.14.66:8080;
            server 192.168.14.77:8080;
    }
    server {
        listen       80 ;
        listen       [::]:80 default_server;
        server_name  _;
        root         /usr/share/nginx/html;

        # Load configuration files for the default server block.
        include /etc/nginx/default.d/*.conf;

        location / {
                proxy_pass      #  將請求代理至后端Tomcat服務(wù)器
        }
        ...
}

Tomcat配置


Tomcat作為應(yīng)用程序服務(wù)器,主要作用是處理jsp文件,在這里,我們需要提供一個用于測試的文件index.jsp以及對應(yīng)版本的.jar包。主要是memcached-session-manager相關(guān)的jar包,和用于將前端的用戶的cookie信息序列化成”鍵-值”格式的工具,

1)安裝tomcat及相關(guān)的服務(wù)包

[root@vin tools]# cat /etc/redhat-release      # 版本檢測
CentOS Linux release 7.3.1611 (Core)
[root@vin tools]# iptables -F                  # 關(guān)閉防火墻與selinux
[root@vin tools]# setenforce 0

[root@vin tools]# yum install java-1.7.0-openjdk-devel.x86_64   #  安裝jdk

[root@vin tools]# yum installtomcat tomcat-lib tomcat-admin-webapps tomcat-webapps tomcat-docs-webapp

2)提供context容器

分別在兩個tomcat上的某host上定義一個用于測試的context容器,并在其中創(chuàng)建一個會話管理器。

[root@vin webapps]# vim /etc/tomcat/server.xml 
...
    
    
        
    
    
...

3)分別為兩個context提供測試頁面

測試目錄的結(jié)構(gòu)如下

Nginx+Tomcat+memcached實現(xiàn)session server

[root@vin webapps]# cat /usr/share/tomcat/webapps/test/index.jsp
<%@ page language="java" %>
    
        TomcatA
        
            

TomcatA.vinsent.cn

                                          Session ID                 <% session.setAttribute("vinsent.cn","vinsent.cn"); %>                 <%= session.getId() %>                                           Created on                 <%= session.getCreationTime() %>                                         # 說明:為了看到這個過程,你在TomCatB主機上應(yīng)該將修改為TomcatB.vinsent.cn

4)下載jar包

這里的jar包主要分為兩類,一種是memcached-session-manager相關(guān)的包,還有一種是與序列化相關(guān)的包:序列化包主要有4大類:

  • kryo-serializer:  msm-kryo-serializer, kryo-serializers-0.34+, kryo-3.x, minlog, reflectasm,  asm-5.x, objenesis-2.x

  • javolution-serializer:  msm-javolution-serializer, javolution-5.4.3.1

  • xstream-serializer:  msm-xstream-serializer, xstream, xmlpull, xpp3_min

  • flexjson-serializer: msm-flexjson-serializer, flexjson

下載地址:https://github.com/magro/memcached-session-manager/wiki/SetupAndConfiguration


    在這里我們選擇分開放置,當(dāng)然了你也可以全部放置在lib目錄下:

[root@vin webapps]# tree /usr/share/tomcat/webapps/test/
/usr/share/tomcat/webapps/test/
├── index.jsp
└── WEB-INF
    └── lib
        ├── javolution-5.4.3.1.jar
        └── msm-javolution-serializer-2.1.1.jar

2 directories, 3 files

[root@vin webapps]# ls /usr/share/tomcat/lib/
annotations-api.jar      extras                                   tomcat7-websocket.jar  tomcat-jsp-2.2-api.jar
catalina-ant.jar         jasper-el.jar                            tomcat-api.jar         tomcat-juli.jar
catalina-ha.jar          jasper.jar                               tomcat-coyote.jar      tomcat-servlet-3.0-api.jar
catalina.jar             jasper-jdt.jar                           tomcat-el-2.2-api.jar  tomcat-util.jar
catalina-tribes.jar      log4j.jar                                tomcat-i18n-es.jar     websocket-api.jar
commons-collections.jar  memcached-session-manager-2.1.1.jar      tomcat-i18n-fr.jar
commons-dbcp.jar         memcached-session-manager-tc7-2.1.1.jar  tomcat-i18n-ja.jar
commons-pool.jar         spymemcached-2.12.3.jar                  tomcat-jdbc.jar

Memcached配置


對于memcached服務(wù)器的配置其實很簡單,由于memcached自身不能夠主動存儲cookie信息,只需要在memcached服務(wù)器上安裝memcached服務(wù)就行,至于對數(shù)據(jù)進行序列化則是由前面的服務(wù)器來實現(xiàn)的。

[root@vin ~]# yum install memcached             # 安裝memcached,我已安裝
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
Package memcached-1.4.15-10.el7.x86_64 already installed and latest version
Nothing to do
[root@vin ~]# systemctl start memcached         # 啟動服務(wù)
[root@vin ~]# ss -tnl | grep 1121               # 檢查服務(wù)是否正常啟動
LISTEN     0      128          *:11211                    *:*                  
LISTEN     0      128         :::11211                   :::*

測試


我們在客戶端進行測試。在瀏覽器中輸入nginx的地址:刷新你會看到,訪問的內(nèi)容發(fā)生了改變,但是cookie值并沒有發(fā)生改變。

Nginx+Tomcat+memcached實現(xiàn)session server

錯誤分析


1 序列化出現(xiàn)故障

    常見現(xiàn)象如下,沒次訪問cookie值都會隨著改變,說明為存儲至memcached數(shù)據(jù)庫中。

Nginx+Tomcat+memcached實現(xiàn)session server

2 訪問時提示404錯誤頁

這種情況多數(shù)是context為配置正確,或則在提供的index.jsp文件所在的目錄結(jié)構(gòu)錯誤

3 版本不對應(yīng)

     如果你能排除以上錯誤,仍然不能訪問的話,說明你提供的jar包版本與你的tomcat版本不一致。


本文名稱:Nginx+Tomcat+memcached實現(xiàn)sessionserver
本文路徑:http://weahome.cn/article/gcihis.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部