Tomcat是一个小型的轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP程序的首选。对于一个初学者来说,可以这样认为,当在一台机器上配置好Apache服务器,可利用它响应对HTML页面的访问请求。实际上Tomcat部分是Apache服务器的扩展,但它是独立运行的,所以当你运行tomcat时,它实际上作为一个与Apache独立的进程单独运行的。
环境:
- server1:172.25.70.1
- server2:172.25.70.2
一、在server1、server2上安装jdk
1.解压到指定目录/usr/local/
tar zxf jdk-7u79-linux-x64.tar.gz -C /usr/local/
cd /usr/local/
ln -s jdk1.7.0_79/ java 做软连接,升级的时候只升级软连接,较为方便
2.配置java的环境变量
vim /etc/profile (写在文件最后)
=================================
export JAVA_HOME=/usr/local/java
export CLASSPATH=.:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
export PATH=$PATH:$JAVA_HOME/bin
=================================
source /etc/profile # 重新加载配置文件
3.检测jdk环境是否正确:
java -version
vim test.java #java语言格式
===================================================
public class test {
public static void main(String[] args){
System.out.println("Hello World!");
}
}
====================================================
javac test.java #javac编译.java脚本
java test # 运行脚本
=============================
Hello World! # 运行结果
可以看到,jdk环境变量配置成功
server2操作同server1
二、在server1、server2上安装tomcat
1.解压tomcat
tar zxf apache-tomcat-7.0.37.tar.gz -C /usr/local/
cd /usr/local
ln -s apache-tomcat-7.0.37/ tomcat # 做软连接
2.进入tomcat的发布目录,测试tomcat是否安装正确
启动tomcat
pwd
/usr/local/tomcat/bin
======================
./startup.sh
查看日志
pwd
/usr/local/tomcat
=======================
cat logs/catalina.out
测试tomcat
tomcat的默认发布目录在tomcat/webapps/ROOT 下
cd tomcat/webapps/ROOT
#index.jsp是默认发布文件
vim test.jsp
======================
the time is :<%=new java.util.Date() %>
========================================
浏览器处输入172.25.70.1:8080/test.jsp查看页面。
出现404报错,需要打开代理
vim /usr/local/lnmp/nginx/conf/nginx.conf
================================================
66 location ~ \.jsp$ {
67 proxy_pass http://127.0.0.1:8080;
68 }
=======================================================
#nginx重新加载配置文件内容
nginx -s reload
重新访问172.25.70.1:8080/test.jsp
server2操作同server1
访问默认发布页
- server1
- server2
三.实现server1和server2的tomcat负载均衡
1.修改nginx的配置文件:
18 upstream tomcat {
19 server 172.25.70.1:8080;
20 server 172.25.70.2:8080;
21 }
47 location / {
48 root /usr/local/tomcat/webapps/ROOT;
49 index index.html index.htm;
50 }
63 location ~ \.jsp$ {
64 proxy_pass http://tomcat;
65 }
66
68 #
69 # location ~ \.php$ {
70 # root html;
71 # fastcgi_pass 127.0.0.1:9000;
72 # fastcgi_index index.php;
73 # #fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
74 # include fastcgi.conf;
75 # }
重新加载配置文件内容
nginx -s reload
2.修改server1、server2的测试发布页
3.重启server1、server2的tomcat
- server1
- server2
在浏览器172.25.70.1:8080/test.jsp,出现轮询
4、更改默认发布页
[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
[root@server1 bin]# cd -
/usr/local/tomcat/webapps/ROOT
[root@server1 ROOT]# pwd
/usr/local/tomcat/webapps/ROOT
[root@server1 ROOT]# scp test.jsp root@server2:/usr/local/tomcat/webapps/ROOT/
root@server2's password:
test.jsp 100% 968 1.0KB/s 00:00
5、重启server1 Nginx、tomcat及server2 tomcat服务
- server1:
nginx -s reload
[root@server1 bin]# ./shutdown.sh
[root@server1 bin]# ./startup.sh
- server2:
[root@server1 bin]# ./shutdown.sh
[root@server1 bin]# ./startup.sh
6、浏览器访问172.25.70.1:8080/test.jsp,测试
发现负载均衡和黏性互相破坏(当用户存储信息后,再次进入信息会清空)
我们发现虽然在上次的实验中当用户存储信息后,信息不会清空,但是会轮循。这会给用户的使用造成一点影响,我们理想的情况应该是来自同一客户端的请求,保持在同一服务端。——session粘性
7、解压缩sticky模块安装包,重新编译、安装nginx。
首先关闭nginx服务:
nginx -s stop
====================================================
[root@server1 ~]# ls nginx-sticky-module-ng.tar.gz
nginx-sticky-module-ng.tar.gz
[root@server1 ~]# tar zxf nginx-sticky-module-ng.tar.gz
=========================================================
[root@server1 nginx-1.14.0]# ./configure --prefix=/usr/local/lnmp/nginx --with-threads --with-file-aio --with-http_ssl_module --with-http_stub_status_module --user=nginx --group=nginx --add-module=/root/nginx-sticky-module-ng
编译安装
make && make install
8、编辑nginx配置文件
[root@server1 nginx-1.14.0]# vim /usr/local/lnmp/nginx/conf/nginx.conf
========================================================================
17 http {
18 include mime.types;
19 default_type application/octet-stream;
20 upstream tomcat {
21 sticky;
22 server 172.25.70.1:8080;
23 server 172.25.70.2:8080;
24 }
9、重新启动nginx
nginx
重新测试:
发现负载均衡和黏性不冲突(当用户存储信息后,再次进入信息不会清空)
四、tomcat实现session共享
1、关闭server1的tomcat,server2下载memcache
- server1:
[root@server1 bin]# ./shutdown.sh
- server2:
2、server1、server2获得memcached-session-manager的有关jar包,启动server2的memcached
[root@server1 ~]# cd jar/
[root@server1 jar]# ls
asm-3.2.jar minlog-1.2.jar
kryo-1.04.jar msm-kryo-serializer-1.6.3.jar
kryo-serializers-0.10.jar reflectasm-1.01.jar
memcached-session-manager-1.6.3.jar spymemcached-2.7.3.jar
memcached-session-manager-tc7-1.6.3.jar
[root@server1 jar]# mv * /usr/local/tomcat/lib/
[root@server1 jar]#
- server1:
- server2:
重启memcached服务
[root@server2 ~]# /etc/init.d/memcached start
Starting memcached: [ OK ]
3、编辑server1、server2的context.xml文件
server1:
[root@server1 lib]# cd ../conf/
[root@server1 conf]# vim context.xml
=====================================
添加:
<Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
memcachedNodes="n1:172.25.70.1:11211,n2:172.25.70.2:11211"
failoverNodes="n1"
requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$"
transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory"
/>
server2:
[root@server2 lib]# vim /usr/local/tomcat/conf/context.xml
4、server1、server2启动tomcat
cd /usr/local/tomcat/bin/
./startup.sh
- server1:
- server2:
5、测试
在浏览器输入:http://172.25.70.1/test.jsp
关闭server2的tomcat,再测试网页
服务端仍可以存储数据,之前的数据不会丢失