亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Nginx+Tomcat+memcached實現session server

發布時間:2020-07-18 23:09:13 來源:網絡 閱讀:1150 作者:vincenteve 欄目:建站服務器

寫在前面


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

  • memcached-session-manager介紹

  • 網絡拓撲結構

  • Nginx反向代理配置

  • Tomcat配置

  • memcached配置

  • 測試

  • 錯誤分析

 

memcached-session-manager介紹


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

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

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

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

 

網絡拓撲結構


這里主要是用于一臺Nginx實現前端調度,后面連接兩臺Tomcat應用程序服務器,在tomcat的后端添加兩臺memcached存儲,實現一個小型的架構,當然了這里省略了離客戶端最近的DNS服務器,以及靠近用戶的一個負載均衡集群,以及負載均衡之后的緩存服務器集群。其簡單架構與網絡地址規劃如下:

Nginx+Tomcat+memcached實現session server

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


Nginx反向代理配置


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

[root@vin ~]# vim /etc/nginx/nginx.conf
...
http {
    upstream vinsent {                      # 定義服務器集群
            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服務器
        }
        ...
}


Tomcat配置


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

1)安裝tomcat及相關的服務包

[root@vin tools]# cat /etc/redhat-release      # 版本檢測
CentOS Linux release 7.3.1611 (Core)
[root@vin tools]# iptables -F                  # 關閉防火墻與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容器,并在其中創建一個會話管理器。

[root@vin webapps]# vim /etc/tomcat/server.xml 
...
    <Host name="node1.vin.cn" appBase="/data/webapps" autoDeploy="true">
    <Context path="/test" docBase="/usr/local/tomcat/webapps/test" reloadable="true">
        <Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
            memcachedNodes="n1:192.168.14.99:11211,n2:192.168.14.88:11211"
            failoverNodes="n1"
            requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$"
            transcoderFactoryClass="de.javakaffee.web.msm.serializer.javolution.JavolutionTranscoderFactory"
        />
    </Context>
    </Host>
...

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

測試目錄的結構如下

Nginx+Tomcat+memcached實現session server

[root@vin webapps]# cat /usr/share/tomcat/webapps/test/index.jsp
<%@ page language="java" %>
    <html>
        <head><title>TomcatA</title></head>
        <body>
            <h2><font color="green">TomcatA.vinsent.cn</font></h2>
            <table align="centre" border="1">
            <tr>
                <td>Session ID</td>
                <% session.setAttribute("vinsent.cn","vinsent.cn"); %>
                <td><%= session.getId() %></td>
            </tr>
            <tr>
                <td>Created on</td>
                <td><%= session.getCreationTime() %></td>
            </tr>
            </table>
        </body>
    </html>

# 說明:為了看到這個過程,你在TomCatB主機上應該將修改為TomcatB.vinsent.cn

4)下載jar包

這里的jar包主要分為兩類,一種是memcached-session-manager相關的包,還有一種是與序列化相關的包:序列化包主要有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


    在這里我們選擇分開放置,當然了你也可以全部放置在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服務器的配置其實很簡單,由于memcached自身不能夠主動存儲cookie信息,只需要在memcached服務器上安裝memcached服務就行,至于對數據進行序列化則是由前面的服務器來實現的。

[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         # 啟動服務
[root@vin ~]# ss -tnl | grep 1121               # 檢查服務是否正常啟動
LISTEN     0      128          *:11211                    *:*                  
LISTEN     0      128         :::11211                   :::*


測試


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

Nginx+Tomcat+memcached實現session server


錯誤分析


1 序列化出現故障

    常見現象如下,沒次訪問cookie值都會隨著改變,說明為存儲至memcached數據庫中。

Nginx+Tomcat+memcached實現session server

2 訪問時提示404錯誤頁

這種情況多數是context為配置正確,或則在提供的index.jsp文件所在的目錄結構錯誤

3 版本不對應

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






向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

墨江| 五家渠市| 米泉市| 闻喜县| 和平区| 双牌县| 库伦旗| 祁东县| 左贡县| 霍山县| 田东县| 江川县| 元阳县| 庆城县| 大荔县| 阜康市| 林芝县| 浦县| 甘泉县| 正宁县| 阿克苏市| 金塔县| 团风县| 禹城市| 德清县| 丹东市| 墨江| 佛山市| 浮山县| 大邑县| 双鸭山市| 司法| 茌平县| 安庆市| 彭山县| 讷河市| 宜君县| 河西区| 芦溪县| 梧州市| 曲水县|