使用Memcached 實現Tomcat 集羣會話一致性

Tomcat 集羣會話一致性實現css

第1章 Tomcat概述html

1.1 Tomcat 概述前端

Tomcat官方網站:http://tomcat.apache.org/java

Tomcat Apache軟件基金會(Apache Software Foundation)的 Jakarta 項目中的一個核心項目,由 ApacheSun和其餘一些公司及我的共同開發而成。因爲有了Sun的參與和支持,最新的ServletJSP規範老是能在Tomcat中獲得體現,Tomcat 5 支持最新的Servlet 2.4JSP 2.0規範。由於Tomcat技術先進、性能穩定,並且免費,於是深受 Java 愛好者的喜好並獲得了部分軟件開發商的承認,成爲目前比較流行的Web應用服務器。目前互聯網的主流開發語言仍然是JAVAPHP。固然Python發展勢頭很猛。node

Tomcat服務器是一個免費的開放源代碼的Web應用服務器,屬於輕量級應用服務器,在中小型系統和併發訪問用戶不是不少的場合下被廣泛使用,是開發和調試JSP程序的首選。Tomcat IIS Web服務器同樣,具備處理 HTML 頁面的功能。不過,Tomcat處理靜態HTML的能力不如 Apache服務器。linux

1.2 Tomcat的特色nginx

1. Tomcat運行時佔用的系統資源小,擴展性好,支持負載均衡與郵件服務等開發應用系統經常使用的功能;web

2. Tomcat是一個開源的web服務器 ;redis

3. Tomcat是一個小型的輕量級應用服務器,在中小型系統和併發訪問用戶不是不少的場合下被廣泛使用,是開發和調試JSP程序的首選。數據庫

4. 對於一個初學者來講,能夠這樣認爲,當在一臺機器上配置好Apache服務器,可利用它響應對HTML頁面的訪問請求。實際上Tomcat部分是Apache服務器的擴展,因此當你運行tomcat時,它實際上做爲一個Apache獨立的進程單獨運行的。 當配置正確時,ApacheHTML頁面服務,而Tomcat實際上運行JSP頁面和Servlet。另外,TomcatIISApacheWeb服務器同樣,具備處理HTML頁面的功能,另外它仍是一個ServletJSP容器,獨立的Servlet容器是Tomcat的默認模式。

5. Tomcat處理靜態HTML的能力不如Apache服務器。


1.3 Tomcat 重要目錄說明

/bin - Tomcat 腳本存放目錄(如啓動、關閉腳本)


.sh:文件用於 Unix 系統; .bat 文件用於 Windows 系統

 

/conf:            Tomcat 配置文件目錄

 

/logs:            Tomcat 默認日誌目錄。


./logs/catalina.outTomcat實時日誌文件。

Tomcat啓動成功後會在改文件寫入以下信息:能夠用於判斷tomcat是否啓動成功

org.apache.catalina.startup.Catalina.start Server startup in 606 ms


/webapps:     webapp 運行的目錄。


/work            工做目錄,用以產生有JSP編譯出的Servlet.java.class文件。

 

/temp            臨時目錄。




1.4 Tomcat下Session一致性的實現方案

1) 請求精肯定位

session sticky,例如基於訪問iphash策略,即當前用戶的請求都集中定位到一臺服務器中,這樣單臺服務器保存了用戶的session登陸信息,若是宕機,則等同於單點部署,會丟失,會話不復制。

2) session複製共享

session replication,如tomcat自帶session共享,主要是指集羣環境下,多臺應用服務器之間同步session,使session保持一致,對外透明。 若是其中一臺服務器發生故障,根據負載均衡的原理,調度器會遍歷尋找可用節點,分發請求,因爲session已同步,故能保證用戶的session信息不會丟失,會話複製,

此方案的不足之處:

a. 必須在同一種中間件之間完成(如:tomcat-tomcat之間)。

b. session複製帶來的性能損失會快速增長.特別是當session中保存了較大的對象,並且對象變化較快時, 性能降低更加顯著,會消耗系統性能。這種特性使得web應用的水平擴展受到了限制。

c. Session內容經過廣播同步給成員,會形成網絡流量瓶頸,即使是內網瓶頸。

在大併發下表現並很差。

3) 基於cache DB緩存的session共享

基於memcache/redis緩存的session共享.即便用cacheDB存取session信息,應用服務器接受新請求將session信息保存在cache DB中,當應用服務器發生故障時,調度器會遍歷尋找可用節點,分發請求,當應用服務器發現session不在本機內存時,則去cacheDB中查找,若是找到則複製到本機,這樣實現session共享和高可用。


1.5 Tomcat集羣session同步方案有如下幾種方式

1)使用tomcat自帶的cluster方式

多個tomcat間自動實時複製session信息,配置起來很簡單。但這個方案的效率比較低,在大併發下表現並很差。

2)利用nginx的基於訪問iphash路由策略

保證訪問的ip始終被路由到同一個tomcat上,這個配置更簡單。每一個請求按訪問iphash結果分配,這樣每一個訪客固定訪問一個後端服務器,能夠解決session(並非共享session解決)的問題! 而且若是應用是某一個局域網大量用戶同時登陸,但這種方式可能會致使負載不那麼均衡。

3)利用nginx插件實現tomcat集羣和session同步

nginx-upstream-jvm-route是一個Nginx的擴展模塊,用來實現基於CookieSession Sticky的功能。可是遺憾的是,這個模塊的補丁在nginx1.4版本以後就沒有再更新了,因此nginx1.4以後版本跟該模塊就不兼容了!! 

4)利用memcached實現(MSM工具)

memcached存儲session,並把多個tomcatsession集中管理,前端再利用nginx負載均衡和動靜態資源分離,在兼顧系統水平擴展的同時又能保證較高的性能。即經過MSM工具把TomcatSession序列化後保存到Memcached裏面,從而實現Session共享。

5)利用redis實現

使用redis不只僅能夠將緩存的session持久化,還由於它支持的單個對象比較大,並且數據類型豐富,不僅是緩存 session,還能夠作其餘用途,能夠一舉幾得。Redis這種方式目前還不支持Tomcat8環境(如今網上插件不支持tomcat8,非要支持tomcat8,則需修改插件jar包的源代碼!)

6)利用filter方法實現

這種方法比較推薦,由於它的服務器使用範圍比較多,不只限於tomcat ,並且實現的原理比較簡單容易控制。

7)利用terracotta服務器共享session

這種方式配置比較複雜。

 

Tomcat集羣中,當一個節點出現故障,雖然有高可用集羣來負責故障轉移,但用戶的session信息如何保持呢?

下面介紹第4種方案,session複製同步使用MSMMemcache-Session-Manager),即利用MSM+MemcachedSession共享。


1.6 MSM(Memcached-Session-Manager)的介紹

1.6.1 MSM介紹

詳細介紹能夠參考博文:http://www.javashuo.com/article/p-zxhcwtlb-nr.html

MSM是一個高可用的Tomcat Session共享解決方案,除了能夠從本機內存快速讀取Session信息(僅針對黏性Session)外,還可以使用Memcached存取Session,以實現高可用。

傳統tomcat集羣,會話複製隨着結點數增多,擴展性成爲瓶頸。MSM使用memcached完成統一管理tomcat會話,避免tomcat結點間過多會話複製。

MSM利用ValueTomcat 閥)對Request進行跟蹤。Request請求到來時,從memcached加載sessionRequest請求結束時,將tomcat session更新至memcached,以達到session共享之目的, 支持stickynon-sticky模式:

sticky 會話粘連模式(黏性session)。客戶端在一臺tomcat實例上完成登陸後,之後的請求均會根據IP直接綁定到該tomcat實例。

no-sticky:會話非粘連模式(非粘性session)。客戶端的請求是隨機分發,多臺tomcat實例均會收到請求。


1.6.2 cookiesession

在進行環境部署以前,要對cookiesession的工做機制很是瞭解,若是不瞭解其中的原理且只是機械性地去按照參考文檔部署,那麼這是毫無心義的。

1cookie是怎麼工做的?

加入咱們建立了一個名字爲loginCookie來包含訪問者的信息,建立Cookie時,服務器端的Header以下面所示,這裏假設訪問者的註冊名是「xiaoruan」,同時還對所建立的Cookie的屬性如pathdomainexpires等進行了指定。

1. Set-Cookie:login=xiaoruan;path=/;domain=xruan.com;

2. expires=Monday,01-Mar-99 00:00:01 GMT

提示:

1. 上面這個Header會自動在瀏覽器端計算機的Cookie文件中添加一條記錄。瀏覽器將變量名爲「login」的Cookie賦值爲「wangshibo」。

注意,在實際傳遞過程當中這個Cookie的值是通過了URLEncode方法的URL編碼操做的。 這個含有Cookie值的HTTP Header被保存到瀏覽器的Cookie文件後,Header就通知瀏覽器將Cookie經過請求以忽略路徑的方式返回到服務器,完成瀏覽器的認證操做。

2. 此外,咱們使用了Cookie的一些屬性來限定該Cookie的使用。例如Domain屬性可以在瀏覽器端對Cookie發送進行限定,具體到上面的例子,該Cookie只能傳到指定的服務器上,而決不會跑到其餘的Web站點上去。Expires屬性則指定了該Cookie保存的時間期限,例如上面的Cookie在瀏覽器上只保存到1999311秒。 固然,若是瀏覽器上Cookie太多,超過了系統所容許的範圍,瀏覽器將自動對它進行刪除。至於屬性Path,用來指定Cookie將被髮送到服務器的哪個目錄路徑下。

說明:瀏覽器建立了一個Cookie後,對於每個針對該網站的請求,都會在Header中帶着這個Cookie;不過,對於其餘網站的請求Cookie是絕對不會跟着發送的。並且瀏覽器會這樣一直髮送,直到Cookie過時爲止。

2)session是如何工做的?

因爲http是無狀態的協議,你訪問了頁面A,而後再訪問B頁面,http沒法肯定這2個訪問來自一我的,所以要用cookiesession來跟蹤用戶,根據受權和用戶身份來 顯示不一樣的頁面。好比用戶A登錄了,那麼能看到本身的我的信息,而B沒登錄,沒法看到我的信息。還有A可能在購物,把商品放入購物車,此時B也有這個過程, 你沒法肯定AB的身份和購物信息,因此須要一個session ID來維持這個過程。

cookie是服務器發給客戶端並保持在客戶端的一個文件,裏面包含了用戶的訪問信息(帳戶密碼等),能夠手動刪除或設置有效期,在下次訪問的時候,會返給服務器。

注意:cookie能夠被禁用,因此要想其餘辦法,這就是sessioncookie數據存放在客戶的瀏覽器上,session數據放在服務器上。cookie同時也是session id的載體,cookie保存session id。另外:cookie不是很安全,別人能夠分析存放在本地的cookie並進行cookie欺騙,考慮到安全應當使用sessionsession是服務器端緩存,cookie是客戶端緩存。因此建議:將登錄信息等重要信息存放爲session;其餘信息若是須要保留,能夠放在cookie中。

好比:你去商場購物,商場會給你辦一張會員卡,下次你來出示該卡,會有打折優惠,該卡能夠本身保存(cookie),或是商場代爲保管,因爲會員太多,我的須要保存卡號信息(session ID)

3)爲何要持久化session(共享session)?

緣由是在客戶端每一個用戶的Session對象存在Servlet容器中,若是Tomcat服務器重啓或者宕機的話,那麼該session就會丟失,而客戶端的操做會因爲session丟失而形成數據丟失;若是當前用戶訪問量巨大,每一個用戶的Session裏存放大量數據的話,那麼就很佔用服務器大量的內存,進而導致服務器性能受到影響。

可使用數據庫持久化session,分爲物理數據庫和內存數據庫。物理數據庫備份session,因爲其性能緣由,不推薦;內存數據庫可使用redismemcached,這裏介紹memcached的方法。


1.6.3 MSM工做原理

1Sticky Session(黏性) 模式下的工做原理:

Tomcat本地Session爲主SessionMemcached 中的Session爲備SessionRequest請求到來時, memcached加載備 Session tomcat (僅當tomcat jvmroute發生變化時, 不然直接取Tomcat Session)Request請求結束時,將Tomcat Session更新至memcached,以達到主備同步之目的。 安裝在Tomcat上的MSM使用本機內存保存Session,當一個請求執行完畢以後,若是對應的Session在本地不存在(即某用戶的第一次請求),則將該Session複製一份至Memcached;當該Session的下一個請求到達時,會使用Tomcat的本地Session,請求處理結束以後,Session的變化會同步更新到 Memcached,保證數據一致。當集羣中的一個Tomcat掛掉,下一次請求會被路由到其餘Tomcat上。負責處理此此請求的Tomcat並不清楚Session信息,因而從Memcached查找該Session,更新該Session並將其保存至本機。這次請求結束,Session被修改,送回Memcached備份。

2Non-sticky Session (非黏性)模式下的工做原理(記住:多臺tomcat集羣或多個tomcat實例時須要選擇Non-Sticky模式,即sticky="false"):

Tomcat本地Session爲中轉SessionMemcached1爲主Session,Memcached2爲備SessionRequest請求到來時,從Memcached2加載備Sessiontomcat,(當容器中仍是沒有Session 則從Memcached1加載主Sessiontomcat,這種狀況是隻有一個memcached節點,或者有Memcached1 出錯時),Request請求結束時,將Tomcat Session更新至主Memcached1和備memcached2,而且清除Tomcat Session 。以達到主備同步之目的。 多臺tomcat集羣時 須要選擇Non-Sticky模式,即sticky="false"



第2章 搭建過程

Tomcat 集羣所須要的軟件包能夠訪問個人分享獲取:

連接:https://pan.baidu.com/s/1HzgOCNRbE7Ol8IJIMA-hHw

提取碼:jziw


2.1 環境說明

操做系統:          Cent OS 7.6,內核版本:3.10.0-957.el7.x86_64

Tomcat            tomcat-8.5.42

Memcached    memcached.x86_64-1.4.15-10.el7_3.1

 

主機規劃:


主機名

安裝軟件

IP地址

角色

nginx-distributor

nginx-1.16.1-1

192.168.0.11

調度器

tomcat01

apache-tomcat-8.5.42

192.168.0.12

Tomcat Server

tomcat02

apache-tomcat-8.5.42

192.168.0.13

Tomcat Server

memcached01

memcached-1.4.15-10

192.168.0.14

Memcached緩存服務器

memcached02

memcached-1.4.15-10

192.168.0.15

Memcached緩存服務器


Tomcat集羣會話一致性原理圖:

image.png


2.2 部署Tomcat集羣

2.2.1 安裝配置Nginx調度器

1步:安裝nginx

直接使用yum安裝:

yum install -y nginx

提示:用yum安裝nginx須要epel源。

2步:Nginx調度器最簡單配置

修改前先備份,好習慣:

cp /etc/nginx/nginx.conf{,.bak}

清空原來的配置文件:

> /etc/nginx/nginx.conf

加入如下內容:

user nginx;
worker_processes 6;
error_log /var/log/nginx/error.log;
pid /var/run/nginx.pid;
 
include /usr/share/nginx/modules/*.conf;
 
events {
    worker_connections 15000;
}
 
http {
    sendfile       on;
    tcp_nopush      on;
    tcp_nodelay     on;
    keepalive_timeout  30;
    types_hash_max_size  2048;
 
    include /etc/nginx/conf.d/*.conf;
    upstream tomcat {
                 server 192.168.0.12:8080 weight=20;
                 server 192.168.0.13:8080 weight=20;
             }
    server {
 
        include /etc/nginx/default.d/*.conf;
 
        location ~\.jsp$ {
            proxy_pass http://tomcat;
            include proxy_params;
        }
 
    }
}

3步:啓動nginx

systemctl start nginx

說明:使用rpm包就是方便。

2.2.2 安裝配置Tomcat

1步:下載Tomcat集羣所需軟件包

Tomcat

Tomcat官方網站下載二進制包:

https://archive.apache.org/dist/tomcat/tomcat-8/v8.5.42/bin/apache-tomcat-8.5.42.tar.gz

 

JDK

最新版:https://www.oracle.com/technetwork/java/javase/downloads/index.html

歸檔版本:https://www.oracle.com/technetwork/java/javase/archive-139210.html


下載的軟件包放到/root/softwares/目錄:

[root@tomcat01 ~]# ll softwares/

image.png

2步:安裝配置JDK

注意:若是系統中安裝了openjdk,必須先卸載:

yum -y remove java-*

 

開始安裝配置JDK

cd /root/softwares
tar xf jdk-8u191-linux-x64.tar.gz -C /usr/local/
cat > /etc/profile.d/jdk.sh << EOF
#JDK Config
JAVA_HOME=/usr/local/jdk1.8.0_191
PATH=\$JAVA_HOME/bin:\$PATH
CLASSPATH=\$JAVA_HOME/jre/lib/ext:\$JAVA_HOME/lib/tools.jar
export PATH JAVA_HOME CLASSPATH
EOF
source /etc/profile.d/jdk.sh


3步:安裝Tomcat(在兩臺Tomcat Server上操做)

cd /root/softwares
tar xf apache-tomcat-8.5.42.tar.gz -C /usr/local/src
cd /usr/local/src/
mv apache-tomcat-8.5.42 ../tomcat
echo "export CATALINA_HOME=/usr/local/tomcat" > /etc/profile.d/tomcat.sh
source /etc/profile.d/tomcat.sh


注意:Tomcat有兩種安裝方式,一種是直接解壓就可使用的二進制文件,第二種是編譯安裝,我這裏採用了第一種方法,下載的Tomcat軟件直接解壓就能夠執行的二進制文件,由於在官方默認下載的即是使用第一種方法安裝,解壓後的目錄以下:

image.png

4步:配置Tomcat啓動腳本並啓動tomcat(在兩臺Tomcat Server上操做)

cat > /etc/init.d/tomcat << EOF
#!/bin/bash
#
# tomcat startup script for the Tomcat server
#
# chkconfig: 345 80 20  
# description: start the tomcat deamon
#
# Source function library
JAVA_HOME=/usr/local/jdk1.8.0_191
export JAVA_HOME
CATALINA_HOME=/usr/local/tomcat
export CATALINA_HOME  
case "\$1" in
start)
    echo "Starting Tomcat..."
    \$CATALINA_HOME/bin/startup.sh
    ;;
stop)
    echo "Stopping Tomcat..."
    \$CATALINA_HOME/bin/shutdown.sh
    ;;
restart)
    echo "Stopping Tomcat..."
    \$CATALINA_HOME/bin/shutdown.sh
    sleep 2
    echo
    echo "Starting Tomcat..."
    \$CATALINA_HOME/bin/startup.sh
    ;;
*)
    echo "Usage: \$prog {start|stop|restart}"
    ;;
esac
exit 0
EOF
chmod +x /etc/init.d/tomcat
chkconfig --add tomcat
chkconfig --level 345 tomcat on
service tomcat start

 

查看tomcat狀態:

[root@tomcat01 ~]# lsof -i :8080

image.png

5步:測試Tomcat

命令行測試:

[root@tomcat02 ~]# curl -I 192.168.0.12:8080
HTTP/1.1 200
Accept-Ranges: bytes
ETag: W/"14-1591538432000"
Last-Modified: Sun, 07 Jun 2020 14:00:32 GMT
Content-Type: text/html
Content-Length: 14
Date: Sun, 14 Jun 2020 10:14:59 GMT

說明:Tomcat Server運行沒有問題。

6步:配置Tomcat(在兩臺Tomcat Server上操做)

修改server.xml文件:根據你的實際環境修改便可

128     <Engine name="Catalina" defaultHost="bbs.xruan.com">
…………………………………………………………………………………
148       <Host name="bbs.xruan.com"  appBase="/var/www/html/"
149             unpackWARs="true" autoDeploy="true">
150         <Context path="" docBase="/var/www/html/tomcat/" />
151
152         <!-- SingleSignOn valve, share authentication between web applications
153              Documentation at: /docs/config/valve.html -->
154         <!--
155         <Valve className="org.apache.catalina.authenticator.SingleSignOn" />
156         -->
157
158         <!-- Access log processes all example.
159              Documentation at: /docs/config/valve.html
160              Note: The pattern used is equivalent to using pattern="common" -->
161         <Valve className="org.apache.catalina.valves.AccessLogValve" directory="/var/log/tomcat/"
162                prefix="bbs.xruan.com_access" suffix=".log"
163                pattern="%h %l %u %t &quot;%r&quot; %s %b" />
164
165       </Host>

修改完後重啓tomcat

service tomcat restart

 

創建測試頁面:

tomcat01

創建站點目錄:

mkdir -p /var/www/html/tomcat

建立測試頁面:

vim /var/www/html/tomcat/index.jsp

加入如下內容:

<html>
        <body bgcolor="blue">
                <center>
                <h1>Session ID: <%out.print(request.getSession().getId()) ;%></h1>
                <h1>192.168.10.12</h1>
                <h1>port:8080</h1>
                <h1>Tomcat-Server-1</h1>
        </body>
</html>

 

tomcat02

創建站點目錄:

mkdir -p /var/www/html/tomcat

建立測試頁面:

vim /var/www/html/tomcat/index.jsp

加入如下內容:

<html>
        <body bgcolor="yellow">
                <center>
                <h1>Session ID: <%out.print(request.getSession().getId()) ;%></h1>
                <h1>192.168.10.13</h1>
                <h1>port:8080</h1>
                <h1>Tomcat-Server-2</h1>
        </body>
</html>

 

7步:在瀏覽器測試

經過nginx調度器訪問:http://192.168.0.11/index.jsp

image.png

刷新:

image.png

說明:不斷刷新的話,能夠看見會話號(Session ID)會不斷變化。


2.2.3 安裝配置Memcached

1步:安裝memcached(在memcached01memcached02上操做)

yum install -y memcached

2步:修改memcached監聽(在memcached01memcached02上操做)

修改前先備份:

cp /etc/sysconfig/memcached{,.bak}

 

memcached01

vim /etc/sysconfig/memcached

按以下內容修改:OPTIONS部分

PORT="11211"
USER="memcached"
MAXCONN="1024"
CACHESIZE="64"
OPTIONS="-l 192.168.0.14"

 

memcached02

vim /etc/sysconfig/memcached

按以下內容修改:紅色字部分

PORT="11211"
USER="memcached"
MAXCONN="1024"
CACHESIZE="64"
OPTIONS="-l 192.168.0.15"

說明:

1. 參數「-l IP」表示指定memcached的監聽地址。

2. 參數「-l」 中的「l」是小寫字母「l」,不是數字「1」。


3步:啓動memcached(在memcached01memcached02上操做)

systemctl start memcached

查看:

memcached01

[root@memcached01 ~]# netstat -tunpl | grep memcached

image.png

memcached02

[root@memcached02 ~]# netstat -tunpl | grep memcached

image.png

4步:修改Tomcat配置(在兩臺Tomcat Server上操做)

修改前先備份:

/usr/local/tomcat/conf/context.xml{,.bak}

修改context.xml文件:<Manager ......../>段

<Context>
 
     <!-- Default set of monitored resources. If one of these changes, the    -->
     <!-- web application will be reloaded.                                   -->
     <WatchedResource>WEB-INF/web.xml</WatchedResource>
     <WatchedResource>${catalina.base}/conf/web.xml</WatchedResource>
     <Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
         memcachedNodes="n1:192.168.0.14:11211,n2:192.168.0.15:11211"
         failoverNodes="n2"
         sticky="false"
         sessionBackupAsync="false"
         lockingMode="auto"
         requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$"
         transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory"
     />
 
     <!-- Uncomment this to disable session persistence across Tomcat restarts -->
     <!--
     <Manager pathname="" />
     -->
</Context>

 

保存後從新啓動tomcat

service tomcat start

5步:把MSM相關的JAR包拷貝到tomcatlib目錄下

cp /root/softwares/msm-jar/* /usr/local/tomcat/lib/

6步:在瀏覽器中測試

地址欄輸入:http://192.168.0.1/index.jsp

image.png

 

刷新:

image.png

注意:訪問的是nginx調度器的地址。

如今會話號(Session ID)保持不變。


第3章  遇到的錯誤

1)配置tomcat中配置memcached後啓動失敗

tail -f catalina.out日誌報以下錯誤:

10-Jun-2020 22:56:55.568 INFO [bbs.xruan.com-startStop-1] de.javakaffee.web.msm.MemcachedSessionService.startInternal MemcachedSessionService starts initialization... (configured nodes definition n1:192.168.0.14:11211,n2:192.168.0.15:11211, failover nodes n2)
10-Jun-2020 22:56:55.570 SEVERE [bbs.xruan.com-startStop-1] org.apache.catalina.core.StandardContext.startInternal The session manager failed to start
       org.apache.catalina.LifecycleException: Failed to start component [de.javakaffee.web.msm.MemcachedBackupSessionManager[]]
              at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:167)
              at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5253)
              at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
              at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1423)
              at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1413)
              at java.util.concurrent.FutureTask.run(FutureTask.java:266)
              at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
              at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
              at java.lang.Thread.run(Thread.java:748)
       Caused by: java.lang.AbstractMethodError: de.javakaffee.web.msm.MemcachedBackupSessionManager.getContainer()Lorg/apache/catalina/Container;
              at de.javakaffee.web.msm.MemcachedSessionService.createMemcachedNodesManager(MemcachedSessionService.java:477)
              at de.javakaffee.web.msm.MemcachedSessionService.startInternal(MemcachedSessionService.java:423)
              at de.javakaffee.web.msm.MemcachedBackupSessionManager.startInternal(MemcachedBackupSessionManager.java:505)
              at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
              ... 8 more
10-Jun-2020 22:56:55.571 SEVERE [bbs.xruan.com-startStop-1] org.apache.catalina.core.StandardContext.startInternal Context [] startup failed due to previous errors
10-Jun-2020 22:56:55.580 INFO [bbs.xruan.com-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deploying web applicationdirectory [/var/www/html/tomcat]

 

訪問頁面也有錯誤:

image.png

Description The origin server did not find a current representation for the target resource or is not willing to disclose that one exists.

緣由:msm所需的軟件包版本問題致使的。

解決:更換msm軟件包。


本文部份內容參考自:

http://www.javashuo.com/article/p-zztogkqv-bs.html

http://www.javashuo.com/article/p-fscvfzzu-bq.html

相關文章
相關標籤/搜索