zoukankan      html  css  js  c++  java
  • 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项目路径结构

    [web@CentOS-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

    [root@CentOS-7-1 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 环境设置

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

    [root@CentOS-7-1 tmp]# source /etc/profile
    [root@CentOS-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 

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

    [root@CentOS-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
    [root@CentOS-7-1 tmp]# useradd web  
    [root@CentOS-7-1 tmp]# su - web
    上一次登录:二 7月 24 18:54:03 CST 2018pts/0 上
    [web@CentOS-7-1 ~]$ mv /tmp/apache-tomcat-9.0.1.tar.gz ./
    [web@CentOS-7-1 ~]$ tar xf apache-tomcat-9.0.1.tar.gz 
    [web@CentOS-7-1 ~]$ ln -s apache-tomcat-9.0.1 tomcat
    [web@CentOS-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.

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

    [web@CentOS-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
    [web@CentOS-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 软件包

    [web@CentOS-7-1 tmp]$ mkdir mysql
    [web@CentOS-7-1 tmp]$ wget https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.22-1.el7.x86_64.rpm-bundle.tar
    [web@CentOS-7-1 tmp]$ tar xf mysql-5.7.22-1.el7.x86_64.rpm-bundle.tar -C /tmp/mysql
    [web@CentOS-7-1 tmp]$ cd mysql/
    [web@CentOS-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
    
    [web@CentOS-7-1 mysql]$ yum -y install mysql-community-*
    [root@CentOS-7-1 /]# mkdir /data
    [root@CentOS-7-1 /]# mv /var/lib/mysql /data/
    [root@CentOS-7-1 /]# ln -s /data/mysql /var/lib/
    [root@CentOS-7-1 /]# ll /var/lib/mysql
    lrwxrwxrwx. 1 root root 11 7月  24 19:37 /var/lib/mysql -> /data/mysql

    [root@CentOS-7-1 ~]# vim /etc/my.cnf      #添加参数
    max_allowed_packet=64M
    wait_timeout=2880000


      (二)、启动mysql

    [root@CentOS-7-1 /]# systemctl start mysqld
    [root@CentOS-7-1 /]# grep pass /var/log/mysqld.log 
    2018-07-24T11:40:42.346028Z 1 [Note] A temporary password is generated for root@localhost: qpbhOGbT#6IZ
    [root@CentOS-7-1 ~]# mysqladmin -uroot -p'>Hq7kr*npwQs' password 'Tomcat@123'
    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.
    
    [root@CentOS-7-1 ~]# mysql -p'Tomcat@123'

      (三)、创建必须库

    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 'Tomcat@123';
    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 文件

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

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

    [root@CentOS-7-1 DB]# mysql -u'jspgouadmin' -p'Tomcat@123' jspgou < /home/web/web1/DB/jspgou.sql 
    mysql: [Warning] Using a password on the command line interface can be insecure.

      启动 jspgou web site

    [root@CentOS-7-1 ~]# su - web 
    上一次登录:二 7月 24 20:39:14 CST 2018pts/1 上
    [web@CentOS-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
    [web@CentOS-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.
    [web@CentOS-7-1 ~]$ lsof -i:8080
    COMMAND   PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
    java    13738  web   48u  IPv6  46855      0t0  TCP *:webcache (LISTEN)
    [web@CentOS-7-1 ~]$ 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单机多实例部署配置(拷贝必须文件目录)

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

      (二)、配置实例

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

    [web@CentOS-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}")

    [web@CentOS-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'
    ~                                        

      (四)、设置环境变量

    [root@CentOS-7-1 ~]# vim /etc/profile        #添加系统环境
    
    CATALINA_HOME=/home/web/tomcat
    export CATALINA_HOME
    
    [root@CentOS-7-1 ~]# source /etc/profile               #加载系统环境

      (五)、执行测试

    [web@CentOS-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.
    [web@CentOS-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.
    [web@CentOS-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.
    [web@CentOS-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安装

    [root@webserver ~]# useradd nginx
    [root@webserver ~]#tar xf nginx-1.9.9.tar.gz
    [root@webserver ~]# 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`
    [root@webserver nginx-1.9.9]# make -j 4 && make install 

      (二)、nginx配置

    [root@www ~]# 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.会话共享

  • 相关阅读:
    java项目中ehcache缓存最简单用法
    最简单的freemarker用法实例
    java从包package中获取所有的Class
    java获取properties配置文件中某个属性最简单方法
    java去除字符串中的空格、回车、换行符、制表符
    java获取中文汉字的所有拼音
    运行时给java对象动态的属性赋值
    java中把文件拷贝到指定目录下最简单几种方法
    在Springmvc普通类@Autowired注入request为null解决方法
    java导入excel很完美的取值的方法
  • 原文地址:https://www.cnblogs.com/sky-k/p/9362497.html
Copyright © 2011-2022 走看看