nginx+tomcat+memcached的配置

一   tomcat与nginx相关联

1.在上次lnmp实验环境的基础上,打开nginx和php-fpm服务:

2.将jdk压缩包解压到/usr/local目录下并进入/usr/local目录制作软链接名为java:

3.编辑/etc/profile文件设定全局变量,之后source /etc/profile刷新:

之后echo $PATH就可以看到新的全局变量:

4.同样将apache-tomcat压缩包解压到/usr/local目录下并制作软链接名为romcat:

   进入/usr/local/tomcat/bin目录下,./startup.sh开启tomcat服务:

5. 编辑nginx的配置文加/usr/local/lnmp/nginx/conf/nginx.conf,编辑完成之后重启nginx服务:

浏览器访问本机的8080端口就可以看到tomcat界面:

6.在tomcat的默认发布目录/usr/local/tomcat/webapps/ROOT下新建文件tets.jsp,保存退出后重启nginx:

7. 在server2主机端进行以上同样的操作搭建tomcat环境,同样在tomcat发布目录里写入test.jsp文件:

8.在server1端编辑nginx的配置文件写入负载均衡并重启nginx服务:

这样就可以实现负载均衡:

二 tomcat的数据保存

1. 在server1和server2的tomcat默认发布目录下新建测试文件test.jsp覆盖原文件,文件内容:

 1 <%@ page contentType="text/html; charset=GBK" %>
  2 <%@ page import="java.util.*" %>
  3 <html><head><title>Cluster App Test</title></head>
  4 <body>
  5 Server Info:
  6 <%
  7 out.println(request.getLocalAddr() + " : " + request.getLocalPort()+"<br>")    ;%>
  8 <%
  9 out.println("<br> ID " + session.getId()+"<br>");
 10 String dataName = request.getParameter("dataName");
 11 if (dataName != null && dataName.length() > 0) {
 12 String dataValue = request.getParameter("dataValue");
 13 session.setAttribute(dataName, dataValue);
 14 }
 15 out.print("<b>Session list</b>");
 16 Enumeration e = session.getAttributeNames();
 17 while (e.hasMoreElements()) {
 18 String name = (String)e.nextElement();
 19 String value = session.getAttribute(name).toString();
 20 out.println( name + " = " + value+"<br>");
 21 System.out.println( name + " = " + value);
 22 }

 23 %>
 24 <form action="test.jsp" method="POST">
 25 name:<input type=text size=20 name="dataName">
 26 <br>
 27 key:<input type=text size=20 name="dataValue">
 28 <br>
 29 <input type=submit>
 30 </form>
 31 </body>
 32 </html>

2. 在server2端关闭tomcat,在浏览器中访问172.25.17.1/test.jsp ,会发现输入的数据都会被保存可见:

   但开启server2端的tomcat服务之后,负载均衡的存在,在server1端提交数据之后,服务会跳到server2端的tomcat,再回来的时候,原来的数据就不存在了:

这是因为当开启一个tomcat时,产生的数据会保存到本地,当开启两个tomcat时,受nginx调度的影响,server1端提交数据后服务跳到server2端,与原来建立的session中断了,再次回来原来的数据就不在了。为了解决这个问题,需要重新编译nginx并加入sticky模块。

3.重新编译nginx,首先需要停掉nginx服务并结束所有nginx进程,然后进入nginx的解压目录执行make clean清除原来的配置:

configure重新编译,这里指定的prefix路径一定要和原来的安装路径一致用来覆盖原来的安装,并加入sticky模块:

4.编译完成之后编辑nginx的配置文件加入sticky,开启nginx服务然后重新加载

在浏览器里就可以将数据保存,即使server2端的tomcat也开着,提交之后服务也不会跳转到server2上去,这样就保证了server1端的数据不会丢失。如果server1端的tomcat被关闭了,服务就会跳到server2端的tomcat去。

这种方式,如钩server1挂掉,server1上的数据将丢失。因此加入memcache的功能,在服务器挂掉时候将数据转移到另一个服务器上保证数据安全。

三  memcache的加入

    可能由于tomcat7.0.90版本问题,将该版本删除使用7.0.37版本,并重新配置

1.在server1和server2端都安装memcache服务并开启服务:yum install memcached -y

2.在server1和server2的/usr/local/tomcat/conf目录下,编辑context.xml文件(server1端的failoverNodes为n1):

3.将两端tomcat服务关闭,将以下jar包放在两端服务器的/usr/local/tomcat/lib目录下,之后重启服务。

4.当服务运行在server1端时,写入数据111、222和333:

关闭server1端的tomcat服务,在浏览器里继续输入数据,服务跳转到server2端,但仍然可以看到server1端的数据:

或者两端安装telnet服务,在server2端输入telnet localhist 11211 回车,get后面输入server1的id,也可以看到server1端的数据。实现了server2服务挂掉数据在server2端的备份。

猜你喜欢

转载自blog.csdn.net/letter_A/article/details/81480806
今日推荐