lnmp架构(七)——nginx+tomcat实现负载均衡

一、nginx+tomcat实现负载均衡

在上一篇博客中,我们已经实现了客户端访问动态页面,现在我们来实现负载均衡
实验环境

主机(版本:ip) 功用
虚拟机server1(rhel6.5:172.25.2.1) lnmp环境主机+tomcat1服务器
虚拟机server2(rhel6.5:172.25.2.2) tomcat2服务器
真机(rhel7.3:172.25.2.250) 测试机

实验原理
nginx作为反向代理服务器,转发多个tomcat服务器,实现负载均衡。

1、重新开一台虚拟机,将server1中的jdk和tomcat发送到2上

[root@server1 local]# scp -r apache-tomcat-7.0.37  jdk1.7.0_79  server2:/usr/local/

在这里插入图片描述

2、在server2上,创建软链接,并配置环境变量

[root@server2 ~]# cd /usr/local
[root@server2 local]# ln -s jdk1.7.0_79/ java
[root@server2 local]# ln -s apache-tomcat-7.0.37/ tomcat
[root@server2 local]# vim /etc/profile
export JAVA_HOME=/usr/local/jdk1.7.0_79
export CLASSPATH=.:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
export  PATH=$PATH:$JAVA_HOME/bin
[root@server2 local]# source /etc/profile

在这里插入图片描述

3、在server1中,编辑openresty中配置文件,并重启nginx。

[root@server1 local]#  cd /usr/local/openresty/nginx/conf/
[root@server1 conf]# vim nginx.conf

 17 http {
 18 upstream tomcat{
 19         server 172.25.11.1:8080;       
 20         server  172.25.11.2:8080;      
 21 }

 73         location ~ \.jsp$ {
 74             proxy_pass   http://tomcat;          #使其访问tomcat
 75         }

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

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

  • 注意:这一块注释掉,是为了实验效果。

在这里插入图片描述
在这里插入图片描述
4、先删除原有测试页,再编辑新测试页test.jsp,并发送server2

[root@server1 conf]# cd /usr/local/tomcat/webapps/ROOT/
[root@server1 ROOT]#  rm -fr test.jsp 
[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>
[root@server1 ROOT]# scp test.jsp server2:/usr/local/tomcat/webapps/ROOT/

在这里插入图片描述
编辑完成后,发送给server2
在这里插入图片描述
在这里插入图片描述
在server2上

在这里插入图片描述
5、在server1和server2上都重启tomcat,并查看端口

  • tomcat的重启只能先关闭先开启
[root@server1 bin]# cd /usr/local/tomcat/bin/
[root@server1 bin]# ./shutdown.sh
[root@server1 bin]#  ./startup.sh 
[root@server1 bin]# netstat -tnlp

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

6、在浏览器访问测试页http://172.25.2.1/test.jsp

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

  • 注意:在企业里这两个页面是一样的,用户根本不知道访问的那个服务器,这里只是为了实验效果而区别开来,也可以使用以下代码做的测试页,可以更加明显:

在server1和server2上,编辑测试页面:
server1上:

server1 the time is:<%=new java.util.Date() %>

server2上:

server2 the time is:<%=new java.util.Date() %>

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

再次访问测试页http://172.25.2.1/test.jsp
在这里插入图片描述
在这里插入图片描述
我们还可以在配置文件添加权重weight

在这里插入图片描述
每次轮询server11次,server22次。
在这里插入图片描述
到此,我们实现了负载均衡,但是1上面的数据信息会存储到2上面,2上面的数据信息会存储到1上面,而且新的数据就会覆盖旧的数据内容,这样会造成数据的丢失。为了解决这个问题,我们需要使用sticky模块来实现负载均衡中的会话保持。
在下一篇博客中,我们解决此问题。

发布了125 篇原创文章 · 获赞 25 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/ranrancc_/article/details/104217598