Nginx+tomcat+memcached实现负载均衡及session(交叉存储)

###在上一篇文章tomcat配置的基础上

Nginx+tomcat+memcached

使用nginx作为前端服务器来实现tomcat负载均衡及高可用,同时基于jsp的动态特征,我们将引入memcache来保持网页在连接过程中的session保持,利用memcached把多个tomcat的session集中管理
图解:
在这里插入图片描述
说明:
客户端请求时nginx通过负载调度算法将请求调度至某一后端服务器;tomcat 把会话通过组播的方式复制到集群各节点;所有节点共享会话;

当memcached有两个时可以采用交叉存储,可以更好的避免单点故障
在这里插入图片描述
实验环境

主机
server1(nginx+tomcat+memcached) 172.25.5.1
server2(tomcat+memcached) 172.25.5.2

rhel6.5 selinux disable iptables stop

一.sticky(粘至)+nginx1.10实现后端服务器数据同步

1.给server1和server2的tomcat的发布目录下建立一个可以建立存储用户的test.jsp后面有内容

[root@server1 mnt]# cp test.jsp /usr/local/tomcat/webapps/
[root@server1 mnt]# scp test.jsp [email protected]:/usr/local/tomcat/

2.安装nginx1.10.1版本(更好的兼容sticky模块)

[root@server1 sbin]# cd /usr/local/openresty/nginx/sbin/
[root@server1 sbin]# ./nginx -s stop     ##关掉openresty的nginx
[root@server1 mnt]# tar axf nginx-sticky-module-ng.tar.gz ##解压sticky模块
[root@server1 mnt]# cd nginx-sticky-module-ng
[root@server1 nginx-sticky-module-ng]# ls
basic.t        docs                    ngx_http_sticky_misc.h    README.md
Changelog.txt  LICENSE                 ngx_http_sticky_module.c
config         ngx_http_sticky_misc.c  patches
[root@server1 nginx-sticky-module-ng]# cd ..
[root@server1 mnt]# 
[root@server1 mnt]# tar zxf nginx-1.10.1.tar.gz 
[root@server1 mnt]# cd nginx-1.10.1
[root@server1 nginx-1.10.1]# vim src/core/ng  ###修改版本号
[root@server1 nginx-1.10.1]# vim auto/cc/gcc  ###注释debug日至
[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=/mnt/nginx-sticky-module-ng  ##编译时添加sticky模块
[root@server1 nginx-1.10.1]# make && make install
[root@server1 nginx-1.10.1]# cp /usr/local/openresty/nginx/conf/nginx.conf /usr/local/lnmp/nginx/conf/nginx.conf 拷贝openresty的nginx的
配置文件

3.编辑配置文件

[root@server1 nginx-1.10.1]# cd /usr/local/lnmp/nginx/conf/
[root@server1 conf]# vim nginx.conf
http {
	upstream tomcat {
	#此处不填写算法,默认使用轮叫算法roundrobin
		sticky;     ##添加sticky模块
		server 172.25.5.1:8080;
		server 172.25.5.2:8080;
	}
[root@server1 conf]# cd ..
[root@server1 nginx]# cd sbin/
[root@server1 sbin]# ./nginx -t
[root@server1 sbin]# ./nginx 

测试
在网页上http://172.25.5.1:/test.jsp添加用户时不管后端那台服务器,添加的信息不会丢失
在这里插入图片描述
但是这种万一台服务器崩了,前面的数据就没了,所以我们要配置Nginx+tomcat+memcached实现负载均衡及session(交叉存储)

二. nginx+tomcat+memcached负载均衡以及session共享

server1:

[root@server1 mnt]# cd /usr/local/tomcat/logs/
[root@server1 logs]# > catalina.out    ##清空前面添加的数据
[root@server1 tomcat]# cd lib/     
[root@server1 lib]# cp /mnt/jar/* .     ##将jar所以包放进ltomcat的lib目录下      
[root@server1 tomcat]# cd conf/
[root@server1 conf]# vim context.xml      ##编辑在文章的最后添加
<Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
memcachedNodes="n1:172.25.5.1:11211,n2:172.25.5.2:11211"    
failoverNodes="n1"       此处为n1
requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$"
transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory"
/>
[root@server1 conf]# scp context.xml [email protected]:/usr/local/tomcat/conf/   ##给server2发送过去
[root@server1 mnt]# cd jar/
[root@server1 jar]# scp * [email protected]:/usr/local/tomcat/lib/      在将jar里面的软件包给server2的tomcat的lib目录发送过去
[root@server1 mnt]# cd /usr/local/tomcat/bin/
[root@server1 bin]# /etc/init.d/memcached start        ##开启memcache
[root@server1 bin]# ./shutdown.sh          ###重新启动shutdown
[root@server1 bin]# ./startup.sh 

server2:

[root@server2 webapps]# cd /usr/local/tomcat/bin/
[root@server2 bin]# yum install -y memcached     ##下载memcache
[root@server2 bin]# /etc/init.d/memcached start  ##开启memcache
[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.5.1:11211,n2:172.25.5.2:11211"
failoverNodes="n2"   ##修改为n2
requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$"
transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory"
/>
[root@server2 tomcat]# cd lib/  ##查看lib下面的东西是否齐全
[root@server2 bin]# ./shutdown.sh 
[root@server2 bin]# ./startup.sh 

测试:
###在网页上http://172.25.5.1:/test.jsp
在这里插入图片描述
#建立用户,如果其中一台tomcat挂了
在这里插入图片描述
#另外一台tomcat主机会自动存储数据
在这里插入图片描述

#####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>

猜你喜欢

转载自blog.csdn.net/weixin_43407305/article/details/87806343