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

405

被折叠的 条评论
为什么被折叠?



