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端的备份。