Nginx+tomcat+memcached实现负载均衡及session共享

Nginx+tomcat+memcached

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

当memcached有两个时可以采用交叉存储,可以更好的避免单点故障
在这里插入图片描述
说明:
Tomcat-1 (T1) 将 session 存储在 memcached-2 (T2)上。只有当 M2 不可用时,T1 才将 session 存储在 memcached-1 上(M1 是 T1 failoverNode)。使用这种配置的好处是,当 T1 和 M1 同时崩溃时也不会丢失 session 会话,避免单点故障。

tomcat负载均衡

环境:
server6:172.25.24.6 nginx + tomcat + memcache
server2: 172.25.24.2 tomcat + memcache
本篇博客中涉及的所有软件包下载可参考此博客:https://blog.csdn.net/qq657886445/article/details/83662696

Server6:

cd /usr/local/
scp -r apache-tomcat-7.0.37/ 172.25.24.2:/usr/local/
scp -r jdk1.7.0_79/ 172.25.24.2:/usr/local/
scp /etc/profile 172.25.24.2:/etc/
/usr/local/tomcat/bin/startup.sh
vim /usr/local/lnmp/nginx/conf/nginx.conf
http {
        upstream tomcat {
      	#此处不填写算法,默认使用轮叫算法roundrobin
        server 172.25.24.6:8080;
        server 172.25.24.2:8080;
        }

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

在这里插入图片描述
在这里插入图片描述

nginx -t
nginx -s reload
vim tomcat/webapps/ROOT/test.jsp
Server6   the time is: <%=new java.util.Date() %>

Server2:

source /etc/profile
cd /usr/local/
ln -s jdk1.7.0_79/ java
ln -s apache-tomcat-7.0.37/ tomcat
tomcat/bin/shutdown.sh
vim tomcat/webapps/ROOT/test.jsp
Server2   the time is: <%=new java.util.Date() %>

测试:
访问server6 ip可实现tomcat负载均衡
在这里插入图片描述

Session共享

修改server6的nginx配置文件并重新加载nginx

vim /usr/local/lnmp/nginx/conf/nginx.conf
http {
        upstream tomcat {
        sticky;   #nginx 编译时需添加sticky模块
        server 172.25.24.6:8080;
        server 172.25.24.2:8080;
        }

在这里插入图片描述

nginx -t
nginx -s reload

Server2与Server6安装并开启memcached修改 tomcat的页面 并修改tomcat配置文件

yum install -y memcached
/etc/init.d/memcached start

vim /usr/local/tomcat/webapps/ROOT/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>


vim /usr/local/tomcat/conf/context.xml
在<Context>下面添加
    <Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
    memcachedNodes="n1:172.25.24.9:11211,n2:172.25.24.4:11211"
    failoverNodes="n1"
    requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$"
    transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory"
/>

将以下软件包放在/usr/local/tomcat/lib下
在这里插入图片描述
重启tomcat

/usr/local/tomcat/bin/shutdown.sh
/usr/local/tomcat/bin/startup.sh

cat /usr/local/tomcat/logs/catalina.out   # 查看tomcat日志
有此INFO:提示表示tomcat启动成功,并且为交叉缓存先在n1memcache缓存当n1down掉时才使用n2缓存,本机为n2

在这里插入图片描述
在这里插入图片描述
测试:
访问server6 ip可实现session会话保持
提交数据,查看日志得是使用server2的tomcat服务,其实是保存在server6的memcache上
在这里插入图片描述
在这里插入图片描述
查看memcache缓存 ,telnet用yum install -y telnet安装

telnet 172.25.24.2 11211 
get 5D24979FFAF5D330AC8495E04E336B43-n1

在这里插入图片描述
在这里插入图片描述
此时关掉server6的memcache,继续在网页提交数据
在这里插入图片描述
可以看见session ID变为n2
在这里插入图片描述
在server2上查看memcache缓存,发现在server6的memcache缓存的数据
在这里插入图片描述
打开server6的memcache,关闭server2的tomcat,继续在网页提交数据
此时Info提示为server6,memcacheID仍然为n2,并且session保持
在这里插入图片描述
查看server2的memcache缓存和server6的tomcat日志
在这里插入图片描述
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq657886445/article/details/83180963