tomcat服务器介绍之二 、session服务器实现方法
上次講到了session會(huì)話的綁定,通過(guò)nginx和apache(3種方式)實(shí)現(xiàn);session會(huì)話的復(fù)制,通過(guò)DeltaManager和apache(mod_jk)實(shí)現(xiàn);這次講解基于msm實(shí)現(xiàn)session服務(wù)器的過(guò)程,需要用到的軟件包如下:
一、準(zhǔn)備工作,先部署nginx可以反向代理客戶端請(qǐng)求至2臺(tái)tomcat服務(wù)器
測(cè)試環(huán)境在centos7上,使用nginx和tomcat7實(shí)現(xiàn);參考網(wǎng)頁(yè)
https://code.google.com/p/memcached-session-manager/wiki/SetupAndConfiguration
nginx:對(duì)于客戶端發(fā)來(lái)的請(qǐng)求做反向代理至后端的2臺(tái)tomcat服務(wù)器,配置如下
[root@node3?~]#?yum?install?-y?nginx [root@node3?~]#?cd?/etc/nginx [root@node3?nginx]#?vim?nginx.confupstream?tomcatservs?{???????????????//http段加入的內(nèi)容server?172.16.116.231:80?max_fails=1?fail_timeout=5;???//加入監(jiān)控檢測(cè)server?172.16.116.232:80?max_fails=1?fail_timeout=5;}location?/?{?????????????????????//server段加入的內(nèi)容proxy_pass?http://tomcatservs/;?????index?index.jsp?index.html;}node1:172.16.116.231 ; 作為tomcat服務(wù)器1來(lái)使用,安裝httpd和tomcat,使用httpd基于mod_proxy_ajp模塊反向代理前端nginx調(diào)度來(lái)的所有請(qǐng)求給tomcat;配置如下
[root@node1?~]#?yum?install?-y?httpd?tomcat[root@node1?~]#?cd?/etc/httpd/conf.d??//配置httpd基于mod_proxy_ajp模塊反向代理 [root@node1?conf.d]#?vim?mod_proxy_ajp.conf <VirtualHost?*:80>ServerName?node3ProxyVia?OnProxyRequests?OffProxyPreserveHost?On<Proxy?*>Require?all?granted</Proxy>ProxyPass?/?ajp://172.16.116.231:8009/??????????ProxyPa***everse?/?ajp://172.16.116.231:8009/<Location?/>Require?all?granted</Location> </VirtualHost>[root@node1?~]#?cd?/etc/tomcat/ [root@node1?tomcat]#?vim?server.xml?<Engine?name="Catalina"?defaultHost="node1"?jvmRoute="Tomcat1">???//Engine組件修改<Host?name="node1"?appBase="/web/webapps/"?autoDeploy="false"?>??//添加虛擬主機(jī)<Context?path=""?docBase="ROOT"?reloadable="true"/><Valve?className="org.apache.catalina.valves.AccessLogValve"?directory="/web/logs"prefix="localhost_access_log."?suffix=".txt"pattern="%h?%l?%u?%t?"%r"?%s?%b"?/></Host>[root@node1?~]#?tree?/web/????????//創(chuàng)建node1虛擬主機(jī)的根目錄,并提供測(cè)試頁(yè)index.jsp /web/ |--?logs `--?webapps`--?ROOT|--?META-INF|--?WEB-INF|???`--?web.xml|--?classes|--?index.jsp`--?libnode2:172.16.116.232;?作為tomcat服務(wù)器2來(lái)使用,安裝httpd和tomcat,使用httpd基于mod_proxy_ajp模塊反向代理前端nginx調(diào)度來(lái)的所有請(qǐng)求給tomcat;配置如下
[root@node2?~]#?yum?install?-y?httpd?tomcat[root@node2?~]#?cd?/etc/httpd/conf.d??//配置httpd基于mod_proxy_ajp模塊反向代理 [root@node2?conf.d]#?vim?mod_proxy_ajp.conf <VirtualHost?*:80>ServerName?node3ProxyVia?OnProxyRequests?OffProxyPreserveHost?On<Proxy?*>Require?all?granted</Proxy>ProxyPass?/?ajp://172.16.116.232:8009/??????????ProxyPa***everse?/?ajp://172.16.116.232:8009/<Location?/>Require?all?granted</Location> </VirtualHost>[root@node2?~]#?cd?/etc/tomcat/ [root@node2?tomcat]#?vim?server.xml?<Engine?name="Catalina"?defaultHost="node2"?jvmRoute="Tomcat2">???//Engine組件修改<Host?name="node2"?appBase="/web/webapps/"?autoDeploy="false"?>??//添加虛擬主機(jī)<Context?path=""?docBase="ROOT"?reloadable="true"/><Valve?className="org.apache.catalina.valves.AccessLogValve"?directory="/web/logs"prefix="localhost_access_log."?suffix=".txt"pattern="%h?%l?%u?%t?"%r"?%s?%b"?/></Host>[root@node2?~]#?tree?/web/????????//創(chuàng)建node2虛擬主機(jī)的根目錄,?并提供測(cè)試頁(yè)index.jsp /web/ |--?logs `--?webapps`--?ROOT|--?META-INF|--?WEB-INF|???`--?web.xml|--?classes|--?index.jsp`--?lib測(cè)試結(jié)果如圖,可以看出已實(shí)現(xiàn)nginx的反向代理至后端的node1和node2上的tomcat服務(wù)器
此時(shí)Session信息并不一致,接下來(lái)我們通過(guò)配置MSM實(shí)現(xiàn)Session共享!?
二、什么是MSM
? ? ??MSM–Memcached Session Manager是一個(gè)高可用的Tomcat Session共享解決方案,除了可以從本機(jī)內(nèi)存快速讀取Session信息(僅針對(duì)黏性Session)外,同時(shí)可使用Memcached存取Session,以實(shí)現(xiàn)高可用。
三、MSM的工作原理
①?Sticky Session(黏性) 模式下的工作原理
#Tomcat本地Session為主Session,Memcached 中的Session為備Session? ? 安裝在Tomcat上的MSM使用本機(jī)內(nèi)存保存Session,當(dāng)一個(gè)請(qǐng)求執(zhí)行完畢之后,如果對(duì)應(yīng)的Session在本地不存在(即某用戶的第一次請(qǐng)求),則將該Session復(fù)制一份至Memcached;當(dāng)該Session的下一個(gè)請(qǐng)求到達(dá)時(shí),會(huì)使用Tomcat的本地Session,請(qǐng)求處理結(jié)束之后,Session的變化會(huì)同步更新到 Memcached,保證數(shù)據(jù)一致。
? ?當(dāng)集群中的一個(gè)Tomcat掛掉,下一次請(qǐng)求會(huì)被路由到其他Tomcat上。負(fù)責(zé)處理此此請(qǐng)求的Tomcat并不清楚Session信息,于是從Memcached查找該Session,更新該Session并將其保存至本機(jī)。此次請(qǐng)求結(jié)束,Session被修改,送回Memcached備份。
②?Non-sticky Session (非黏性)模式下的工作原理
#Tomcat本地Session為中轉(zhuǎn)Session,Memcached為主備Session收到請(qǐng)求,加載備Session至本地容器,若備Session加載失敗則從主Session加載
請(qǐng)求處理結(jié)束之后,Session的變化會(huì)同步更新到Memcached,并清除Tomcat本地Session ?
四、MSM的實(shí)現(xiàn)過(guò)程:?
?4.1、在后端的memcached服務(wù)器(centos6.6)上安裝系統(tǒng)自帶的memcached軟件包
? ?m1: 172.16.16.11 ; m2:172.16.16.12 ,安裝完成啟動(dòng)service memcached start即可
4.2、rpm包安裝的tomcat,將下載的跟MSM相關(guān)的jar包放到/usr/share/tomcat/lib目錄中;編譯安裝的tomcat需要將所需jar包放入各tomcat節(jié)點(diǎn)的tomcat安裝目錄下的lib目錄中?
4.3、配置node1和node2節(jié)點(diǎn)?
[root@node1?~]#?vim?/etc/tomcat/server.xml?<Host?name="node1"?appBase="/web/webapps/"?autoDeploy="false"?><Context?path=""?docBase="ROOT"?reloadable="true"><Manager?className="de.javakaffee.web.msm.MemcachedBackupSessionManager"memcachedNodes="m1:172.16.16.11:11211,m2:172.16.16.12:11211"??//memcached服務(wù)器failoverNodes="m1"???????????requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$"transcoderFactoryClass="de.javakaffee.web.msm.serializer.javolution.JavolutionTranscoderFactory"?/></Context><Valve?className="org.apache.catalina.valves.AccessLogValve"?directory="/web/logs"prefix="localhost_access_log."?suffix=".txt"pattern="%h?%l?%u?%t?"%r"?%s?%b"?/></Host>[root@node2?~]#?vim?/etc/tomcat/server.xml?<Host?name="node2"?appBase="/web/webapps/"?autoDeploy="false"?><Context?path=""?docBase="ROOT"?reloadable="true"><Manager?className="de.javakaffee.web.msm.MemcachedBackupSessionManager"memcachedNodes="m1:172.16.16.11:11211,m2:172.16.16.12:11211"?????//memcached服務(wù)器failoverNodes="m1"requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$"transcoderFactoryClass="de.javakaffee.web.msm.serializer.javolution.JavolutionTranscoderFactory"?/></Context><Valve?className="org.apache.catalina.valves.AccessLogValve"?directory="/web/logs"prefix="localhost_access_log."?suffix=".txt"pattern="%h?%l?%u?%t?"%r"?%s?%b"?/></Host>4.4、測(cè)試結(jié)果 ?
額外測(cè)試,關(guān)掉node2的httpd服務(wù)(即tomcat也無(wú)法響應(yīng));測(cè)試結(jié)果nginx只調(diào)度給node1節(jié)點(diǎn),重新啟動(dòng)node2的httpd服務(wù),訪問(wèn)的結(jié)果session值仍沒(méi)有發(fā)生變化,證明session會(huì)話是共享的!!!
4.5、Memcached圖形管理工具---memcachephp
需要安裝httpd和php才可以使用 ;將memcache.php復(fù)制到httpd的根目錄中即可,如果是rpm包安裝的將其復(fù)制到/var/www/html目錄下?
define('ADMIN_USERNAME','memcached');???//?Admin?Username????設(shè)置管理員用戶 define('ADMIN_PASSWORD','123456');??????//?Admin?Password????密碼 define('DATE_FORMAT','Y/m/d?H:i:s'); define('GRAPH_SIZE',200); define('MAX_ITEM_DUMP',50);$MEMCACHE_SERVERS[]?=?'172.16.16.11:11211';?//?add?more?as?an?array?添加memcached服務(wù)器 $MEMCACHE_SERVERS[]?=?'172.16.16.12:11211';?//?add?more?as?an?array監(jiān)控界面:
???????? 在下面監(jiān)控畫面看出,左側(cè)顯示的是memcache的主機(jī)、端口,運(yùn)行時(shí)間等信息;右側(cè)顯示的是cache利用率、緩存命中率、點(diǎn)擊率(Hit)等信息。
???????? 注意:右則顯示的信息,默認(rèn)是多個(gè)memcache緩存的總數(shù),需要選中Memcached Hosts對(duì)單個(gè)主機(jī)進(jìn)行刷新,顯示單個(gè)主機(jī)的信息;Variables里面是key和value,可以刪除
至此,tomcat基于MSM+Memcached實(shí)現(xiàn)的session服務(wù)器(即session會(huì)話共享)已實(shí)現(xiàn)!這次講解到此完成!!O(∩_∩)O~~~?
轉(zhuǎn)載于:https://blog.51cto.com/bengbengtu/1707346
與50位技術(shù)專家面對(duì)面20年技術(shù)見證,附贈(zèng)技術(shù)全景圖總結(jié)
以上是生活随笔為你收集整理的tomcat服务器介绍之二 、session服务器实现方法的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: php中(foreach)用法介绍
- 下一篇: IOS 同步请求和异步请求 ios开发教