企业—Openresty+tomcat实现负载均衡及nginx+sticky解决数据覆盖及其session交叉存放

一.tomcat负载轮询的部署

1.在实验机上配置JAVA的运行环境

  • (1)官网下载jdk包,并解压
    在这里插入图片描述
  • (2)做java的软连接,方便使用而且升级的时候也是升级软连接
    在这里插入图片描述
  • (3)添加java的环境变量方便调用
[root@server1 local]# vim /etc/profile
[root@server1 local]# source /etc/profile #重新加载

文件添加内容如下:
在这里插入图片描述
在这里插入图片描述

  • (3)测试
[root@server1 ~]# vim test.java #编写java脚本
[root@server1 ~]# javac test.java  #脚本测试
[root@server1 ~]# java test #执行脚本

脚本编辑内容如下:
在这里插入图片描述
在这里插入图片描述

实验环境:

主机名(ip) 服务
server1(172.25.254.1) openresty(nginx),tomcat
server2(172.25.254.1) tomcat

2.server1上tomcat的配置

  • (1)官网下在安装包,并且解压到/usr/local
    在这里插入图片描述
  • (2)设置软链接
    在这里插入图片描述
  • (3)开启tomcat
    在这里插入图片描述
    在这里插入图片描述
  • (4)编辑Nginx的配置文件加入tomcat
[root@server1 bin]# cd /usr/local/openresty/nginx/conf/
[root@server1 conf]# vim nginx.conf

文件编辑内容如下:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • (5)检测nginx的配置文件是否有误并重新加载nginx服务
    在这里插入图片描述
    在这里插入图片描述
  • (6)在浏览器中测试访问
    在这里插入图片描述
    注:访问端口则出现的是图像,需要访问默认发布目录下的文件
    在这里插入图片描述
    再次查看,在浏览器输入:http://172.25.254.1/index.jsp
    在这里插入图片描述
    编写测试文件再次测试:
    在这里插入图片描述
    在这里插入图片描述
    3.server2上的tomcat的配置
  • (1)将server1上已经配置好的tomcat和java复制过来
[root@server2 local]# scp -r [email protected]:/usr/local/tomcat /usr/local/
[root@server2 local]# scp -r [email protected]:/usr/local/java /usr/local/
[root@server2 ~]# cd /usr/local/
[root@server2 local]# ls
bin  etc  games  include  java  lib  lib64  libexec  sbin  share  src  tomcat

在这里插入图片描述

  • (2)配置java环境变量
    在这里插入图片描述
    添加内容如下:
    在这里插入图片描述
    加载环境变量
    在这里插入图片描述

  • (3)打开server2上的tomcat
    在这里插入图片描述
    查看端口:
    在这里插入图片描述
    4.实现server1和server2上的tomcat的负载均衡

  • 在server1上的openresty下的nginx模块的配置文件添加负载tomcat的负载均衡策略:
    在这里插入图片描述
    文件编辑内容如下:
    在这里插入图片描述
    在这里插入图片描述

  • 检查语法错误并重启nginx
    在这里插入图片描述

  • 将server1编写测试页:
    在这里插入图片描述

  • 在server2上编写测试页
    在这里插入图片描述
    测试如下:
    在浏览器上输入:
    http://172.25.254.1/test.jsp
    在这里插入图片描述
    再次刷新发现实现负载均衡
    在这里插入图片描述

二.tomcat中session的实现

1.tomcat中出现数据覆盖的问题

  • (1)

  • 在测试页面写入如下内容:

[root@server1 ROOT]# vim 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>
server2上也做同样的测试页
  • 在浏览器中输入:http://172.25.254.1/test.jsp
    在这里插入图片描述
    出现以上界面

  • 测试;
    a.在server2上上传user1
    在这里插入图片描述
    提交信息后,数据信息是在server1存储的
    b.再提交server2的信息
    在这里插入图片描述
    可以看到每次上传新的信息都会覆盖之前原来的信息。解决如下:

2.解决数据覆盖,即上传到同一个后端服务器

  • 解压nginx-1.10.1及其nginx的sticky安装包
    在这里插入图片描述
  • 去掉nginx的版本号
    在这里插入图片描述
    文件编辑内容如下:
    在这里插入图片描述
  • 关闭debug日志
    在这里插入图片描述
    在这里插入图片描述
  • 进入解压目录进行编译安装该版本的nginx
[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=/root/nginx-sticky-module-ng
[root@server1 nginx-1.10.1]# make && make install
  • 关掉openresty下的Nginx以免冲突
    在这里插入图片描述
  • 将原来的openresty下的nginx的配置文件复制到该版本的nginx的配置文件的目录下
    在这里插入图片描述
  • 编辑该版本的nginx的配置文件
    在这里插入图片描述
    在这里插入图片描述
  • 检查该版本配置后的nginx的语法错误并开启nginx
    在这里插入图片描述
  • 在浏览器中输入:http://172.25.254.1/test.jsp
    再次同上测试步骤相同再检查
    在这里插入图片描述
    发现数据不会覆盖,且绑定为同一个主机server2

2.tomcat中与交叉存储相关的问题

  • tomcat的日志查看及清空
    在这里插入图片描述

  • 在浏览器中输入:http://172.25.254.1/test.jsp
    再server1上提交用户数据
    在这里插入图片描述

  • 关掉server1的tomcat
    在这里插入图片描述

  • 再次刷新测试页,发现server2上没有server1上已经提交的数据
    在这里插入图片描述
    2.交叉存储配置的实现

  • 打开测试时关掉的server1的tomcat,server2也要保证开启
    在这里插入图片描述
    在这里插入图片描述

  • 在server2上安装memcached,并开启memcached

[root@server2 bin]# yum install memcached -y
[root@server2 bin]# /etc/init.d/memcached start
  • 在官网下载实现交叉存储相关的安装包,并且放在server1和server2的/usr/local/tomcat/lib的目录下

相关安装包:
在这里插入图片描述
在这里插入图片描述
同时server2上也要有上面的安装包

  • 编辑tomcat的配置文件
    在这里插入图片描述
    配置文件编辑内容如下:
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.KryoTranscoderFactory"
 39 />

在这里插入图片描述

  • 将配置文件发送给server2
    在这里插入图片描述
    server2上的修改如下:
    在这里插入图片描述
  • 在浏览器中输入测试页,显示在server1上,在server1上提交数据信息,然后关掉server1的tomcat。
  • 在server2上查看发现缓存到了server1上刚刚提交的信息
[root@server2 nginx-1.10.1]# cd /usr/local/tomcat/logs/
[root@server2 logs]# tail -f catalina.out 

猜你喜欢

转载自blog.csdn.net/weixin_44224288/article/details/89715844