Tomcat

来源:互联网 发布:mac系统安装失败 编辑:程序博客网 时间:2024/06/15 17:00

Tomcat服务器是一个免费的开放源代码的Web应用服务器
—支持负载平衡与邮件服务等开发应用系统常用的功能
—Tomcat实际上运行JSP页面和Servlet

1.安装jdk

使用 Java 编程语言构建应用和组件的开发环境

实验主机:server1和server2
下载的包:jdk-7u79-linux-x64.tar.gz

[root@server2 ~]# tar zxf jdk-7u79-linux-x64.tar.gz -C /usr/local/ 将下载到的JDK解压,将jdk文件夹移动到指定的文件夹
[root@server2 ~]# cd /usr/local/ 下载的JDK的文件目录
[root@server2 local]# ls 查看目录下文件
bin etc games include jdk1.7.0_79 lib lib64 libexec sbin share src
[root@server2 local]# ln -s jdk1.7.0_79/ java 做一个软链接

[root@server2 local]# lltotal 44drwxr-xr-x. 2 root root 4096 Jun 28  2011 bindrwxr-xr-x. 2 root root 4096 Jun 28  2011 etcdrwxr-xr-x. 2 root root 4096 Jun 28  2011 gamesdrwxr-xr-x. 2 root root 4096 Jun 28  2011 includelrwxrwxrwx  1 root root   12 Jul 22 10:09 java -> jdk1.7.0_79/drwxr-xr-x  8 uucp  143 4096 Apr 11  2015 jdk1.7.0_79drwxr-xr-x. 2 root root 4096 Jun 28  2011 libdrwxr-xr-x. 2 root root 4096 Jun 28  2011 lib64drwxr-xr-x. 2 root root 4096 Jun 28  2011 libexecdrwxr-xr-x. 2 root root 4096 Jun 28  2011 sbindrwxr-xr-x. 5 root root 4096 Jul 18 11:17 sharedrwxr-xr-x. 2 root root 4096 Jun 28  2011 src

[root@server2 local]# vim /etc/profile 设置环境变量,修改/etc/profile

    export JAVA_HOME=/usr/local/java     export CLASSPATH=.:$JAVA_HOME/lib:$JAVA_HOME/jre/lib    export PATH=$PATH:$JAVA_HOME/bin

[root@server2 local]# source /etc/profile 使得修改生效
[root@server2 local]# echo $PATH

/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin:/usr/local/java/bin

[root@server2 ~]# vim test.java 编写一个测试脚本

    public  class test {        public static void main(String[] arge) {                System.out.println("hello world!");            }    }

[root@server2 ~]# javac test.java 编译
[root@server2 ~]# java test 测试成功执行

hello world!

2.安装tomcat

tomcat官网: tomcat.apache.org

[root@server2 ~]# tar zxf apache-tomcat-7.0.37.tar.gz -C /usr/local/ 解压文件包到指定目录下
[root@server2 local]# ln -s /usr/local/apache-tomcat-7.0.37/ tomcat 软链接
[root@server2 local]# cd /usr/local/tomcat/ 在链接目录下
[root@server2 tomcat]# cd /bin/ 软件的运行脚本存放

[root@server2 bin]# ls 查看运行脚本

bootstrap.jar                 cpappend.bat      startup.batcatalina.bat                  daemon.sh         startup.shcatalina.sh                   digest.bat        tomcat-juli.jarcatalina-tasks.xml            digest.sh         tomcat-native.tar.gzcommons-daemon.jar            setclasspath.bat  tool-wrapper.batcommons-daemon-native.tar.gz  setclasspath.sh   tool-wrapper.shconfigtest.bat                shutdown.bat      version.batconfigtest.sh                 shutdown.sh       version.sh

[root@server2 bin]# ./startup.sh startup.sh脚本主要用来判断环境

Using CATALINA_BASE:   /usr/local/tomcatUsing CATALINA_HOME:   /usr/local/tomcatUsing CATALINA_TMPDIR: /usr/local/tomcat/tempUsing JRE_HOME:        /usr/local/javaUsing CLASSPATH:       /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar

[root@server2 bin]# netstat -antlp 显示所有连接监听端口

Active Internet connections (servers and established)Proto Recv-Q Send-Q Local Address               Foreign Address             State       PID/Program name   tcp        0      0 0.0.0.0:22                  0.0.0.0:*                   LISTEN      907/sshd            tcp        0      0 127.0.0.1:25                0.0.0.0:*                   LISTEN      983/master          tcp        0      0 172.25.31.2:22              172.25.31.250:58143         ESTABLISHED 1031/sshd           tcp        0      0 :::8080                     :::*                        LISTEN      1124/java           tcp        0      0 :::22                       :::*                        LISTEN      907/sshd            tcp        0      0 ::1:25                      :::*                        LISTEN      983/master          tcp        0      0 ::ffff:127.0.0.1:8005       :::*                        LISTEN      1124/java           tcp        0      0 :::8009                     :::*                        LISTEN      1124/java

[root@server2 ROOT]# cd /usr/local/tomcat/webapps/ROOT
[root@server2 ROOT]# vim test.jsp jsp程序的测试
[root@server2 ROOT]# cat test.jsp 来同步显示时间

the time is: <%=new java.util.Date() %>

测试:firefox–>172.25.31.2/test.jsp
这里写图片描述

3.tomat的负载均衡:nginx+tomat

server1
[root@server1 ~]# cd /usr/local/lnmp/nginx/conf/
[root@server1 conf]# ls

cert.pem                koi-win             scgi_params.defaultfastcgi.conf            mime.types          uwsgi_paramsfastcgi.conf.default    mime.types.default  uwsgi_params.defaultfastcgi_params          nginx.conf          win-utffastcgi_params.default  nginx.conf.defaultkoi-utf                 scgi_params

[root@server1 conf]# /etc/init.d/php-fpm start php服务开启
Starting php-fpm done
[root@server1 conf]# nginx 开启nginx服务
[root@server1 conf]# vim nginx.conf 打开ip_hash,打开服务器访问端口,配合一致,实现负载均衡

    http {        upstream westos {   ##负载均衡组        ip_hash;      ##利用ip_hash         server 172.25.31.2:8080;  ##服务器组        server 172.25.31.3:8080;     location ~ \.jsp$ {  ##jsp页面反向代理到tomcat                proxy_pass http://westos;

[root@server1 conf]# nginx -t nginx配置文件语法的检错

nginx: the configuration file /usr/local/lnmp/nginx/conf/nginx.conf syntax is oknginx: configuration file /usr/local/lnmp/nginx/conf/nginx.conf test is successful

[root@server1 conf]# nginx -s reload 重新加载nginx服务

server2:
[root@server2 ~]# cd /usr/local/tomcat/webapps/ROOT/ tomcat默认发布程序,测试文件必须在此路径下才能执行
[root@server2 ROOT]# vim test.jsp 编写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@server2 ROOT]# scp test.jsp 172.25.31.3:/usr/local/tomcat/webapps/ROOT/ 将jsp页面内容同步到server3

测试
firefox:172.25.31.1/test.jsp
1.未打开iphash时,数据轮询在server2和server3上存储
这里写图片描述
这里写图片描述

2.打开后,指定ip将输入数据存储;

问题: bin/shutdown.sh 当其中一台服务器的tomcat挂掉时,nginx响应后会将当前的信息存储到另外一台主机上,但之前存储的用户信息将会丢失。

4.nginx+tomcat+memcache

1.加入memcache的核心:接管对方的session2.默认找对方的memcache存储,memcache只是作为备份,在tomcat工作时,有自己的缓存,不会用到memcache3.使用这种配置的好处是,当 T1 和 M1 同时崩溃时也不会丢失 session 会话,避免单点故障4.Tomcat-1 (T1) 将 session 存储在 memcached-2 (T2)上。只有当 M2 不可用时 ,T1 才将 session 存储在 memcached-1 上(M1 是 T1 failoverNode)

server1:
nginx 服务开启
server2:
[root@server2 tomcat]# yum install -y memcached 安装memcached
[root@server2 tomcat]# /etc/init.d/memcached start 开启memcached
[root@server2 tomcat]# cd /usr/local/tomat/lib/
[root@server2 lib]# rm -f memcached-session-manager-tc6-1.6.3.jar 删除与jdk版本不同的包
[root@server2 tomcat]# cd conf/
[root@server2 conf]# vim context.xml tomcat服务器会扫描此文件,一但文件被修改,会自动重新加载这个文件

<Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"memcachedNodes="n1:172.25.31.2:11211,n2:172.25.31.3:11211"failoverNodes="n2"         ##互为信任节点requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$"transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory"/>

[root@server2 tomcat]# bin/shutdown.sh 关闭再开启tomcat
[root@server2 tomcat]# bin/startup.sh
[root@server2 tomcat]# yum install -y telnet
[root@server2 tomcat]# tail -f logs/catalina.out 查看memcached初始化是否成功

server3配置同server2

测试
[root@server3 tomcat]# telnet localhost 11211
get + ID
可得到server2上的缓存
这里写图片描述

这里写图片描述

nginx 的sticky模块

sticky 模式:指同一个用户的访问请求都被发送到同一个 tomcat 实例上处理。
server1:
tar zxf nginx-1.10.1.tar.gz nginx版本更新
tar zxf nginx-goodies-nginx-sticky-module-ng-c78b7dd79d0d.tar.gz 加入第三方模块

源码安装:配置->编译->执行
cd nginx-1.10.1

./configure --prefix=/opt/nginx --user=nginx --group=nginx --with-threads --with-file-aio --with-http_ssl_module --with-http_stub_status_module --add-module=/root/nginx-goodies-nginx-sticky-module-ng-c78b7dd79d0dmake make install

vim /opt/nginx/conf/nginx.conf
http {
upstream westos {
sticky;
server 172.25.33.2:8080;
server 172.25.33.3:8080;
}
location ~ .jsp$ {
proxy_pass http://westos;
}
}
测试
浏览器访问 http://172.25.33.1/test.jsp
结果:不同的主机访问时会调度到不同的 tomcat 实例上处理
来自同一主机的请求会交给同一个tomcat实例处理,此时你down掉当前正在响应的tomcat实例,nginx 会自动把用户的请求调度到另一个tomcat实例上,同时 session 也没有丢掉。

原创粉丝点击