关于tomcat
Tomcat是Apache软件基金会(Apache Software Foundation)的Jakarta项目中的一个核心项目,由Apache、Sun和其他一些公司及个人共同开发而成。
Tomcat是一个轻量级应用服务器。
java程序写的网站用tomcat+jdk来运行。
tomcat是一个中间件,真正起作用的,解析java脚本的是jdk。
jdk(java development kit)是整个java的核心,它包含了java运行环境和一堆java相关的工具以及java基础库。
最主流的jdk为sun公司发布的jdk,除此之外,其实IBM公司也有发布JDK,CentOS上也可以用yum安装openjdk。
环境:
server6 172.25.44.6 nginx调取器,Tomcat客户端,memcached服务器
server1 172.25.44.1 tomcat 客户端,memcached 服务器
#
#搭建Java环境
[root@server6 ~]# nginx #打开nginx
[root@server6 ~]# /etc/init.d/php-fpm start
Starting php-fpm done
[root@server6 ~]# tar zxf jdk-7u79-linux-x64.tar.gz -C /usr/local/
[root@server6 ~]# cd /usr/local/
[root@server6 local]# ln -s jdk1.7.0_79/ java
[root@server6 local]# vim /etc/profile
export JAVA_HOME=/usr/local/java #设置JAVA的根目录
export CLASSPATH=.:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
export PATH=$PATH:$JAVA_HOME/bin
[root@server6 local]# source /etc/profile #将java.sh脚本导入到环境变量,使其生效
[root@server6 local]# echo $PATH #在控制台显示PATH环境变量的值,即查看PATH在系统中的路径
/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin:/usr/lnmp/local/mysql/bin:/usr/local/lnmp/nginx/sbin:/usr/local/lnmp/php/bin:/usr/local/java/bin
[root@server6 local]# echo $CLASSPATH
.:/usr/local/java/lib:/usr/local/java/jre/lib
[root@server6 local]# which java
/usr/local/java/bin/java
[root@server6 local]# cd
[root@server6 ~]# vim test.java ^
public class test
{
public static void main(String[] args)
{
system.out.println("Hello world!");
}
}
[root@server6 ~]# javac test.java #检测语法错误
[root@server6 ~]# java test #执行脚本
Hello World!
#安装配置Tomcat
[root@server6 ~]# tar zxf apache-tomcat-7.0.37.tar.gz -C /usr/local/
[root@server6 ~]# cd /usr/local/
[root@server6 local]# ln -s apache-tomcat-7.0.37/ tomcat
[root@server6 local]# cd tomcat/
[root@server6 tomcat]# bin/startup.sh #启动tomcat
Using CATALINA_BASE: /usr/local/tomcat
Using CATALINA_HOME: /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME: /usr/local/java
Using CLASSPATH: /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
Tomcat started.
[root@server6 tomcat]# cd logs/
[root@server6 logs]# cat catalina.out #看有没有成功启动的日志
[root@server6 tomcat]# cd webapps/ROOT/
[root@server6 ROOT]# vim test.jsp #编写test.jsp脚本
Serve2 The time is: <%=new java.util.Date() %>
[root@server6 ROOT]# cd /usr/local/lnmp/nginx/
[root@server6 nginx]# vim conf/nginx.conf
43 location / {
44 root html;
46 index index.php index.html index.htm;
47 }
#反向代理
60 location ~ \.jsp$ {
61 proxy_pass http://127.0.0.1:8080;
62 }
[root@server6 nginx]# nginx -s reload
#启动成功后打开浏览器输入http://IP:8080 显示以下界面说明tomcat已经配置启动成功。
#显示显示test.jsp脚本界面
#显示index.jsp脚本界面(默认脚本,不需要配置)
#为了界面更好看,可以进行以下操作
[root@server6 ROOT]# cd /usr/local/lnmp/nginx/
[root@server6 nginx]# vim conf/nginx.conf
43 location / {
44 #root html; #注释掉此行
45 root /usr/local/tomcat/webapps/ROOT; #添加此目录为默认目录
46 index index.php index.html index.htm;
47 }
#配置server1:
[root@server1 ~]# tar zxf jdk-7u79-linux-x64.tar.gz -C /usr/local/
[root@server1 ~]#tar zxf apache-tomcat-7.0.37.tar.gz -C /usr/local/
[root@server1 ~]# vim /etc/profile
export JAVA_HOME=/usr/local/java
export CLASSPATH=.:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
export PATH=$PATH:$JAVA_HOME/bin
[root@server1 ~]# source /etc/profile
[root@server1 local]# ln -s jdk1.7.0_79/ java
[root@server1 local]# ln -s apache-tomcat-7.0.37/ tomcat
[root@server1 local]# cd tomcat/
[root@server1 tomcat]# bin/startup.sh
Using CATALINA_BASE: /usr/local/tomcat
Using CATALINA_HOME: /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME: /usr/local/java
Using CLASSPATH: /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
Tomcat started.
[root@server1 tomcat]# cd webapps/ROOT/
[root@server1 ROOT]# vim test.jsp
Serve1 The time is: <%=new java.util.Date() %>
#把server1和server6建立联系
[root@server6 ROOT]# cd /usr/local/lnmp/nginx/
[root@server6 nginx]# vim conf/nginx.conf
#HTTP的核心模块
17 http {
##负载均衡
18 upstream tomcat{
19 server 172.25.44.1:8080;
20 server 172.25.44.6:8080;
21 }
22 include mime.types;
23 default_type application/octet-stream; #把客户默认为应用或文件,使客户不能直接访问
24
64 location ~ \.jsp$ {
65 proxy_pass http://tomcat;
66 }
测试:(实现了负载均衡)
#配置网页使其可以写入服务器会话缓存中的页面:
[root@server6 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]# 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@server6 nginx]# vim conf/nginx.conf
17 http {
18 upstream tomcat{
19 ip_hash(或sticky); #这两个算法都可以达到效果
20 server 172.25.44.1:8080;
21 server 172.25.44.6:8080;
22 }
[root@server6 nginx]# nginx -s reload
以上部分只是为了搭建用nginx实现tomcat的负载均衡环境,下边正式开始搭建tomcat,实现数据交替缓存,解决了因为一台服务器坏掉而丢失整个服务器上的缓存数据问题
配置tomcat+nginx+memcahe 的组合环境
#需要使用memcached进行缓存其会话
[root@server6 lib]# ls #下载java包使其支持更精确的数据查看功能
annotations-api.jar
asm-3.2.jar
catalina-ant.jar
catalina-ha.jar
catalina.jar
catalina-tribes.jar
ecj-4.4.2.jar
el-api.jar
jar
jasper-el.jar
jasper.jar
jsp-api.jar
kryo-1.04.jar
kryo-serializers-0.10.jar
memcached-session-manager-1.6.3.jar
memcached-session-manager-tc6-1.6.3.jar
memcached-session-manager-tc7-1.6.3.jar
minlog-1.2.jar
msm-kryo-serializer-1.6.3.jar
reflectasm-1.01.jar
servlet-api.jar
spymemcached-2.7.3.jar
tomcat7-websocket.jar
tomcat-api.jar
tomcat-coyote.jar
tomcat-dbcp.jar
tomcat-i18n-es.jar
tomcat-i18n-fr.jar
tomcat-i18n-ja.jar
tomcat-jdbc.jar
tomcat-util.jar
websocket-api.jar
[root@server6 lib]# rm -fr memcached-session-manager-tc6-1.6.3.jar
[root@server6 lib]# cd /usr/local/tomcat/conf
[root@server6 conf]# vim context.xml #在tomcat中添加memcahed的配置,此处使用的是交叉存储,及默认server6 的访问数据被刷新到server1 的memcached上
<Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
memcachedNodes="n1:172.25.44.6:11211,n2:172.25.44.1:11211"
failoverNodes="n1"
requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$"
transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory"
/>
[root@server6 tomcat]# cd bin/
[root@server6 bin]# ./startup.sh #重启服务使其生效
Using CATALINA_BASE: /usr/local/tomcat
Using CATALINA_HOME: /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME: /usr/local/java
Using CLASSPATH: /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
Tomcat started.
[root@server6 bin]# cd ..
[root@server6 tomcat]# cd conf/
[root@server6 tomcat]# cd logs/
[root@server6 logs]#cat catalina.out #查看日志,必须看到以下效果,保证成功启动
INFO: MemcachedSessionService finished initialization, sticky true, operation timeout 1000, with node ids [n2] and failover node ids [n1]
[root@server6 conf]# yum install memcached -y
[root@server6 tomcat]# /etc/init.d/memcached start
Starting memcached: [ OK ]
[root@server1 lib]# ls
annotations-api.jar
asm-3.2.jar
catalina-ant.jar
catalina-ha.jar
catalina.jar
catalina-tribes.jar
ecj-4.4.2.jar
el-api.jar
jar
jasper-el.jar
jasper.jar
jsp-api.jar
kryo-1.04.jar
kryo-serializers-0.10.jar
memcached-session-manager-1.6.3.jar
memcached-session-manager-tc6-1.6.3.jar
memcached-session-manager-tc7-1.6.3.jar
minlog-1.2.jar
msm-kryo-serializer-1.6.3.jar
reflectasm-1.01.jar
servlet-api.jar
spymemcached-2.7.3.jar
tomcat7-websocket.jar
tomcat-api.jar
tomcat-coyote.jar
tomcat-dbcp.jar
tomcat-i18n-es.jar
tomcat-i18n-fr.jar
tomcat-i18n-ja.jar
tomcat-jdbc.jar
tomcat-util.jar
websocket-api.jar
[root@server1 lib]# rm -fr memcached-session-manager-tc6-1.6.3.jar #不符合版本
[root@server1 lib]# cd /usr/local/tomcat/conf
[root@server1 conf]# vim context.xml
<Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
memcachedNodes="n1:172.25.44.6:11211,n2:172.25.44.1:11211"
failoverNodes="n2" #在哪个上,就写哪个服务器的代号
requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$"
transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory"
/>
[root@server1 tomcat]# cd bin/
[root@server1 bin]# ./startup.sh
Using CATALINA_BASE: /usr/local/tomcat
Using CATALINA_HOME: /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME: /usr/local/java
Using CLASSPATH: /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
Tomcat started.
[root@server1 bin]# cd ..
[root@server1 tomcat]# cd logs/
[root@server1 logs]#cat catalina.out #必须看到以下效果
INFO: MemcachedSessionService finished initialization, sticky true, operation timeout 1000, with node ids [n1] and failover node ids [n2]
[root@server1 conf]# yum install memcached -y
[root@server1 tomcat]# /etc/init.d/memcached start
Starting memcached: [ OK ]
#如果访问浏览器,测试不到效果(172.25.44.6/test.jsp),即访问空白,执行以下操作
[root@server1 tomcat]# ps
PID TTY TIME CMD
2815 pts/0 00:00:00 bash
3058 pts/0 00:00:22 java
8771 pts/0 00:00:00 ps
[root@server1 tomcat]# kill -9 3058
[root@server1 tomcat]# bin/startup.sh
Using CATALINA_BASE: /usr/local/tomcat
Using CATALINA_HOME: /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME: /usr/local/java
Using CLASSPATH: /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
Tomcat started.
#如果不行,两边都操作一下
[root@server1 tomcat]# bin/shutdown.sh
Using CATALINA_BASE: /usr/local/tomcat
Using CATALINA_HOME: /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME: /usr/local/java
Using CLASSPATH: /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
测试:(在server1上添加用户,在后端服务器上把server1的memcahed关闭 ,其刷新到server6上的memcahed中)
#如果两个都关掉,则会出现以下报错
#关闭server1的tomcat,数据保持成功,而且实现了数据交替缓存