tomcat结合memcache

本文介绍了如何将Tomcat与Memcached结合,解决静态资源转发问题,并通过配置实现负载均衡。在关闭或重启服务器时,确保Session的保持和数据的交叉储存。通过在各节点上安装Memcached,实现了即使服务器关闭,仍能访问到缓存数据,从而保证了服务的连续性和用户体验。

下载地址:Bitbucket

软件安装:

[root@server2 ~]# tar zxf apache-tomcat-7.0.37.tar.gz -C /usr/local/
[root@server2 local]# ln -s apache-tomcat-7.0.37/ tomcat  ##添加软链接
[root@server2 ~]# rpm -ivh jdk-8u121-linux-x64.rpm 
[root@server2 ~]# /usr/local/tomcat/bin/startup.sh 

server1中停掉nginx

[root@server1 conf]# /usr/local/openresty/nginx/sbin/nginx -s stop


 location ~ \.jsp$ {
           proxy_pass   http://172.25.6.2:8080;
        }

访问http://172.25.6.1/index.jsp


访问http://172.25.6.2:8080/


原因是:tomcat不可转发图片(静态),配置文件并没有转发nginx

改为域名访问

server {
        listen 80;
        server_name www.westos.org;

        location / {
                proxy_pass http://172.25.6.2:8080;
        }
}
}

访问http://www.westos.org/

下载一个测试页面

[root@server2 ~]# cd /usr/local/tomcat/webapps/ROOT/  ##注意测试页面要放在此目录下
[root@server2 ROOT]# lftp 172.25.254.250
lftp 172.25.254.250:~> cd /pub/docs/lamp
cd ok, cwd=/pub/docs/lamp
lftp 172.25.254.250:/pub/docs/lamp> get test.jsp
968 bytes transferred

访问http://www.westos.org/test.jsp

添加负载均衡

[root@server2 ROOT]# /usr/local/tomcat/bin/shutdown.sh  关闭2

[root@server2 ~]# scp apache-tomcat-7.0.37.tar.gz jdk-8u121-linux-x64.rpm server3:  ##传给3

[root@server3 ~]# rpm -ivh jdk-8u121-linux-x64.rpm 
[root@server3 ~]# tar zxf apache-tomcat-7.0.37.tar.gz -C /usr/local
[root@server3 ~]# cd /usr/local/
[root@server3 local]# ls
apache-tomcat-7.0.37  etc    include  lib64    sbin   src
bin                   games  lib      libexec  share
[root@server3 local]# ln -s apache-tomcat-7.0.37/ tomcat
[root@server3 tomcat]# bin/startup.sh 
[root@server3 tomcat]# cd /usr/local/tomcat/webapps/ROOT/
[root@server3 ROOT]# lftp 172.25.254.250
lftp 172.25.254.250:~> cd /pub/docs/lamp/
cd ok, cwd=/pub/docs/lamp
lftp 172.25.254.250:/pub/docs/lamp> get test.jsp 
968 bytes transferred
lftp 172.25.254.250:/pub/docs/lamp> exit

[root@server1 conf]# vim nginx.conf

http {
        upstream tomcat {
        #ip_hash;
        #sticky;
        server 172.25.6.2:8080;
        server 172.25.6.3:8080;
        }


        location / {
                proxy_pass http://tomcat;
        }
}
[root@server1 conf]# nginx -t
[root@server1 conf]# nginx -s reload

访问http://www.westos.org/test.jsp 会发现访问3

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

打开2,访问会发现2,3负载均衡

[root@server1 conf]# vim nginx.conf

    ip_hash;
[root@server1 conf]# nginx -t
[root@server1 conf]# nginx -s reload

此时关掉2,会访问3,但session不保持,开启2又会回到2,此处还存在问题,我们下面要解决这个问题。

升级至1.20.2

[root@server1 nginx-1.20.2]# cd nginx-1.20.2
[root@server1 nginx-1.20.2]# make clean
[root@server1 nginx-1.20.2]# ./configure --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module --add-module=/root/nginx-goodies-nginx-sticky-module-ng-08a395c66e42
[root@server1 nginx-1.20.2]# make

[root@server1 nginx-1.20.2]# cd objs
[root@server1 objs]# ls
addon         Makefile  nginx.8            ngx_auto_headers.h  ngx_modules.o
autoconf.err  nginx     ngx_auto_config.h  ngx_modules.c       src
[root@server1 objs]# \cp -f nginx /usr/local/nginx/sbin/nginx
[root@server1 conf]# vim nginx.conf  ##开启sticky(固定cookie)

 访问http://www.westos.org/test.jsp

 [root@server2 ~]# /usr/local/tomcat/bin/shutdown.sh  关掉2,访问的是3

[root@server2 ~]# /usr/local/tomcat/bin/startup.sh   开启2,依然访问3

我们需要实现交叉储存

2、3中下载memcached

[root@server2 ~]# yum install -y memcached
[root@server2 ~]# systemctl start memcached

[root@server3 ~]# yum install -y memcached
[root@server3 ~]# systemctl start memcached

[root@server2 ~]# cd /usr/local/tomcat/
[root@server2 tomcat]# ls
bin   jdk-8u121-linux-x64.rpm  LICENSE  NOTICE         RUNNING.txt  webapps
conf  lib                      logs     RELEASE-NOTES  temp         work
[root@server2 tomcat]# bin/shutdown.sh 

[root@server2 bin]# cd ..
[root@server2 tomcat]# cd conf
[root@server2 conf]# vim context.xml 

<Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
memcachedNodes="n1:172.25.6.3:11211,n2:172.25.6.4:11211"
failoverNodes="n1"
requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$"
transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory"
/>

[root@server2 tomcat]# cd lib

[root@server2 lib]# rm -f memcached-session-manager-tc6-1.6.3.jar  ##删掉版本6的

[root@server2 tomcat]# bin/startup.sh 

[root@server2 tomcat]# cd logs/
[root@server2 logs]# cat catalina.out 

如果有以下则正确
INFO: MemcachedSessionService finished initialization, sticky true, operation timeout 1000, with node ids [n2] and failover node ids [n1]

 设置3

[root@server3 ~]# cd /usr/local/tomcat/
[root@server3 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
Using CLASSPATH:       /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar

[root@server3 conf]# vim context.xml 

<Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
memcachedNodes="n1:172.25.6.3:11211,n2:172.25.6.4:11211"
failoverNodes="n2"
requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$"
transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory"
/>

此处下载了asm-3.2.jar kryo-1.04.jar kryo-serializers-0.10.jar memcached-session-manager-1.6.3.jar memcached-session-manager-tc6-1.6.3.jar memcached-session-manager-tc7-1.6.3.jar  minlog-1.2.jar  msm-kryo-serializer-1.6.3.jar  reflectasm-1.01.jar  spymemcached-2.7.3.jar
[root@server3 lib]# rm -fr memcached-session-manager-tc6-1.6.3.jar


[root@server3 logs]# cat catalina.out

INFO: MemcachedSessionService finished initialization, sticky true, operation timeout 1000, with node ids [n1] and failover node ids [n2]


[root@server2 conf]# yum install  -y telnet
[root@server2 conf]# telnet localhost 11211

http://www.westos.org/test.jsp

在2、3的memcached和tomcat都开启的时候,172.25.6.2对应的是n2(3中的mem)。

在2、3的memcached和tomcat都开启的时候,关闭2的tomcat:bin/shutdown.sh,测试页的历史输入还在,访问ip变为172.25.6.3,对应变为n1。

在2、3的memcached和tomcat都开启的时候,关闭3的memcached:systemctl stop memcached:历史输入还在,ip还是172.25.6.2,变为n1(172.25.52.3中n2挂掉了,server2访问自己的缓存)

在2、3的memcached和tomcat都开启的时候,,若172.25.6.3的memcached和tomcat都down掉(server3poweroff)n2的历史输入不存在了,因为172.25.6.2访问的server3的memc,2的存储变为n2

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值