MemCache在tomcat中的负载均衡和session交叉存放

一.安装jdk

1.首先从官网下载jdk包,解压到指定目录/usr/local/

[root@server1 ~]# tar zxf jdk-7u79-linux-x64.tar.gz -C /usr/local
[root@server1 ~]# cd /usr/local/
[root@server1 local]# ln -s jdk1.7.0_79 java    ##做软连接,升级的时候只升级软连接,较为方便

在这里插入图片描述
2. 配置java的环境变量

[root@server1 local]# vim /etc/profile
在文章最后添加:
 80 export JAVA_HOME=/usr/local/java
 81 export CLASSPATH=.:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
 82 export PATH=$PATH:$JAVA_HOME/bin
[root@server1 local]# source /etc/profile     # 重新加载配置文件

在这里插入图片描述

3.检测jdk环境是否正确

[root@server1 ~]# vim  test.java
  1 public class test{
  2         public static void main(String[] args)
  3         { 
  4                 System.out.println("Hello World!");
  5         }
  6 }

[root@server1 ~]# javac test.java      #javac编译.java脚本
[root@server1 ~]# java test       # 运行脚本
Hello World!    # 运行结果

在这里插入图片描述
二、 安装tomcat实现负载均衡
1.下载安装包,并解压到指定目录/usr/local/

[root@server1 ~]# tar zxf apache-tomcat-7.0.37.tar.gz -C /usr/local
[root@server1 ~]# cd /usr/local/
[root@server1 local]# ln -s apache-tomcat-7.0.37 tomcat    # 做软连接

在这里插入图片描述
2.打开tomcat

[root@server1 ~]# cd /usr/local/tomcat/bin/
[root@server1 bin]# ./startup.sh 
[root@server1 bin]# netstat -tnlp   ##端口为8080

在这里插入图片描述
3.编辑配置文件

[root@server1 ~]# cd /usr/local/lnmp/openresty/nginx/conf/
[root@server1 conf]# vim nginx.conf
 72         location ~ \.jsp$ {
 73             proxy_pass   http://127.0.0.1:8080;
 74         }


[root@server1 sbin]# pwd
/usr/local/lnmp/openresty/nginx/sbin
[root@server1 sbin]# ./nginx -s reload

4.进入tomcat的发布目录,测试tomcat是否安装正确

[root@server1 html]# pwd
/usr/local/lnmp/openresty/nginx/html
[root@server1 html]# ls
50x.html  example.php  index.html  index.php
[root@server1 html]# vim index.jsp 
  1 the time is:<%=new java.util.Date() %>

测试:
浏览器输入:http://172.25.26.1/index.jsp 显示页面,但是不是tomcat的图像
在这里插入图片描述
5.将server1上配置的好的tomcat,发送到server3上

[root@server1 local]# scp -r /usr/local/tomcat root@172.25.26.3:/usr/local/
[root@server1 local]# scp -r /usr/local/java root@172.25.26.3:/usr/local/

6.在server3配置java环境变量并打开tomcat

[root@server3 bin]# cd /usr/local/
[root@server3 local]# vim /etc/profile
 80 export JAVA_HOME=/usr/local/java
 81 export CLASSPATH=.:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
 82 export PATH=$PATH:$JAVA_HOME/bin
[root@server3 local]# source /etc/profile
[root@server3 local]# cd tomcat/bin/
[root@server3 bin]# ./startup.sh 
Using CATALINA_BASE:   /usr/local/tomcat
Using CATALINA_HOME:   /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME:        /usr/local/java
Using CLASSPATH:       /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
[root@server3 bin]# netstat -tnlp

在这里插入图片描述7.实现server1和server2的tomcat负载均衡
(1)修改nginx的配置文件

[root@server1 ~]# cd /usr/local/lnmp/openresty/nginx/conf/
[root@server1 conf]# vim nginx.conf
 17 http {
 18         upstream tomcat{
 19             server 172.25.26.1:8080;    # 后端服务器之一
 20             server 172.25.26.2:8080;    # 后端服务器之一
 21         }

 72         location ~ \.jsp$ {
 73             proxy_pass   http://tomcat;
 74         }


添加相应的注释:
 54         #location /memc {
 55         #   internal;
 56         #    memc_connect_timeout 100ms;
 57         #    memc_send_timeout 100ms;
 58         #    memc_read_timeout 100ms;
 59         #    set $memc_key $query_string;
 60         #    set $memc_exptime 300;
 61         #    memc_pass memcache;
 62         #}

 78         location ~ \.php$ {
 79         #    set $key $uri$args;
 80         #    srcache_fetch GET /memc $key;
 81         #    srcache_store PUT /memc $key;

##检测语法错误并重启
[root@server1 conf]# cd /usr/local/lnmp/openresty/nginx/sbin/
[root@server1 sbin]# ./nginx -t
[root@server1 sbin]# ./nginx -s reload

(2)编写测试页内容

[root@server1 ~]# cd /usr/local/tomcat/webapps/ROOT/
[root@server1 ROOT]# vim test.jsp
server1 the time is:<%=new java.util.Date() %>

[root@server3 ~]# cd /usr/local/tomcat/webapps/ROOT/
[root@server3 ROOT]# vim test.jsp
server3 the time is:<%=new java.util.Date() %>

测试:浏览器输入http://172.25.26.1:8080/ 显示tomcat猫图形界面
在这里插入图片描述
浏览器输入:http://172.25.26.1/test.jsp ,刷新,显示server1 server3互换
在这里插入图片描述
在这里插入图片描述
三、在tomcat中实现session共享
1.简介
(1)什么是session:

在计算机中,尤其是在网络应用中,称为“会话控制”。
Session对象存储特定用户会话所需的属性及配置信息。这样,当用户在应用程序的 Web 页之间跳转时,存储在 Session对象中的变量将不会丢失,而是在整个用户会话中一直存在下去。当用户请求来自应用程序的 Web 页时,如果该用户还没有会话,则 Web服务器将自动创建一个 Session 对象。当会话过期或被放弃后,服务器将终止该会话。
Session对象最常见的一个用法就是存储用户的首选项。例如,如果用户指明不喜欢查看图形,就可以将该信息存储在 Session 对象中。

(2)为什么要使用session
为了对数据的保存更加牢靠,我们选择交叉存放session的方法,即将访问tomcat1上的数据存放在memcache2中,将访问tomcat2上的数据存放在memcache1中,这样存放,当某个tomcat服务断了之后,访问它的客户session并不会消失,而是存放在了对立的memcache,如果存放session的memcache坏了,那么它的数据会立即切换到另一个memcached中

2.配置
(1)重新编写测试页内容(信息提交页面)

[root@server1 ROOT]# vim test.jsp
<%@ page contentType="text/html; charset=GBK" %>
<%@ page import="java.util.*" %>
<html><head><title>Cluster App Test</title></head>
<body>
Server Info:
<%
out.println(request.getLocalAddr() + " : " + request.getLocalPort()+"<br>");%>
<%
out.println("<br> ID " + session.getId()+"<br>");
String dataName = request.getParameter("dataName");
if (dataName != null && dataName.length() > 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+"<br>");
System.out.println( name + " = " + value);
}
%>
<form action="test.jsp" method="POST">
name:<input type=text size=20 name="dataName">
<br>
key:<input type=text size=20 name="dataValue">
<br>
<input type=submit>
</form>
</body>
</html>

server2上做同样的修改

浏览器输入http://172.25.26.1/test.jsp 显示新的测试页面
在这里插入图片描述
在server2 上传的数据user1
提交之后,数据信息会存到server1上,再提交user2的信息
发现user2的信息有传到server2上,但是原来server2
在这里插入图片描述
我们发现,每次提交新的用户信息,server info 和 ID 都会改变,且新的数据就会覆盖旧的数据内容

2.改进上面的设置,实现数据不交换,上传信息到同一个后端服务器
解压nginx-1.10.1 版本的压缩包,nginx的sticky安装包

[root@server1 ~]# tar zxf nginx-1.10.1.tar.gz
[root@server1 ~]# tar zxf nginx-sticky-module-ng.tar.gz

去掉nginx的版本号

[root@server1 ~]# cd nginx-1.10.1
[root@server1 nginx-1.10.1]# vim src/core/nginx.h
14 #define NGINX_VER          "nginx/"        ##删掉后面的部分

关闭debug日志

[root@server1 nginx-1.10.1]# vim auto/cc/gcc
178 # debug
179 #CFLAGS="$CFLAGS -g"    ##注释掉这一行

进入解压目录,进行编译,在后面添加sticky模块

[root@server1 nginx-1.10.1]# ./configure --prefix=/usr/local/lnmp/nginx --with-http_ssl_module --with-http_stub_status_module --with-threads --with-file-aio --add-module=/root/nginx-sticky-module-ng
[root@server1 nginx-1.10.1]# make && make install

把原来的openresty下的nginx关掉

[root@server1 ~]# cd /usr/local/openresty/nginx/sbin/    
[root@server1 sbin]# ./nginx -s stop

编写新的nginx配置文件(把原来openresty下的nginx配置文件直接复制过来即可)

[root@server1 sbin]# cd /usr/local/lnmp/nginx/conf/
[root@server1 conf]# cp /usr/local/openresty/nginx/conf/nginx.conf .
cp: overwrite `./nginx.conf'? y
[root@server1 conf]# vim nginx.conf
 17 http {
 18         upstream tomcat{
 19             sticky;    ##添加
 20             server 172.25.26.1:8080;
 21             server 172.25.26.2:8080;
 22         }
 23     include       mime.types;
 24     default_type  application/octet-stream;

查看新的nginx的语法错误,并开启nginx

[root@server1 ~]# cd /usr/local/lnmp/nginx/sbin/
[root@server1 sbin]# ./nginx -t
[root@server1 sbin]# ./nginx 

测试:
在浏览器输入http://172.25.26.1/test.jsp
在这里插入图片描述
在这里插入图片描述
提交数据发现,绑定的主机为同一个主机都是server1
3. 实现交叉存储
为了方便查看实验效果,可以清空日志信息后再做下面的实验
[root@server1 ~]# cd /usr/local/tomcat/logs/
[root@server1 logs]# > catalina.out
[root@server3 ~]# cd /usr/local/tomcat/logs/
[root@server3 logs]# > catalina.out

首先,浏览器在server1上提交两个用户信息:user2和user3
在这里插入图片描述
在这里插入图片描述
然后关掉的server1的tomcat

[root@server1 bin]# pwd
/usr/local/tomcat/bin
[root@server1 bin]# ./shutdown.sh 

关掉之后,在server3上提交信息,发现server3中没有将之前的信息缓存过来
[root@server3 ~]# cd /usr/local/tomcat/logs
[root@server3 ~]# tail -f catalina.out ##发现2中没有将之前的信息缓存过来

实现交叉存储配置
首先打开server1和server3的tomcat

[root@server1 bin]# cd /usr/local/tomcat/bin/
[root@server1 bin]# ./startup.sh 

[root@server3 bin]# cd /usr/local/tomcat/bin/
[root@server3 bin]# ./startup.sh 

在server3上同样要安装memcached,并打开

[root@server3 logs]# yum install -y memcached
[root@server3 logs]# /etc/init.d/memcached start

编辑配置文件

[root@server1 bin]# cd /usr/local/tomcat/conf/
[root@server1 conf]# vim context.xml 
##注意:添加的内容实质只有34到39行
 19 <Context>
 20 
 21     <!-- Default set of monitored resources -->
 22     <WatchedResource>WEB-INF/web.xml</WatchedResource>
 23 
 24     <!-- Uncomment this to disable session persistence across Tomcat restarts -->
 25     <!--
 26     <Manager pathname="" />
 27     -->
 28 
 29     <!-- Uncomment this to enable Comet connection tacking (provides events
 30          on session expiration as well as webapp lifecycle) -->
 31     <!--
 32     <Valve className="org.apache.catalina.valves.CometConnectionManagerValve" />
 33     -->


 34 <Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
 35 memcachedNodes="n1:172.25.79.1:11211,n2:172.25.79.2:11211"
 36 failoverNodes="n1"
 37 requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$"
 38 transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory"
 39 />

 40 </Context>

将配置文件同样发送给server2

[root@server1 conf]# scp context.xml root@172.25.79.2:/usr/local/tomcat/conf
修改文件的36行:
 36 failoverNodes="n2"

进入浏览器,刷新页面,显示在server3上,在server3上提交信息(user9),然后关掉server3

[root@server3 bin]# cd /usr/local/tomcat/bin/
[root@server3 bin]# ./shutdown.sh 

在这里插入图片描述
查看到server1上缓存到了server2提交的信息
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值