Tomcat簡單來講就是JAVA 2 EE 加上Servlet和JSP類庫的實現,tomcat=JWS(Sun)+ Jserv(ASF)css
Tomcat的核心組件:html
catalina:servlet container前端
Coyote:http connectionjava
Jasper:JSP Engine 執行引擎linux
TomcatInstance: 運行中的tomcat進程(java進程)nginx
Server:即一個tomcat實例;web
Service:用於將connector關聯至engine組件;一個service只能包含一個engine組件和一個或多個connector組件;算法
Engine:Tomcat的核心組件,用於運行jsp或servlet代碼;數據庫
Connector:接入並解析用戶請求,將請求映射爲Engine中運行的代碼;以後,將運行結果構建成響應報文;apache
Host:相似httpd中的虛擬主機;
Context:相似於httpd中的alias;
注意:每一個組件都由「類」來實現,有些組件的實現還不止一種;
頂級類組件:server
服務類組件:service
容器類組件:便可以部署webapp的組件,engine,host, context
鏈接器組件:connector
被嵌套類組件:valve,logger, realm
tomcat的主配置文件結構:
<server>
<service>
<connector/>
<connector/>
...
<engine>
<host>
<context/>
...
</host>
...
</engine>
</service>
</server>
Tomcat的目錄結構:
bin:腳本及啓動時用到的類
lib:類庫
conf:配置文件
logs:日誌文件
webapps:應用程序默認部署目錄
work:工做目錄
temp:臨時文件目錄
配置文件:
server.xml:主配置文件
context.xml:每一個webapp均可以有專用的配置文件,這些配置文件一般位於webapp應用程序目錄下的WEB-INF目錄中,用於定義會話管理器、JDBC等;conf/context.xml是爲各webapp提供默認配置;
web.xml:每一個webapp「部署」以後才能被訪問;此文件則用於爲全部的webapp提供默認部署相關的配置;
tomcat-users.xml:用戶認證的帳號和密碼配置文件;
catalina.policy:當使用-security選項啓動tomcat實例時會讀取此配置文件來實現其安全運行策略;
catalina.properties:Java屬性的定義文件,用於設定類加載器路徑等,以及一些JVM性能相關的調優參數;
logging.properties:日誌相關的配置信息;
CentOS7上默認提供的JDK是openJDK7,Tomcat7,這版本已經很新了,能夠直接yum安裝使用
要安裝Tomcat首先要安裝JDK,而後安裝Tomcat,能夠直接yum安裝,也能夠本身下載二進制格式的程序包進行安裝,
下面咱們本身下載二進制程序包進行安裝,下載jdk-8u25-linux-x64.rpm,apache-tomcat-8.0.23.tar.gz(如下的演示都是在CentOS7下作的,若是你使用的不是CentOS7可能會有些不一樣)
而後直接rpm -ivh jdk-8u25-linux-x64.rpm 安裝JDK,而後配置環境變量,編輯/etc/profile.d/java.sh文件加入exportJAVA_HOME=/usr/java/latest
export PATH=$JAVA_HOME/bin:$PATH 把JDK的路徑加入到PATH變量中,使用java回車測試下,看JDK是否安裝成功
若是出現這些信息等,就證實JDK裝好了,環境變量也配置好了
而後安裝tomcat,tar xf apache-tomcat-8.0.23.tar.gz -C /usr/local
而後切入到/usr/local目錄下,建立一個符號鏈接文件ln -sv apache-tomcat-8.0.23 tomcat
而後切入到tomcat目錄下,不用修改什麼就能夠運行tomcat(/usr/local/tomcat/bin/catalina.sh start),但爲了能夠直接使用catalina.shstart運行,須要配置環境變量,編輯/etc/profile.d/tomcat.sh 加入exportCATALINA_HOME=/usr/local/tomcat
export PATH=$CATALINA_HOME/bin:$PATH
而後使用catalina.sh start 就能夠啓動了,使用ss –tnl 就能夠發現8080端口啓用了
而後訪問測試下
能夠看到web頁面的管理界面了,裏面的3個按鈕是服務器資源和兩個管理的應用程序
點下Manager這個按鈕須要認證,如今你點擊取消,會提示你在哪修改,而後才能訪問
編輯配置文件/usr/local/tomcat/conf/tomcat-users.xml,而後加入下面三行就可使用這三個按鈕的功能了
Java WebAPP 組織結構:
有特定的組織形式、層次型的目錄結構;主要包含了servlet代碼文件、JSP頁面文件、類文件、部署描述符文件等;
例:/usr/local/tomcat/webapps/app1/
/:webapp的根目錄;
WEB-INF/:當前webapp的私有資源目錄,一般存放當前webapp自用的web.xml;
META-INF/:當前webapp的私有資源目錄,一般存放當前webapp自用的context.xml;
classes/:此webapp的私有類;
lib/:此webapp的私有類,被打包爲jar格式類;
index.jsp:webapp的主頁
手動添加一個測試應用程序:
建立webapp特有的目錄結構;
mkdir-pv myapp/{lib,classes,WEB-INF,META-INF}
提供webapp各文件,WEB-INF中應有web.xml文件,META-INF中有context.xml文件,若是沒有的話就會使用conf目錄下默認的這兩個文件;而後直接在myapp目錄下建立一個index.jsp文件,編輯內容以下:
<%@page language="java" %>
<%@page import="java.util.*" %>
<html>
<head>
<title>JSPTest Page</title>
</head>
<body>
<%out.println("Hello world!"); %>
</body>
</html>
而後canalina.sh stop 等一下子,而後在canalina.sh start;訪問測試下
能夠看到沒有問題了
而後這個時候,查看tree /usr/local/tomcat/work
能夠看到這裏面有.java文件和.class文件,這是JSP把index.jsp經過servlet轉換成.java文件,而後經過complie編譯成bytecodes自解碼的.class文件,而後在JVM中運行
部署(deployment)webapp相關的操做:
deploy:部署,將webapp的源文件旋轉於目標目錄、配置tomcat服務器可以基於context.xml文件中定義的路徑來訪問此webapp; 將其特有類經過class loader裝載至tomcat;
有兩種方式:
自動部署:autodeploy
手動部署:
1、冷部署:把webapp複製到指定位置,然後才啓動tomcat;
2、熱部署:在不中止tomcat的前提下進行的部分:
部署工具:manager、ant腳本、tcd(tomcatclient deployer)等;
undeploy:反部署,中止webapp,並從tomcat實例拆除其部分文件和部署名;
stop:中止,再也不向用戶提供服務;但其文件和部署名會在tomcat實例中
start:啓動處於「中止」狀態的webapp;
redeploy:從新部署;
tomcat自帶的應用程序:
managerapp: webapp管理工具
hostmanager:Virtual Hosts管理工具
能夠經過這兩個工具來管理webapp應用程序和虛擬主機,實現應用程序的熱部署等
tomcat啓動是開啓了3個端口一個是8080提供http鏈接器服務的,一個8005是一個管理端口,能夠telnet進入而後關閉服務;還有一個8009端口是提供ajp鏈接器服務的
Tomcat應該考慮工做情形併爲相應情形下的請求分別定義好須要的鏈接器才能正確接收來自於客戶端的請求。一個引擎能夠有一個或多個鏈接器,以適應多種請求方式。
定義鏈接器可使用多種屬性,有些屬性也只適用於某特定的鏈接器類型。通常說來,常見於server.xml中的鏈接器類型一般有4種:
1) HTTP鏈接器
2) SSL鏈接器
3) AJP 1.3鏈接器
4)proxy(JK)鏈接器
自定義Host及Context示例:
<Host name="web1.magedu.com"appBase="/data/webapps/"unpackWARs="true"autoDeploy="true">
<Contextpath="" docBase="ROOT" reloadable="true">
<ValveclassName="org.apache.catalina.valves.RemoteAddrValve"
allow="172\.16\.0\.0"/>
</Context>
<Contextpath="/shop" docBase="shopxx" reloadable="true"/>
<Valve className="org.apache.catalina.valves.AccessLogValve"directory="/data/logs" prefix="web1_access_log"suffix=".txt"
pattern="%h %l %u %t "%r" %s %b" />
</Host>
注意:path給定的路徑不能以「/」結尾;
不是默認的Host,本身定義的Host的dcoBace儘可能使用絕對路徑,要否則使用相對路徑有時會訪問不到,儘可能使用絕對路徑
下面演示一下:
修改配置文件(/usr/local/tomcat/conf/server.xml),若是是rpm包安裝的tomcat其配置文件是/etc/tomcat/server.xml
在Engine段中,加入下面內容
<Host name="centos7"appBase="/data/webapps" autoDeploy="false">
<Context path="" docBase="/data/webapps"reloadable="true"/>
<ValveclassName="org.apache.catalina.valves.AccessLogValve"directory="/data/logs"
prefix="web1_access_log" suffix=".txt"
pattern="%h %l %u %t"%r" %s %b" />
</Host>
建立目錄/data/{webapps,logs}
而後複製咱們之前建立的mydata程序的全部文件複製到/data/webapps
cp -r/usr/local/tomcat/webapps/myapp/* /data/webapps/
而後修改物理機的hosts文件,讓本機能解析到centos7
而後訪問測試下
這就沒有問題了,本身添加的虛擬主機就生效了
修改配置文件:
在裏面定義兩個Centext,一個爲默認的;而後在/data/webapps目錄下的全部文件移動到這個目錄下新建立的ROOT目錄下,而後在新建一個shopxx目錄,而後在shopxx中建立這幾個目錄和一個測試頁classes index.jsp lib META-INF WEB-INF
index.jsp中的內容
首先中止tomcat (catalina.sh stop),而後在打開(catalina.sh start)
能夠看到兩個Context都生效了。path是用來定義訪問時的url的,多個Context中path不能同樣
而後下載一個軟件shopxx而後解壓到/data/webapps目錄下,把shopxx目錄刪掉,
作一個符號鏈接ln -sv shopxx-v3.0-Beta/shopxx-3.0Beta/ shopxx
配置文件要修改下
而後在訪問下
還須要數據庫,須要安裝mariadb而後開啓,並受權
grant all on shoppxx.* toshopuser@'localhost' identified by 'shoppasswd';
grant all on shoppxx.* toshopuser@'127.0.0.1' identified by 'shoppasswd';
而後根據提示,作軟件的安裝
這樣就好了
作訪問控制的示例:
<Context path=""docBase="/data/webapps ">
<ValveclassName="org.apache.catalina.valves.RemoteAddrValve"
allow="172\.16\.0\.0"/>
</Context>
這樣作就好了
而後在咱們作的默認訪問目錄下,建立一個p_w_picpath目錄,而後裏面放兩張圖片,而後關閉tomcat再開啓,而後訪問下,看能正常訪問不
下面實現LNMT:(Nginx+tomcat)
請求的過程 client-->http --> nginx --> reverse_proxy --> http --> tomcat (httpconnector)
首先找一臺主機,安裝nginx,而後配置nginx
而後啓動服務就好了,訪問測試下
這就代理過去了,可以訪問了,但訪問的不是咱們想要的虛擬主機,
這是基於IP地址訪問的,若是tomcat的Engine中的默認虛擬主機不是咱們須要的話,咱們就要以主機名來訪問了,或者修改Tomcat的配置文件,把默認虛擬主機改成咱們須要的
修改/etc/nginx/nginx.conf
而後修改/etc/hosts文件增長一條172.16.249.195 centos7
而後重載nginx
這樣就能夠經過反代來訪問咱們須要訪問放到的虛擬主機
若是須要把靜態的讓nginx響應,讓動態的轉交給後端的tomcat
修改nginx的配置文件
而後重載nginx,訪問測試
這個時候默認請求的是index.html,因此沒有轉交給tomcat,而是nginx本身響應了
後面帶上指定的url訪問
能夠看到實現動靜分離了
實現LAMT(apache+tomcat)
訪問請求 client--> http --> httpd --> reverse_proxy --> {http|ajp} --> tomcat{http connector|ajp connector}
把剛在主機(172.16.249.159)nginx停掉,而後打開httpd服務
而後用httpd來進行反向代理
反代模塊:
主:proxy_module
子:proxy_module_http,proxy_module_ajp
還可使用第三方的模塊jk來進行反代
首先打開/etc/httpd/conf/httpd.conf註釋掉主節點即DocumentRoot這一行
在這個/etc/httpd/conf.d目錄下,建立一個虛擬主機的配置文件vhosts.conf文件
而後添加內容:
<Location />定義的是訪問的全部url都代理容許經過
ProxyRequests Off 這一項是關閉正向代理的,由於httpd中的代理是正反向均可以代理,但只能×××一種,因此要明確使用哪種代理
而後使用httpd –t檢查語法,而後在啓動httpd
這有一個警告,須要修改httpd主配置文件,給一個主機名
找到ServerName,而後修改
而後啓動httpd服務,
修改物理機的hosts文件 172.16.249.159 centos7
而後訪問測試下
能夠看到調度到後端的tomcat的centos7虛擬主機上了(ProxyPreserveHost On由於這一項是,保留本身請求的虛擬主機到後端去)
若是使用的是ip地址訪問是不會把主機名加上的因此請求的是
下面作幾個實例,實現負載均衡和會話綁定,以及session cluster和session server
示例:nginx, apache(mod_proxy_http,mod_proxy_ajp, mod_jk)負載均衡用戶請求至tomcat;額外實現session sticky;
下面的示例使用的是CentOS7下yum安裝的JDK和Tomcat
172.16.249.159(centos72)作負載均衡器,172.16.249.115(centos71)和172.16.249.112(centos73)作後端的tomcat
首先配置tomcat,使用java -version,看到系統自帶的有JDK1.7,因此這裏不在本身編譯安裝,直接yum安裝,而後安裝tomcat,yum install tomcat
而後使用rpm -qpl tomcat
能夠看到,tomcat的配置文件在/etc/tomcat/server.xml
啓動tomcat直接使用systemctl start tomcat.service
而後訪問測試下,看能訪問到主頁不
爲了之後配置方便,而後再給tomcat配置一個Host,首先建立目錄mkdir -pv /data/webapps/ROOT(/data/webapps這個目錄的屬組改成tomcat),mkdir/data/logs,而後編輯tomcat的配置文件(/etc/tomcat/server.xml)
修改配置文件,添加下面這些
而後在/data/webapps/ROOT/目錄下,建立幾個目錄和一個index.jsp文件,提供測試頁
mkdir lib classes META-INF WEB-INF,vimindex.jsp
而後另外一個tomcat節點,也作上面的這些配置,知識測試頁爲「Hello Worder!on web2」
能夠直接複製過去scp server.xml centos73:/etc/tomcat/,而後修改
scp -rp /data/ centos73:/data,而後修改index.jsp
而後重啓tomcat; systemctl restart tomcat.service
在其餘虛擬機中測試下,首先查看這個虛擬機中可否解析主機名centos71,要是用物理機測試,須要在hosts文件中加入 172.16.249.115 centos71 172.16.249.112 centos73
這樣tomcat就作好了,測試也沒問題了,
由於tomcat中的默認主機不是咱們剛配置的,只能使用主機名才能訪問,那麼負載均衡器中就要能解析到後端的tomcat主機的主機名,爲了方便,咱們能夠把tomcat的默認主機改成咱們配置的虛擬主機(Host)
在重啓一下,使用ip地址訪問測試下
下面作負載均衡:
一、 使用nginx作負載均衡器,反向代理
在172.16.249.159上安裝nginx
而後修改nginx的配置文件(/etc/nginx/nginx.conf)
而後使用nginx – t 檢查語法,而後啓動nginx
而後訪問測試下
刷新下,
能夠看到能負載均衡了,這樣nginx負載均衡tomcat就作好了
若是要作會話綁定(session sticky),只須要在nginx配置文件中修改
而後systemctl reload nginx.service,而後訪問測試
不管怎麼刷新都是這一個頁面不變了
二、 使用apache來作負載均衡器和反向代理,可使用3種模塊來負載均衡tomcat
首先停掉nginx服務systemctl stop nginx.service,而後安裝httpd
(a) mod_proxy;mod_proxy_http;mod_proxy_balancer
編輯httpd配置文件,首先進入httpd的主配置文件(/etc/httpd/conf/httpd.conf)把中心主機禁掉(這一行註釋掉DocumentRoot "/var/www/html"),而後在/etc/httpd/conf.d/目錄下,建立一個vhosts.conf文件,內容以下:
<proxy balancer://lbcluster1>
BalancerMemberhttp://172.16.249.115:8080 loadfactor=1 route=TomcatA
BalancerMemberhttp://172.16.249.112:8080 loadfactor=1 route=TomcatB
</proxy>
<VirtualHost *:80>
ServerName centos7
ProxyVia On
ProxyRequests Off
ProxyPreserveHost On
<Proxy *>
Require all granted
</Proxy>
ProxyPass /balancer://lbcluster1/
ProxyPa***everse /balancer://lbcluster1/
<Location />
Require all granted
</Location>
</VirtualHost>
而後使用httpd -t 檢查語法,而後打開httpd服務
須要修改後端tomcat的配置文件(/etc/tomcat/server.xml)
172.16.249.115上的改成:
172.16.249.112上的改成:
爲了演示效果修改測試頁面:
在TomcatA上(/data/webapps/ROOT/index.jsp)提供以下頁面
<%@ page language="java" %>
<html>
<head><title>TomcatA</title></head>
<body>
<h1><fontcolor="red">TomcatA.magedu.com</font></h1>
<tablealign="centre" border="1">
<tr>
<td>SessionID</td>
<%session.setAttribute("magedu.com","magedu.com"); %>
<td><%=session.getId() %></td>
</tr>
<tr>
<td>Createdon</td>
<td><%=session.getCreationTime() %></td>
</tr>
</table>
</body>
</html>
在TomcatB上(/data/webapps/ROOT/index.jsp)提供以下頁面
<%@ page language="java" %>
<html>
<head><title>TomcatB</title></head>
<body>
<h1><fontcolor="blue">TomcatB.magedu.com</font></h1>
<tablealign="centre" border="1">
<tr>
<td>SessionID</td>
<%session.setAttribute("magedu.com","magedu.com"); %>
<td><%=session.getId() %></td>
</tr>
<tr>
<td>Createdon</td>
<td><%=session.getCreationTime() %></td>
</tr>
</table>
</body>
</html>
而後後端tomcat重啓(systemctlrestart tomcat.service)
而後訪問測試:
能夠看到能負載均衡了,但每一次刷新後session ID都不同
下面作會話綁定(sessionsticky),
修改vhosts.conf文件:
而後檢查語法,重載httpd服務,而後測試下
而後不管怎樣刷新,都不會變了,這樣會話綁定(session sticky)就作好了
(b) mod_proxy;mod_proxy_ajp;mod_proxy_balancer
首先把vhosts.conf 重命名爲vhosts.httpd.conf.bak,而後複製vhosts.httpd.conf.bak到vhosts.ajp.conf,而後修改vhosts.ajp.conf配置文件:
而後保存退出,檢查語法,重啓httpd服務,進行測試
而後作會話綁定(sessionsticky)
只須要在裏面加入下面一行
而後重載服務,進行測試
而後刷新頁面就不會變了
(c) mod_jk;
mod_jk是ASF的一個項目,是一個工做於apache端基於AJP協議與Tomcat通訊的鏈接器,它是apache的一個模塊,是AJP協議的客戶端(服務端是Tomcat的AJP鏈接器)。
要使用這個模塊,須要編譯這個模塊,還要安裝httpd的開發包,httpd-devel gcc glibc-devel (yum -y installhttpd-devel gcc glibc-devel),安裝開發包組,首先yum grouplist,而後在可用組裏找到「開發工具」,而後安裝(yum groupinstall "開發工具"),若是已經安裝過就不用安裝了
下載tomcat-connectors-1.2.40-src.tar.gz
而後解壓,編譯安裝,使用whichapxs,由於編譯安裝時必須指apxs的安裝路徑
回車,編譯,而後make && make install
看到這個模塊生成就能夠了
而後在/etc/httpd/conf.d/目錄下,建立一個mod_jk.conf的文件,編輯內容以下:
而後在/etc/httpd/conf.d/目錄下,建立一個workers.properties文件,編輯內容以下:
而後保存,檢查語法,重啓httpd服務,而後測試
這樣負載均衡就作好了,
而後作作會話綁定(sessionsticky),須要修改workers.properties文件
而後重啓服務,進行測試
而後怎樣刷新都不會改變了,這樣會話綁定就作好了
示例:構建session cluster,實現不論基於什麼調度算法,會話的信息再也不變化,即sessionID再也不變化,
tomcat中自帶會話管理器(session manager)
StandardManager:標準會話管理器
PersistentManager:持久會話管理器
FileStore
JDBC
DeltaManager
BackupManager
前端(172.16.249.159)使用的爲http協議作反代的(2、(a)這個示例),
構建步驟:
(1) 各tomcat節點配置使用deltamaanager:在<Engine>或<Host>字段中,加入下面內容
咱們在本身定義的Host中複製下面這些內容到tomcat配置文件中,(這些內容在http://tomcat.apache.org/tomcat-8.0-doc/cluster-howto.html中)
<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"
channelSendOptions="8">
<ManagerclassName="org.apache.catalina.ha.session.DeltaManager"
expireSessionsOnShutdown="false"
notifyListenersOnReplication="true"/>
<ChannelclassName="org.apache.catalina.tribes.group.GroupChannel"> <MembershipclassName="org.apache.catalina.tribes.membership.McastService"
address="228.0.1.7"
port="45564"
frequency="500"
dropTime="3000"/> <ReceiverclassName="org.apache.catalina.tribes.transport.nio.NioReceiver"
address="auto"
port="4000"
autoBind="100"
selectorTimeout="5000"
maxThreads="6"/> <SenderclassName="org.apache.catalina.tribes.transport.ReplicationTransmitter"> <TransportclassName="org.apache.catalina.tribes.transport.nio.PooledParallelSender"/>
</Sender> <InterceptorclassName="org.apache.catalina.tribes.group.interceptors.TcpFailureDetector"/> <InterceptorclassName="org.apache.catalina.tribes.group.interceptors.MessageDispatch15Interceptor"/>
</Channel>
<ValveclassName="org.apache.catalina.ha.tcp.ReplicationValve"
filter=""/> <ValveclassName="org.apache.catalina.ha.session.JvmRouteBinderValve"/>
<DeployerclassName="org.apache.catalina.ha.deploy.FarmWarDeployer"
tempDir="/tmp/war-temp/"
deployDir="/tmp/war-deploy/"
watchDir="/tmp/war-listen/"
watchEnabled="false"/>
<ClusterListenerclassName="org.apache.catalina.ha.session.ClusterSessionListener"/>
</Cluster>
停掉tomcat服務,而後複製上面內容,修改以下,
另外一個節點一樣停掉tomcat服務,複製上面內容,並修改下
(2) 爲須要使用session cluster的webapps開啓sessiondistribution的功能:
WEB-INF/web.xml中添加
<distributable/>
複製/etc/tomcat/目錄下的web.xml到/data/webapps/ROOT/WEB-INF/目錄下,而後修改web.xml,在最後這個</web-app>前加入<distributable/>,另外一個節點作一樣的操做
複製這個文件到另外一個節點上
scp /data/webapps/ROOT/WEB-INF/web.xml172.16.249.112:/data/webapps/ROOT/WEB-INF/
而後啓動tomcat
訪問測試
能夠看到Session ID沒有變,能夠看到作成功了
這樣session cluster就作好了
而後修改前端(172.16.249.159)的,修改代理的模式,使用ajp和mod_jk模式,均可以實現,會話綁定,前端使用nginx作代理,也能夠實現會話綁定,這裏就再也不演示了(注意:使用其餘模式時,記得把剛作的會話綁定要去掉)
由於這是tomcat的session cluster 跟前端的負載均衡器沒有關係,
示例:構建session server
須要使用memcached,下面介紹下memcache的一些知識
memcached的特色:
協議簡單
基於libevent事件處理
基於內存完成數據存儲:LRU
memcached互不通訊的集羣:分佈式
首先要安裝memcached(yum installmemcached)
經過配置/etc/sysconfig/memcached這個文件,來對memcached傳遞一些參數,若是要編輯memcached的一些特性,就須要編輯這個文件(/etc/sysconfig/memcached)
直接啓動(systemctl startmemcached.service)就能夠了,監聽在tcp和udp的11211端口上
memcached是旁掛式緩存:
一半在客戶端;一半在服務端
memcached在內存中的存儲方式:
slab allocation機制:整理內存以進行復用
Page: 分配給slab用於再次分割爲chunk的內存空間;
chunk:用於緩存緩存對象的空間;
slab class:特定大小的chunk組合而成的組;
memcached還自帶一個狀態查看與管理工具: /usr/bin/memcached-tool,能夠查看如今memcache中的狀態信息
這些字段的含義:
#:slab class的編號;
Item_size:Chunk大小;
Max_age:緩存對象的生存時間;
Pages:分配給slab內存頁數;
Count:slab內的記錄數;
Full?:slab內是否仍有空閒chunk;
下面用實例實現讓tomcat的會話信息保存在memcache中,實現session server
memcached-session-manager項目地址:
http://code.google.com/p/memcached-session-manager/
下載以下jar文件至各tomcat節點的tomcat安裝目錄下的lib目錄中,其中的${version}要換成你所須要的版本號,tc${6,7,8}要換成與tomcat版本相同的版本號。(看本身使用的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
後端tomcat節點上,作以下操做:
把這些文件下載到這個目錄下/usr/share/tomcat/lib/
把剛纔咱們在tomcat配置文件中加入的<Cluster></Cluster>這一段裏面的內容刪掉,而後分別在兩個tomcat上的咱們本身定義的Host上定義一個用於測試的context容器,並在其中建立一個會話管理器,以下所示:
<ManagerclassName="de.javakaffee.web.msm.MemcachedBackupSessionManager" memcachedNodes="n1:172.16.249.159:11211,n2:172.16.249.112:11211" failoverNodes="n1"
requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$"
transcoderFactoryClass="de.javakaffee.web.msm.serializer.javolution.JavolutionTranscoderFactory"
/>
兩個節點都作這樣的操做
而後還要把tomcat配置文件中的,Engine字段裏的jvmRoute去掉
另外一個節點的tomcat配置文件中的,Engine字段裏的jvmRoute去掉
memcachedNodes寫入的是開啓memcached服務的主機的地址,一個是172.16.249.159 172.16.249.112 ,memcached不須要作修改,直接安裝而後啓動就好了
而後把咱們在/data/webapps/ROOT/WEB-INF/目錄中的web.xml文件刪掉,兩個節點
而後從新啓動tomcat服務,
訪問測試
能夠看到,負載均衡了,session ID也沒有變
這樣使用memcached作session server 就作好了