二、昨天搭建一个具体的工程的时候发现不能实现session的共享,为了正确的判断是不是出现了session的共享做了如下实验:
1、未使用terracotta的时候进行测试:
#1、环境说明:前端负责负载均衡的192.168.5.186,使用nginx权重后端的两个机器是1:1。后端的两个机器分别为192.168.5.237和192.168.5.243,分别只跑了一个tomcat。
#2、配置nginx、tomcat,分别记录日志,然后启动tomcat和nginx。
#3、访问http://192.168.5.186/jsp-examples/cal/login.html ,并登陆提交,跳转至http://192.168.5.186/jsp-examples/cal/cal1.jsp?name=test&email=test&action=Submit ,然后重新打开一个浏览器窗口,输入http://192.168.5.186/jsp-examples/cal/cal1.jsp?name=test&email=test&action=Submit 能打开,然后再次打开一个新的浏览器窗口http://192.168.5.186/jsp-examples/cal/cal1.jsp ,发现提示You must enter your name and email address correctly.这说明session在新打开的窗口中已经失效了。
#4、分别多次的强制刷新浏览器,发现情况还是一样。
#5、在第二次打开的http://192.168.5.186/jsp-examples/cal/cal1.jsp?name=test&email=test&action=Submi窗口中点击一个时间并添加日志,提交之后直接提示You must enter your name and email address correctly.这里也是在此的说明了session的实效。这个时候我们猜想第一个页面以为是两个tomcat的1:1的转发,也是应该提交不可能成功的,下面测试猜测。
#6、在一个浏览器窗口中重复第五步的操作,发现也是提示You must enter your name and email address correctly.证实了猜想。
2、使用terracotta的时候进行测试
#1、环境说明:前端负责负载均衡的192.168.5.186,使用nginx权重后端的两个机器是1:1。后端的两个机器分别为192.168.5.237和192.168.5.243,分别只跑了一个tomcat。同时在5.186上也跑了terracotta的服务器端。修改各个tomcat的启动程序,使之成为terracotta的客户端。
#2、首先启动5.186上的terracotta服务器端,然后启动5.237和5.243上的tomcat。
#3、打开页面http://192.168.5.186/jsp-examples/cal/login.html,然后登陆进去,出现http://192.168.5.186/jsp-examples/cal/cal1.jsp?name=test&email=test&action=Submit的页面。
#4、新打开一个窗口http://192.168.5.186/jsp-examples/cal/cal1.jsp?name=test&email=test&action=Submit,可以打开。然后点击一个时间,提交修改,成功。
#5、再次的打开一个新窗口,打开页面http://192.168.5.186/jsp-examples/cal/cal1.jsp显示页面还是在登录状态下。
#6、然后修改其中的一个面,然后刷新其他的页面查看变化情况,发现和之前修改的页面一致。这样说明session的复制是成功的。
#7、停掉一个tomcat,然后刷新,查看session的情况不丢失。然后启动刚才被杀的tomcat,杀掉正在运行的tomcat,刷新情况还是session没有丢失。
#8、将两个tomcat都杀掉之后,然后重启,刷新和修改页面发现session不丢失,说明session已经共享到terracotta的服务器端。并不随着tomcat的挂掉而丢失。
综合上面的实现我们知道terracotta能很好的实现session的共享,现在问题的难点在于怎么应用到具体的工程里面。之前一直是因为测试具体的工程,两周下来除了熟悉terracotta的配置之外,测试校信通的工程是一无所获。中间和使用terracotta部分的同仁交流,也发现自己在很多的地方理解的不对,当使用tomcat的自带的工程进行测试的发现terracotta确实能实现session的共享,因此做了上面的实验去证实猜想。不过转化到具体的工程应用里面,还有很长的路需要走。