一.在tomcat中实现session共享
-
什么是session:
-
在计算机中,尤其是在网络应用中,称为“会话控制”。
-
Session对象存储特定用户会话所需的属性及配置信息。这样,当用户在应用程序的 Web
页之中的变量将不会丢失,而是在整个用户会话中一直存在下去。当用户请求来自应用程序的 Web 页时,如果该用户还没有会话,则
Web服务器将自动创建一个 Session 对象。 -
当会话过期或被放弃后,服务器将终止该会话。
-
Session对象最常见的一个用法就是存储用户的首选项。例如,如果用户指明不喜欢查看图形,就可以将该信息存储在 Session 对象中。
-
为什么要使用session
-
为了对数据的保存更加牢靠,我们选择交叉存放session的方法,即将访问tomcat1上的数据存放在memcache2中,将访问tomcat2上的数据存放在memcache1中,这样存放,当某个tomcat服务断了之后,访问它的客户session并不会消失,而是存放在了对立的memcache,如果存放session的memcache坏了,那么它的数据会立即切换到另一个memcached中。
配置实验如下:
前一篇博客的问题:之前可以实现粘制功能,但是如果在一个用户已经访问了很多数据情况下,该服务器挂掉,再次访问时,处理的服务器更换为正常的服务器,但是数据都会丢失
第一步:hang2安装memcahce(因为hang1我们之前安装过了),并开启memcache
[root@hang2 bin]# yum install memcached -y
[root@hang2 ROOT]# /etc/init.d/memcached start
第二步:将所需的安装包都放到1和2的/usr/local/tomcat/lib目录下
[root@foundation11 opt]# scp -r * root@172.25.11.1:/usr/local/tomcat/lib
[root@foundation11 opt]# scp -r * root@172.25.11.2:/usr/local/tomcat/lib/
最终1和2的结果如下所示:
第三步:编辑配置文件
[root@hang1 lib]# cd /usr/local/tomcat/conf
[root@hang1 conf]# ls
[root@hang1 conf]# vim context.xml
34 <Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
35 memcachedNodes="n1:172.25.11.1:11211,n2:172.25.11.2:11211"
36 failoverNodes="n1"
37 requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$"
38 transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory" />
将这个文件给2也发送一份,并根据需求修改:
第四步:启动1和2的tomcat和memcache
注意:如果tomcat之前是开启的,要先关闭,在开启。
[root@hang1 conf]# cd /usr/local/tomcat/
[root@hang1 tomcat]# cd bin/
[root@hang1 bin]# ./startup.sh
[root@hang1 bin]# /etc/init.d/memcached status
memcached is stopped
[root@hang1 bin]# /etc/init.d/memcached start
[root@hang2 conf]# /etc/init.d/memcached status
memcached (pid 13095) is running...
[root@hang2 conf]# cd /usr/local/tomcat/bin/
[root@hang2 bin]# ./startup.sh
第五步:测试
此时,我们去将2挂掉~
在1上面有2的数据:
也可以监控日志,查看到数据:
cd /usr/local/tomcat/logs/
tail -f catalina.out