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

62 篇文章 1 订阅
8 篇文章 1 订阅
本文介绍了如何使用nginx作为反向代理服务器,通过配置负载均衡策略,将请求转发到多个tomcat实例,以实现服务器间的负载均衡。实验中详细阐述了从环境准备、配置nginx到启动服务的步骤,并提到了在企业环境中会话保持的重要性。
摘要由CSDN通过智能技术生成

一、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模块来实现负载均衡中的会话保持。
在下一篇博客中,我们解决此问题。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值