Memcache 在Tomcat 中实现负载均衡以及session交叉存放功能的实现

一、基础概念

1.什么是Tomcat?

Tomcat 服务器是一个免费的开放源代码的Web 应用服务器,Tomcat是Apache 软件基金会(Apache Software Foundation)的Jakarta 项目中的一个核心项目,它早期的名称为catalina,后来由Apache、Sun 和其他一些公司及个人共同开发而成,并更名为Tomcat。Tomcat 是一个小型的轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP 程序的首选,因为Tomcat 技术先进、性能稳定,成为目前比较流行的Web 应用服务器。Tomcat是应用(java)服务器,它只是一个servlet容器,是Apache的扩展,但它是独立运行的。
tomcat可以查看jsp页面

搭建步骤:

1.获得资源包,进行解压
在这里插入图片描述

[root@server1 lnmp]# tar zxf jdk-7u79-linux-x64.tar.gz -C /usr/local/
[root@server1 lnmp]# tar zxf apache-tomcat-7.0.37.tar.gz -C /usr/local/

2.做链接,方便管理
在这里插入图片描述

[root@server1 local]# ln -s jdk1.7.0_79/ java
[root@server1 local]# ln -s apache-tomcat-7.0.37/ tomcat

3.更改环境变量

[root@server1 local]# vim /etc/profile
 79 export JAVA_HOME=/usr/local/java
 80 export CLASSPATH=.:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
 81 export PATH=$PATH:$JAVA_HOME/bin
[root@server1 local]# source /etc/profile
[root@server1 local]# echo $PATH
[root@server1 local]# which java
[root@server1 local]# which javac

在这里插入图片描述

4.写一个java的文件

[root@server1 ~]# vim test.java
  1 public class test {
  2         public static void main(String[] args)
  3         {
  4 
  5         System.out.println("hello world");
  6 }
  7 
  8 }
[root@server1 ~]# javac test.java 	#对脚本进行编译
[root@server1 ~]# java test			#运行脚本
hello world

5.打开tomcat

[root@server1 ~]# cd /usr/local/tomcat/
[root@server1 tomcat]# 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@server1 tomcat]# netstat -antlp|grep 8080

在这里插入图片描述

注意:在全新server2服务器上配置相同环境
在这里插入图片描述
测试:
在浏览器上开启两个窗口分别输入172.25.254.1:8080 172.25.254.2:8080(会看到初始化欢迎页面)
在这里插入图片描述

在这里插入图片描述

6.在两台服务器上进入到默认发布目录下编写jsp文件

扫描二维码关注公众号,回复: 6109049 查看本文章
[root@server1 ROOT]# pwd
/usr/local/tomcat/webapps/ROOT
[root@server1 ROOT]# vim test.jsp
[root@server1 ROOT]# cat test.jsp 
server1-The time is: <%=new java.util.Date() %>
[root@server2 ROOT]# pwd
/usr/local/tomcat/webapps/ROOT
[root@server2 ROOT]# vim test.jsp
[root@server2 ROOT]# cat test.jsp 
server2-The time is: <%=new java.util.Date() %>

测试:输入172.25.254.1:8080/test.jsp 172.25.254.2:8080/test.jsp
在这里插入图片描述

在这里插入图片描述

  • 实现负载均衡

1.确保前端openresty的nginx关闭,修改配置文件,作负载均衡配置

[root@server1 conf]# pwd
/usr/local/lnmp/nginx/conf
[root@server1 conf]# vim nginx.conf
 17 http {
 18     include       mime.types;
 19     default_type  application/octet-stream;
 20         upstream tomcat {
 21                 server 172.25.254.1:8080;
 22                 server 172.25.254.2:8080;
 23         }
 46         location / {
 47             root   /usr/local/tomcat/webapps/ROOT;
 48             index  index.html index.htm;
 49         }
 62         location ~ \.jsp$ {
 63             proxy_pass   http://tomcat;
 64         }
 68         #location ~ \.php$ {
 69         #    root           html;
 70         #    fastcgi_pass   127.0.0.1:9000;
 71         #    fastcgi_index  index.php;
 72         #    #fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
 73         #    include        fastcgi.conf;
 74         #}
 [root@server1 conf]# nginx -s reload

浏览器访问172.25.254.1/test.jsp会发现轮循
在这里插入图片描述
在这里插入图片描述

三、Tomcat 实现session共享

什么是session:

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

为什么要使用session

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

配置过程

修改发布页,两台相同

[root@server1 ROOT]# pwd
/usr/local/tomcat/webapps/ROOT
[root@server1 ROOT]# vim test.jsp 
[root@server1 ROOT]# scp test.jsp root@172.25.254.2:/usr/local/tomcat/webapps/ROOT/

在这里插入图片描述
浏览器访问172.25.254.1/test.jsp会发现负载均衡和黏性互相破坏(当用户存储信息后,再次进入信息会清空)
在这里插入图片描述
在这里插入图片描述

在server2上传信息,提交后信息会在server1上
在这里插入图片描述
在这里插入图片描述
在server1上传信息,信息会出现在server2
在这里插入图片描述
在这里插入图片描述
注意:我们发现,每次提交新的用户信息,server info 和 ID 都会改变,且新的数据就会覆盖旧的数据内容

搭建步骤:

实现session黏性,将数据绑定到一台后端服务器

1.将之前的nginx关闭,将之前的nginx删除,重新降级编译安装

[root@server1 lnmp]# nginx -s stop
[root@server1 lnmp]# cd /usr/local/lnmp/
[root@server1 lnmp]# ls
mysql  nginx  php
[root@server1 lnmp]# rm -rf nginx/

在这里插入图片描述

2.解压、编译、安装

[root@server1 lnmp]# tar zxf nginx-1.10.1.tar.gz 
[root@server1 lnmp]# cd nginx-1.10.1
[root@server1 cc]# pwd
/root/lnmp/nginx-1.10.1/auto/cc
[root@server1 cc]# vim gcc		#注释debug日志级别
[root@server1 nginx-1.10.1]# pwd
/root/lnmp/nginx-1.10.1
[root@server1 nginx-1.10.1]# ./configure --prefix=/usr/local/lnmp/nginx --with-http_ssl_module --with-http_stub_status_module --add-module=/usr/local/nginx-sticky-module-ng

注意:会出现./configure: error: no /usr/local/nginx-sticky-module-ng/config was found的报错
在这里插入图片描述

在这里插入图片描述

[root@server1 lnmp]# tar zxf nginx-sticky-module-ng.tar.gz -C /usr/local/
进入解压目录,重新进行编译
[root@server1 nginx-1.10.1]# make && make install

3.编辑配置文件

[root@server1 conf]# pwd
/usr/local/lnmp/nginx/conf
[root@server1 conf]# vim nginx.conf
 2 user  nginx nginx;
 3 worker_processes  auto;
 17 http {
 18     include       mime.types;
 19     default_type  application/octet-stream;
 20         upstream tomcat {
 21         sticky;
 22         server 172.25.254.1:8080;
 23         server 172.25.254.2:8080;
 24         }
 38     gzip  on;
 48         location / {
 49             root   /usr/local/tomcat/webapps/ROOT;
 50             index  index.html index.htm;
 51         }
 64         location ~ \.jsp$ {
 65             proxy_pass   http://tomcat;
 66         }
 [root@server1 conf]# nginx

测试:浏览器输入172.25.254.1/test.jsp
在这里插入图片描述
在这里插入图片描述

提交数据发现,绑定的主机都是server1

  • session 交叉存储的实现
    为了实验效果的查看,可以先将日志信息清空
[root@server1 ~]# cd /usr/local/tomcat/logs/
[root@server1 logs]# >catalina.out
[root@server2 ~]# cd /usr/local/tomcat/logs/
[root@server2 logs]# >catalina.out

尝试在浏览器上server1上提交2个用户的信息
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

测试:将server1的tomcat关闭

[root@server1 tomcat]# pwd
/usr/local/tomcat
[root@server1 tomcat]# bin/shutdown.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

在浏览器页面在server2上提交信息,发现并没有将server1提交的user5、user6的信息缓存过来
在这里插入图片描述

[root@server2 logs]# pwd
/usr/local/tomcat/logs
[root@server2 logs]# tail -f catalina.out	#发现并没有将信息缓存过来
交叉存储的配置搭建:

1.确保server1和server2的tomcat都打开

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

2.在server1和server2上都要安装memcached
在这里插入图片描述

[root@server2 jar]# cp * /usr/local/tomcat/lib/
[root@server2 jar]# cd /usr/local/tomcat/lib/
[root@server2 lib]# ls
[root@server2 lib]# rm -rf memcached-session-manager-tc6-1.6.3.jar

server1操作相同

3.编辑tomcat的配置文件

[root@server1 lib]# vim /usr/local/tomcat/conf/context.xml
 33 -->
 34 <Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
 35 memcachedNodes="n1:172.25.254.1:11211,n2:172.25.254.2:11211"
 36 failoverNodes="n1"
 37 requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$"
 38 transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoder    Factory"
 39 />
 40 </Context>

在这里插入图片描述

[root@server1 lib]# scp /usr/local/tomcat/conf/context.xml root@172.25.254.2:/usr/local/tomcat/conf/
[root@server2 lib]# vim /usr/local/tomcat/conf/context.xml

在这里插入图片描述

4.安装memcached

[root@server2 lib]# yum install memcached -y
[root@server2 lib]# /etc/init.d/memcached start
[root@server1 lib]# /etc/init.d/memcached start

进入浏览器,在server2上提交信息,然后关闭server2的tomcat
在这里插入图片描述

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

在server1上查到缓存的信息

[root@server1 logs]# pwd
/usr/local/tomcat/logs
[root@server1 logs]# tail -f catalina.out

以上情况是server1和server2都打开tomcat下,实现数据交叉存放存储
当1开启,2关闭的时候,在1上添加新的信息,然后打开2,再关闭1(顺序不能换,否则不成功),则在2上也可以看到新的信息

猜你喜欢

转载自blog.csdn.net/weixin_44209804/article/details/89440410
今日推荐