tomcat服务器介绍之二 、session服务器实现方法
上次講到了session會話的綁定,通過nginx和apache(3種方式)實現;session會話的復制,通過DeltaManager和apache(mod_jk)實現;這次講解基于msm實現session服務器的過程,需要用到的軟件包如下:
一、準備工作,先部署nginx可以反向代理客戶端請求至2臺tomcat服務器
測試環境在centos7上,使用nginx和tomcat7實現;參考網頁
https://code.google.com/p/memcached-session-manager/wiki/SetupAndConfiguration
nginx:對于客戶端發來的請求做反向代理至后端的2臺tomcat服務器,配置如下
[root@node3?~]#?yum?install?-y?nginx [root@node3?~]#?cd?/etc/nginx [root@node3?nginx]#?vim?nginx.confupstream?tomcatservs?{???????????????//http段加入的內容server?172.16.116.231:80?max_fails=1?fail_timeout=5;???//加入監控檢測server?172.16.116.232:80?max_fails=1?fail_timeout=5;}location?/?{?????????????????????//server段加入的內容proxy_pass?http://tomcatservs/;?????index?index.jsp?index.html;}node1:172.16.116.231 ; 作為tomcat服務器1來使用,安裝httpd和tomcat,使用httpd基于mod_proxy_ajp模塊反向代理前端nginx調度來的所有請求給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"?>??//添加虛擬主機<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/????????//創建node1虛擬主機的根目錄,并提供測試頁index.jsp /web/ |--?logs `--?webapps`--?ROOT|--?META-INF|--?WEB-INF|???`--?web.xml|--?classes|--?index.jsp`--?libnode2:172.16.116.232;?作為tomcat服務器2來使用,安裝httpd和tomcat,使用httpd基于mod_proxy_ajp模塊反向代理前端nginx調度來的所有請求給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"?>??//添加虛擬主機<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/????????//創建node2虛擬主機的根目錄,?并提供測試頁index.jsp /web/ |--?logs `--?webapps`--?ROOT|--?META-INF|--?WEB-INF|???`--?web.xml|--?classes|--?index.jsp`--?lib測試結果如圖,可以看出已實現nginx的反向代理至后端的node1和node2上的tomcat服務器
此時Session信息并不一致,接下來我們通過配置MSM實現Session共享!?
二、什么是MSM
? ? ??MSM–Memcached Session Manager是一個高可用的Tomcat Session共享解決方案,除了可以從本機內存快速讀取Session信息(僅針對黏性Session)外,同時可使用Memcached存取Session,以實現高可用。
三、MSM的工作原理
①?Sticky Session(黏性) 模式下的工作原理
#Tomcat本地Session為主Session,Memcached 中的Session為備Session? ? 安裝在Tomcat上的MSM使用本機內存保存Session,當一個請求執行完畢之后,如果對應的Session在本地不存在(即某用戶的第一次請求),則將該Session復制一份至Memcached;當該Session的下一個請求到達時,會使用Tomcat的本地Session,請求處理結束之后,Session的變化會同步更新到 Memcached,保證數據一致。
? ?當集群中的一個Tomcat掛掉,下一次請求會被路由到其他Tomcat上。負責處理此此請求的Tomcat并不清楚Session信息,于是從Memcached查找該Session,更新該Session并將其保存至本機。此次請求結束,Session被修改,送回Memcached備份。
②?Non-sticky Session (非黏性)模式下的工作原理
#Tomcat本地Session為中轉Session,Memcached為主備Session收到請求,加載備Session至本地容器,若備Session加載失敗則從主Session加載
請求處理結束之后,Session的變化會同步更新到Memcached,并清除Tomcat本地Session ?
四、MSM的實現過程:?
?4.1、在后端的memcached服務器(centos6.6)上安裝系統自帶的memcached軟件包
? ?m1: 172.16.16.11 ; m2:172.16.16.12 ,安裝完成啟動service memcached start即可
4.2、rpm包安裝的tomcat,將下載的跟MSM相關的jar包放到/usr/share/tomcat/lib目錄中;編譯安裝的tomcat需要將所需jar包放入各tomcat節點的tomcat安裝目錄下的lib目錄中?
4.3、配置node1和node2節點?
[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服務器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服務器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、測試結果 ?
額外測試,關掉node2的httpd服務(即tomcat也無法響應);測試結果nginx只調度給node1節點,重新啟動node2的httpd服務,訪問的結果session值仍沒有發生變化,證明session會話是共享的!!!
4.5、Memcached圖形管理工具---memcachephp
需要安裝httpd和php才可以使用 ;將memcache.php復制到httpd的根目錄中即可,如果是rpm包安裝的將其復制到/var/www/html目錄下?
define('ADMIN_USERNAME','memcached');???//?Admin?Username????設置管理員用戶 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服務器 $MEMCACHE_SERVERS[]?=?'172.16.16.12:11211';?//?add?more?as?an?array監控界面:
???????? 在下面監控畫面看出,左側顯示的是memcache的主機、端口,運行時間等信息;右側顯示的是cache利用率、緩存命中率、點擊率(Hit)等信息。
???????? 注意:右則顯示的信息,默認是多個memcache緩存的總數,需要選中Memcached Hosts對單個主機進行刷新,顯示單個主機的信息;Variables里面是key和value,可以刪除
至此,tomcat基于MSM+Memcached實現的session服務器(即session會話共享)已實現!這次講解到此完成!!O(∩_∩)O~~~?
轉載于:https://blog.51cto.com/bengbengtu/1707346
與50位技術專家面對面20年技術見證,附贈技術全景圖總結
以上是生活随笔為你收集整理的tomcat服务器介绍之二 、session服务器实现方法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: php中(foreach)用法介绍
- 下一篇: IOS 同步请求和异步请求 ios开发教