Tomcat 单(多)实例部署使用

Posted 一木浮生

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Tomcat 单(多)实例部署使用相关的知识,希望对你有一定的参考价值。

一、前言

  (一)、概述

  Tomcat 是由 Apache 开发的一个 Servlet 容器,实现了对 Servlet 和 JSP 的支持,并提供了作为Web服务器的一些特有功能,如Tomcat管理和控制平台、安全域管理和Tomcat阀等。由于 Tomcat 本身也内含了一个 HTTP 服务器,它也可以被视作一个单独的 Web 服务器。但是,不能将 Tomcat 和Apache HTTP 服务器混淆,Apache HTTP 服务器是一个用 C 语言实现的 HTTP Web 服务器;这两个 HTTP webserver 不是捆绑在一起的。Tomcat 包含了一个配置管理工具,也可以通过编辑XML格式的配置文件来进行配置

  (二)、Tomcat 重要目录

/bin -Tomcat 脚本存放目录(如启动,关闭脚本等)

/conf -Tomcat 配置文件目录

/logs —Tomcat 默认日志目录

/webapps —webapp 运行的目录

  (三)、web 工程发布目录结构

一般web项目路径结构

[[email protected]7-1 tomcat]$ tree -d -L 2 /home/web/web1/ROOT/
|--webapp                        # 站点根目录
      |--META-INF                                         # META-INF 目录
|  `--MANIFEST.MF # 配置清单文件 |--WEB-INF # WEB-INF 目录 | |--classes # class文件目录 | | |--*.class # 程序需要的class 文件 | | `--*.xml # 程序需要的xml 文件 | |-- lib # 库文件 | | |--*.jar # 程序需要的jar 包 | `---web.xml # web应用程序需要的部署描述文件 | --(userdir) # 自定义的目录 | --(userfiles) # 自定义的资源文件

webapp :工程发布文件夹。其实每个 war 包都可以视为 webapp 的压缩包。

META-INF :META-INF 目录用于存放工程自身相关的一些信息,元文件信息,通常由开发工具,环境自动生成。

WEB-INF :Java web应用的安全目录。所谓安全就是客户端无法访问,只有服务端可以访问的目录

/WEB-INF/classes :存放程序所需要的所有 Java class 文件。

/WEB-INF/lib :存放程序所需要的所有 jar 文件。

/WEB-INF/web.xml :web 应用的部署配置文件。它是工程中最重要的配置文件,它描述了 servlet 和组成应用的其它组件,以及应用初始化参数、安全管理约束等。

  (四)、下载安装JDk

    (1)、使用wget 下载JDK

[[email protected] tmp]# wget --no-cookies --no-check-certificate --header "Cookie: gpw_e24=http%3A%2F%2Fwww.oracle.com%2F; oraclelicense=accept-securebackup-cookie" "http://download.oracle.com/otn-pub/java/jdk/8u181-b13/96a7b8442fe848ef90c96a2fad6ed6d1/jdk-8u171-linux-x64.tar.gz"

    (2)、Jdk 环境设置

 [[email protected]7-1 tmp]# tar -xf jdk-8u171-linux-x64.tar.gz -C /usr/local/
[[email protected]-7-1 tmp]# ln -s /usr/local/jdk1.8.0_171 /usr/local/java [[email protected]-7-1 tmp]# vim /etc/profile.d/java.sh JAVA_HOME=/usr/local/java PATH=$JAVA_HOME/bin:$PATH export JAVA_HOME PATH

[[email protected] tmp]# source /etc/profile
[[email protected]7-1 tmp]# java -version
java version "1.8.0_171"
Java(TM) SE Runtime Environment (build 1.8.0_171-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.171-b11, mixed mode)

二、安装启动Tomcat 

  (一)、下载安装(单实例)

[[email protected]7-1 tmp]# wget http://mirrors.tuna.tsinghua.edu.cn/apache/tomcat/tomcat-9/v9.0.10/bin/apache-tomcat-9.0.10.tar.gz
[[email protected]7-1 tmp]# useradd web  
[[email protected]-7-1 tmp]# su - web
上一次登录:二 7月 24 18:54:03 CST 2018pts/0 上
[[email protected]-7-1 ~]$ mv /tmp/apache-tomcat-9.0.1.tar.gz ./
[[email protected]-7-1 ~]$ tar xf apache-tomcat-9.0.1.tar.gz 
[[email protected]-7-1 ~]$ ln -s apache-tomcat-9.0.1 tomcat
[[email protected]-7-1 ~]$ /home/web/tomcat/bin/startup.sh 
Using CATALINA_BASE:   /home/web/tomcat
Using CATALINA_HOME:   /home/web/tomcat
Using CATALINA_TMPDIR: /home/web/tomcat/temp
Using JRE_HOME:        /usr/local/java
Using CLASSPATH:       /home/web/tomcat/bin/bootstrap.jar:/home/web/tomcat/bin/tomcat-juli.jar
Tomcat started.

  (二)、查看是否启动成功

[[email protected]7-1 ~]$ ps -ef | grep java
web      11745     1  5 19:12 pts/0    00:00:07 /usr/local/java/bin/java -Djava.util.logging.config.file=/home/web/tomcat/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djdk.tls.ephemeralDHKeySize=2048 -Djava.protocol.handler.pkgs=org.apache.catalina.webresources -classpath /home/web/tomcat/bin/bootstrap.jar:/home/web/tomcat/bin/tomcat-juli.jar -Dcatalina.base=/home/web/tomcat -Dcatalina.home=/home/web/tomcat -Djava.io.tmpdir=/home/web/tomcat/temp org.apache.catalina.startup.Bootstrap start
web      11795 11697  0 19:15 pts/0    00:00:00 grep --color=auto java
[[email protected]-7-1 ~]$ lsof -i:8080
COMMAND   PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
java    11745  web   48u  IPv6  41272      0t0  TCP *:webcache (LISTEN)

  处理流程:用户发送请求到web服务器,该请求会被正在监听的Connector连接器接收,并把该请求交给Service下的Engine来处理,并等待Engine处理的结果。Engine获得请求后会根据请求的主机信息来匹配相应的Host主机,Host主机会根据请求的路径匹配对应的Context,Context web应用匹配上之后就构建request、response请求对象,调用指定的Servlet来处理请求。请求处理完成后会将response对象返回给Host主机,Host主机将response对象返回给Engine引擎,Engine再将response对象返回给Connector链接器,最后Connector连接器将response返回给浏览器。

三、安装mysql

  (一)、下载mysql 软件包

[[email protected]7-1 tmp]$ mkdir mysql
[[email protected]-7-1 tmp]$ wget https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.22-1.el7.x86_64.rpm-bundle.tar
[[email protected]7-1 tmp]$ tar xf mysql-5.7.22-1.el7.x86_64.rpm-bundle.tar -C /tmp/mysql
[[email protected]-7-1 tmp]$ cd mysql/
[[email protected]-7-1 mysql]$ rm mysql-community-server-minimal-5.7.22-1.el7.x86_64.rpm mysql-community-test-5.7.22-1.el7.x86_64.rpm mysql-community-minimal-debuginfo-5.7.22-1.el7.x86_64.rpm -f

[[email protected]-7-1 mysql]$ yum -y install mysql-community-*
[[email protected]-7-1 /]# mkdir /data
[[email protected]-7-1 /]# mv /var/lib/mysql /data/
[[email protected]-7-1 /]# ln -s /data/mysql /var/lib/
[[email protected]-7-1 /]# ll /var/lib/mysql
lrwxrwxrwx. 1 root root 11 7月  24 19:37 /var/lib/mysql -> /data/mysql

[[email protected] ~]# vim /etc/my.cnf      #添加参数
max_allowed_packet=64M
wait_timeout=2880000


  (二)、启动mysql

[[email protected]7-1 /]# systemctl start mysqld
[[email protected]-7-1 /]# grep pass /var/log/mysqld.log 
2018-07-24T11:40:42.346028Z 1 [Note] A temporary password is generated for [email protected]: qpbhOGbT#6IZ
[[email protected]-7-1 ~]# mysqladmin -uroot -p>Hq7kr*npwQs password [email protected]
mysqladmin: [Warning] Using a password on the command line interface can be insecure.
Warning: Since password will be sent to server in plain text, use ssl connection to ensure password safety.

[[email protected]-7-1 ~]# mysql -p[email protected]

  (三)、创建必须库

mysql> create database jspgou default character set utf8;
Query OK, 1 row affected (0.00 sec)
mysql> grant all privileges on jspgou.* to jspgouadmin@% identified by [email protected];
Query OK, 0 rows affected, 1 warning (0.00 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.01 sec)
mysql> select @@sql_mode;
+-------------------------------------------------------------------------------------------------------------------------------------------+
| @@sql_mode                                                                                                                                |
+-------------------------------------------------------------------------------------------------------------------------------------------+
| ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION |
+-------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)

mysql> set global
    -> sql_mode=ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION;
Query OK, 0 rows affected, 1 warning (0.00 sec)

mysql> q
Bye

  (四)、配置JSPgou

  Jspgou配置mysql,主要参考jspgouV6-ROOT/必读.txt 文件

[[email protected]7-1 ~]# su - web
[[email protected]-7-1 ~]$ vim tomcat/webapps/ROOT/WEB-INF/config/jdbc.properties

  导入jspgou库,导入数据时间有可能比较长(如果没有报错,请耐心等待,如果一秒就完成了,那说明你没有将数据导入成功,请重新配置数据库,在次导入)

[[email protected]7-1 DB]# mysql -ujspgouadmin -p[email protected] jspgou < /home/web/web1/DB/jspgou.sql 
mysql: [Warning] Using a password on the command line interface can be insecure.

  启动 jspgou web site

[[email protected]-7-1 ~]# su - web 
上一次登录:二 7月 24 20:39:14 CST 2018pts/1 上
[[email protected]-7-1 ~]$ ls
apache-tomcat-9.0.1  apache-tomcat-9.0.1.tar.gz  jdk-8u181-linux-x64.tar.gz  jspgouV6-ROOT.zip  tomcat  web1
[[email protected] ~]$ /home/web/tomcat/bin/startup.sh
Using CATALINA_BASE:   /home/web/tomcat
Using CATALINA_HOME:   /home/web/tomcat
Using CATALINA_TMPDIR: /home/web/tomcat/temp
Using JRE_HOME:        /usr/local/java
Using CLASSPATH:       /home/web/tomcat/bin/bootstrap.jar:/home/web/tomcat/bin/tomcat-juli.jar
Tomcat started.
[[email protected] ~]$ lsof -i:8080
COMMAND   PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
java    13738  web   48u  IPv6  46855      0t0  TCP *:webcache (LISTEN)
[[email protected] ~]$ ps -ef |grep java
web      13738     1 99 20:56 pts/1    00:01:03 /usr/local/java/bin/java -Djava.util.logging.config.file=/home/web/tomcat/conf/logging
.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djdk.tls.ephemeralDHKeySize=2048 -Djava.protocol.handle
r.pkgs=org.apache.catalina.webresources -classpath /home/web/tomcat/bin/bootstrap.jar:/home/web/tomcat/bin/tomcat-juli.jar -Dcatalina.
base=/home/web/tomcat -Dcatalina.home=/home/web/tomcat -Djava.io.tmpdir=/home/web/tomcat/temp org.apache.catalina.startup.Bootstrap st
art
web      13921 13660  0 20:57 pts/1    00:00:00 grep --color=auto java

 四、Tomcat 多实例

  (一)、基础环境

    Tomcat单机多实例部署配置(拷贝必须文件目录)

[[email protected]7-1 ~]$ cd tomcat/
[[email protected]-7-1 tomcat]$ mkdir web{1..3}
[[email protected]-7-1 tomcat]$ ls
bin  conf  lib  LICENSE  logs  NOTICE  RELEASE-NOTES  RUNNING.txt  temp  web1  web2  web3  webapps  work
[[email protected]-7-1 tomcat]$ cp -r /home/web/tomcat/{conf,logs,temp,work} /home/web/tomcat/web1
[[email protected]-7-1 tomcat]$ cp -r /home/web/tomcat/{conf,logs,temp,work} /home/web/tomcat/web2
[[email protected]-7-1 tomcat]$ cp -r /home/web/tomcat/{conf,logs,temp,work} /home/web/tomcat/web3

  (二)、配置实例

    分别在三个配置文件中修改端口,将端口改为不同的(web1:8081,web2:8082,web3:8083)

[[email protected]7-1 ~]$ vim /home/web/tomcat/web1/conf/server.xml 
<Host name="localhost"  appBase="/home/web/tomcat/webapps"
            unpackWARs="true" autoDeploy="true">

    <Connector port="8081" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" />

<!--        注释这一行内容
 <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" /> 
-->

  (三)、编写控制脚本

    分别在三个web实例中添加此脚本,(必须要改export CATALINA_BASE="/home/web/tomcat/web{1,2,3}")

[[email protected]7-1 ~]$ vim /home/web/tomcat/web1/insl.sh
#!/bin/bash 
#web1 
. /etc/init.d/functions
export CATALINA_BASE="/home/web/tomcat/web1"

case "$1" in
start)
        $CATALINA_HOME/bin/startup.sh
        ;;
stop)
        $CATALINA_HOME/bin/shutdown.sh

        ;;
restart)
        $CATALINA_HOME/bin/shutdown.sh
        sleep 5
        $CATALINA_HOME/bin/startup.sh
        ;;
esac

export JAVA_OPTS=-Xms251m -Xmx512m
~                                        

  (四)、设置环境变量

[[email protected]7-1 ~]# vim /etc/profile        #添加系统环境

CATALINA_HOME=/home/web/tomcat
export CATALINA_HOME

[[email protected]-7-1 ~]# source /etc/profile               #加载系统环境

  (五)、执行测试

[[email protected]7-1 ~]$ /home/web/tomcat/web1/insl.sh start
Using CATALINA_BASE:   /home/web/tomcat/web1
Using CATALINA_HOME:   /home/web/tomcat
Using CATALINA_TMPDIR: /home/web/tomcat/web1/temp
Using JRE_HOME:        /usr/local/java
Using CLASSPATH:       /home/web/tomcat/bin/bootstrap.jar:/home/web/tomcat/bin/tomcat-juli.jar
Tomcat started.
[[email protected]-7-1 ~]$ /home/web/tomcat/web2/insl.sh start
Using CATALINA_BASE:   /home/web/tomcat/web2
Using CATALINA_HOME:   /home/web/tomcat
Using CATALINA_TMPDIR: /home/web/tomcat/web2/temp
Using JRE_HOME:        /usr/local/java
Using CLASSPATH:       /home/web/tomcat/bin/bootstrap.jar:/home/web/tomcat/bin/tomcat-juli.jar
Tomcat started.
[[email protected]-7-1 ~]$ /home/web/tomcat/web3/insl.sh start
Using CATALINA_BASE:   /home/web/tomcat/web3
Using CATALINA_HOME:   /home/web/tomcat
Using CATALINA_TMPDIR: /home/web/tomcat/web3/temp
Using JRE_HOME:        /usr/local/java
Using CLASSPATH:       /home/web/tomcat/bin/bootstrap.jar:/home/web/tomcat/bin/tomcat-juli.jar
Tomcat started.
[[email protected]-7-1 ~]$ ss -tnlp | grep :80 |column -t
LISTEN  0  100  :::8081                :::*  users:(("java",pid=15864,fd=48))
LISTEN  0  100  :::8082                :::*  users:(("java",pid=15893,fd=48))
LISTEN  0  100  :::8083                :::*  users:(("java",pid=15462,fd=48))
LISTEN  0  1    ::ffff:127.0.0.1:8005  :::*  users:(("java",pid=15462,fd=64))

五、负载均衡

  (一)、nginx安装

[[email protected] ~]# useradd nginx
[[email protected] ~]#tar xf nginx-1.9.9.tar.gz
[[email protected] ~]# cd nginx-1.9.9/
  ./configure --prefix=/usr/local/nginx --without-select_module --without-poll_module --with-debug --with-http_ssl_module --with-http_realip_module --with-http_addition_module --with-http_sub_module --with-http_dav_module --with-http_flv_module --with-http_xslt_module --with-http_gzip_static_module --with-http_random_index_module --with-http_secure_link_module --with-http_degradation_module --with-http_stub_status_module --with-cc=`which gcc`
[[email protected] nginx-1.9.9]# make -j 4 && make install 

 

  (二)、nginx配置

[[email protected] ~]# vim /usr/local/nginx/conf/nginx.conf
http {
    upstream tomcat_pool {
        #ip_hash;
        server 10.18.43.183:8081 weight=1 max_fails=2 fail_timeout=2;
        server 10.18.43.183:8082 weight=1 max_fails=2 fail_timeout=2;
        server 10.18.43.183:8083 weight=1 max_fails=2 fail_timeout=2;
    }

    server {
        location / {
                proxy_pass http://tomcat_pool;
                proxy_redirect off;
                proxy_set_header Host $host;
                proxy_set_header X-Real-IP $remote_addr;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
              }
     }                      
 }

session(会话)暂没有使用共享方式,目前采用的会话保持。即将同一个client的访问始终调度到同一后端实例。
1.会话保持
2.会话同步
3.会话共享

 

以上是关于Tomcat 单(多)实例部署使用的主要内容,如果未能解决你的问题,请参考以下文章

Tomcat多实例单应用部署方案 (转)

tomcat多实例部署

性能测试二十:Tomcat多实例部署+日志监控

Linux下Tomcat多实例部署配置

多实例单应用配置

Linux集成环境部署 mysql + tomcat + redis