设为首页 收藏本站
查看: 925|回复: 0

[经验分享] nginx+tomcat+memcached实现session共享

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2016-4-18 10:18:45 | 显示全部楼层 |阅读模式
一.工作原理及原理图
<img class="alignnone wp-image-31" src="http://119.29.25.60/wp-content/uploads/2016/04/图片1.bmp" alt="图片1" width="342" height="254" />
工作原理
        Tomcat中自带缓存功能。Memcached时一个集中式缓存器,可以利用tomcat和memcached制作交叉时数据缓存机制,当tomcat1或者tomcat2宕掉以后,可以利用交叉机制在交叉点的m2中提取tomcat1中缓存的数据,并且将其存至tomcat2中。交叉机制中至少需要一台tomcat服务器正常,则数据就不会丢失。Tomcat直接响应nginx服务器。Tomcat优先提取交叉点的memcached数据。当交叉点的memcached宕掉以后,才会提取自身服务器中的memcached中的数据。M1和M2不存在同步机制。

<strong>nginx服务器:172.25.48.1</strong>
在nginx服务器上添加黏制模块sticky.
# tar zxf nginx-sticky-module-1.0.tar.gz
# cd nginx-1.8.0
# ./configure
--prefix=/usr/local/lnmp/nginx
--with-http_ssl_module
--with-http_stub_status_module --add-module=/nginx-sticky-module-1.0
# make &amp;&amp; make install
# vim /usr/local/lnmp/nginx/conf/nginx.conf
http {
            upstream tomcat {
                                    sticky;
                        server 172.25.48.8:8080;
                        server 172.25.48.7:8080;
                            }
                server {
                    location ~ \.jsp$ {
                            proxy_pass http://tomcat;
                                }
                        }
        }
# nginx -t
# nginx -s reload
<strong>172.25.48.8主机和172.25.48.7搭建tomcat服务器,并设置java语言环境。</strong>
# vim /usr/local/tomcat/webapps/ROOT/tset.jsp
&lt;%@ page contentType="text/html; charset=GBK" %&gt;
&lt;%@ page import="java.util.*" %&gt;
Cluster App TeServer Info:
&lt;%
out.println(request.getLocalAddr() + " : " + request.getLocalPort()+"
");%&gt;
&lt;%
out.println("
ID " + session.getId()+"
");
String dataName = request.getParameter("dataName");
if (dataName != null &amp;&amp; dataName.length() &gt; 0) {
String dataValue = request.getParameter("dataValue");
session.setAttribute(dataName, dataValue);
}
out.print("<b>Session list</b>");
Enumeration e = session.getAttributeNames();
while (e.hasMoreElements()) {
String name = (String)e.nextElement();

String value = session.getAttribute(name).toString();
out.println( name + " = " + value+"
");
System.out.println( name + " = " + value);
}
%&gt;
打开浏览器,输入“172.25.48.1/test.jsp”,因为nginx服务器采用的是黏制模块,所以按f5刷新不会转换,添加用户和key。
如果将172.25.48.8主机上的tomcat宕掉,server info 会变为172.25.48.7:8080,并且之前添加的用户会丢失。
<strong>当两台tomcat服务器都宕掉后,将显示错误信息。</strong>
添加java库文件,并将java库文件脚本移至/usr/local/lnmp/tomcat/lib/目录下,用于支持java语言编译。
# mv asm-3.2.jar minlog-1.2.jar memcached-session-manager-tc7-1.6.3.jar kryo-1.04.jar reflectasm-1.01.jar kryo-serializers-0.10.jar msm-kryo-serializer-1.6.3.jar memcached-session-manager-1.6.3.jar spymemcached-2.7.3.jar /usr/local/tomcat/lib/
# vim /usr/local/tomcat/conf/context.xml
172.25.48.8主机:

&lt;Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager" memcachedNodes="n1:172.25.48.8:11211,n2:172.25.48.7:11211" failoverNodes="n1" requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$" transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory" /&gt;

&nbsp;

172.25.48.7主机:

&lt;Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager" memcachedNodes="n1:172.25.48.8:11211,n2:172.25.48.7:11211" failoverNodes="n2" requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$" transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory" /&gt;

# /usr/local/tomcat/bin/shutdown.sh
# yum install memcached -y ##下载集中式缓存器memcached
# /etc/init.d/memcached start
# tail -f /usr/local/tomcat/logs/catalina.out ##查看tomcat的日志文件
如果出现以下信息,则表明memcached开启成功:
INFO: MemcachedSessionService finished initialization, sticky true, operation timeout 1000, with node ids [n2] and failover node ids [n1]
# /usr/local/lnmp/tomcat/bin/startup.sh ##开启tomcat服务器
打开浏览器,输入“http://172.25.48.1/test.jsp”,发现172.25.48.8主机响应,
添加name和key。
user1 aaa
user2 bbb
将172.25.48.8的tomcat宕掉,刷新浏览器,结果显示172.25.48.7主机响应,且之前添加的用户及密码仍旧存在。
结果说明172.25.48.8的tomcat宕掉以后,其之前添加的name和key均缓存到172.25.48.8和172.25.48.7中的memcached服务中,当再次添加name和key时,会自动转换到172.25.48.7主机中的tomcat,由于时交叉机制,172.25.48.7的tomcat会从172.25.48.8中的memcached中获取数据,并且缓存到172.25.48.7的tomcat和memcached中。
再次添加name和key。
user3 ccc
将172.25.48.7的memcached服务关闭,添加name和key:
user4 ddd
打开172.25.48.8主机的tomcat服务器,刷新浏览器,结果显示之前添加的user1,user2,user3均保存,没有丢失。
将172.25.48.8的tomcat宕掉,并且再次将172.25.48.7的tomcat打开,添加name和key:
user5 eee
结果显示之前的name和key没有消失,并且server info转换为172.25.48.7。
当宕掉172.25.48.8的tomcat和memcached和172.25.48.7的memcached时,再次添加name和key:
user6 fff
结果显示之前添加的name和key丢失,但此种情况发生几率很小。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-205528-1-1.html 上篇帖子: 编译安装nginx 下篇帖子: nginx+tomcat实现动静分离
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表