一.工作原理及原理图
<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丢失,但此种情况发生几率很小。