一、前言

  (一)、概述

  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-- tomcat]$ tree -d -L  /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-- tmp]# tar -xf jdk-8u171-linux-x64.tar.gz -C /usr/local/
[root@CentOS-- tmp]# ln -s /usr/local/jdk1..0_171 /usr/local/java
[root@CentOS-- 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-- tmp]# java -version
java version "1.8.0_171"
Java(TM) SE Runtime Environment (build 1.8.0_171-b11)
Java HotSpot(TM) -Bit Server VM (build 25.171-b11, mixed mode)

二、安装启动Tomcat

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

[root@CentOS-- 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-- tmp]# useradd web
[root@CentOS-- tmp]# su - web
上一次登录:二 7月 :: CST 2018pts/ 上
[web@CentOS-- ~]$ mv /tmp/apache-tomcat-9.0..tar.gz ./
[web@CentOS-- ~]$ tar xf apache-tomcat-9.0..tar.gz
[web@CentOS-- ~]$ ln -s apache-tomcat-9.0. tomcat
[web@CentOS-- ~]$ /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-- ~]$ ps -ef | grep java
web : pts/ :: /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= -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 : pts/ :: grep --color=auto java
[web@CentOS-- ~]$ lsof -i:
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
java web 48u IPv6 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-- tmp]$ mkdir mysql
[web@CentOS-- tmp]$ wget https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.22-1.el7.x86_64.rpm-bundle.tar
[web@CentOS-- tmp]$ tar xf mysql-5.7.-.el7.x86_64.rpm-bundle.tar -C /tmp/mysql
[web@CentOS-- tmp]$ cd mysql/
[web@CentOS-- mysql]$ rm mysql-community-server-minimal-5.7.-.el7.x86_64.rpm mysql-community-test-5.7.-.el7.x86_64.rpm mysql-community-minimal-debuginfo-5.7.-.el7.x86_64.rpm -f [web@CentOS-- mysql]$ yum -y install mysql-community-*
[root@CentOS-- /]# mkdir /data
[root@CentOS-- /]# mv /var/lib/mysql /data/
[root@CentOS-- /]# ln -s /data/mysql /var/lib/
[root@CentOS-- /]# ll /var/lib/mysql
lrwxrwxrwx. root root 7月 : /var/lib/mysql -> /data/mysql [root@CentOS-7-1 ~]# vim /etc/my.cnf      #添加参数
max_allowed_packet=64M
wait_timeout=2880000

  (二)、启动mysql

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

  (三)、创建必须库

mysql> create database jspgou default character set utf8;
Query OK, row affected (0.00 sec)
mysql> grant all privileges on jspgou.* to 'jspgouadmin'@'%' identified by 'Tomcat@123';
Query OK, rows affected, warning (0.00 sec)
mysql> flush privileges;
Query OK, 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 |
+-------------------------------------------------------------------------------------------------------------------------------------------+
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, rows affected, warning (0.00 sec) mysql> \q
Bye

  (四)、配置JSPgou

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

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

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

[root@CentOS-- 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-- ~]# su - web
上一次登录:二 7月 :: CST 2018pts/ 上
[web@CentOS-- ~]$ ls
apache-tomcat-9.0. apache-tomcat-9.0..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-- ~]$ cd tomcat/
[web@CentOS-- tomcat]$ mkdir web{..}
[web@CentOS-- tomcat]$ ls
bin conf lib LICENSE logs NOTICE RELEASE-NOTES RUNNING.txt temp web1 web2 web3 webapps work
[web@CentOS-- tomcat]$ cp -r /home/web/tomcat/{conf,logs,temp,work} /home/web/tomcat/web1
[web@CentOS-- tomcat]$ cp -r /home/web/tomcat/{conf,logs,temp,work} /home/web/tomcat/web2
[web@CentOS-- tomcat]$ cp -r /home/web/tomcat/{conf,logs,temp,work} /home/web/tomcat/web3

  (二)、配置实例

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

[web@CentOS-- ~]$ vim /home/web/tomcat/web1/conf/server.xml
<Host name="localhost" appBase="/home/web/tomcat/webapps"
unpackWARs="true" autoDeploy="true"> <Connector port="" protocol="HTTP/1.1"
connectionTimeout=""
redirectPort="" /> <!-- 注释这一行内容
<Connector port="" protocol="AJP/1.3" redirectPort="" />
-->

  (三)、编写控制脚本

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

[web@CentOS-- ~]$ 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
$CATALINA_HOME/bin/startup.sh
;;
esac export JAVA_OPTS='-Xms251m -Xmx512m'
~

  (四)、设置环境变量

[root@CentOS-- ~]# vim /etc/profile        #添加系统环境

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

  (五)、执行测试

[web@CentOS-- ~]$ /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-- ~]$ /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-- ~]$ /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-- ~]$ ss -tnlp | grep : |column -t
LISTEN ::: :::* users:(("java",pid=,fd=))
LISTEN ::: :::* users:(("java",pid=,fd=))
LISTEN ::: :::* users:(("java",pid=,fd=))
LISTEN ::ffff:127.0.0.1: :::* users:(("java",pid=,fd=))

五、负载均衡

  (一)、nginx安装

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

  (二)、nginx配置

[root@www ~]# vim /usr/local/nginx/conf/nginx.conf
http {
upstream tomcat_pool {
#ip_hash;
server 10.18.43.183: weight= max_fails= fail_timeout=;
server 10.18.43.183: weight= max_fails= fail_timeout=;
server 10.18.43.183: weight= max_fails= fail_timeout=;
} 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 单(多)实例部署使用的更多相关文章

  1. tomcat单机多实例部署

    最近在面试的过程中,一家公司在面试时提到了有关tomcat单机多实例部署的提问, 正好, 之前使用IntelliJ IDEA 13.1.4这款IDE开发web项目,在开发的过程中,因为有多个web项目 ...

  2. 通过Zabbix监控Tomcat单机多实例

    前面已经介绍过Tomcat单机多实例部署,接下来就在他的基础上进行下一步操作:Tomcat多实例监控! Tomcat多实例监控过程和之前的redis多实例原理一样,分为以下4步: 1.获取多实例 2. ...

  3. tomcat单应用多实例部署报错 应用jar不存在

    使用tomcat部署war包,同一环境有tomcat7和tomcat8两个应用,我这边使用tomcat7, 应用部署在其他目录,通过在启动脚本中设置CATALINA_HOME和CATALINA_BAS ...

  4. 性能测试二十:环境部署之Tomcat多实例部署+日志监控

    一个tomcat性能有限,所以需要部署等多个tomcat 单实例部署与windows下类似,项目包放到webapp目录下,启动bin目录下的startup.sh即可启动命令:./startup.sh启 ...

  5. Tomcat多实例部署

    前言 以前总是采用很Low的方式太同一台服务器上部署多个Web应用,步骤是这样的:Copy Tomcat目录-->更改conf/server.xml三个端口号----->部署war包--- ...

  6. Oracle 19c单实例部署

    目录 Oracle 19c单实例部署: 1.配置yum: 2.安装rpm包: 3.设置hostname: 4.配置hostname解析: 5.配置时钟同步服务(ntp): 6.检查及配置内核参数: 7 ...

  7. 19.Tomcat多实例部署及负载均衡、动静分离

    Tomcat多实例部署及负载均衡.动静分离 目录 Tomcat多实例部署及负载均衡.动静分离 Tomcat多实例部署 安装jdk 设置jdk环境变量 安装tomcat 配置 tomcat 环境变量 修 ...

  8. 分享一例测试环境下nginx+tomcat的视频业务部署记录

    需求说明:在测试环境下(192.168.1.28)部署一套公司某业务环境,其中:该业务前台访问地址: http://testhehe.wangshibo.com该业务后台访问地址: http://te ...

  9. mysql 5.5多实例部署【图解】

    mysql5.5数据库多实例部署,我们可以分以下几个步骤来完成. 1. mysql多实例的原理 2. mysql多实例的特点 3. mysql多实例应用场景 4. mysql5.5多实例部署方法 一. ...

随机推荐

  1. Nginx部署多个站点

    Nginx部署多个站点 一,介绍与需求 1.1,介绍 详细介绍请看nginx代理部署Vue与React项目,在这儿主要介绍多个站点的配置 1.2,需求 有时候想在一台服务器上为不同的域名/不同的二级域 ...

  2. 业以太网:西门子PROFINET诊断功能SFC12-OB86-SFB20概览

    [OB86配合SFC12在PROFINET诊断中的应用] OB86是机架故障组织块,操作系统在检测到下列PN系统故障时将调用OB86: 1.检测到PROFINET IO设备故障,故障产生和消失时分别调 ...

  3. centos下安装色彩scrapy

    一.安装Python2.7.6 更新CentOS lib库文件 yum -y update 安装开发工具包 yum groupinstall -y development 安装扩展包 yum inst ...

  4. CDQZ集训DAY4 日记

    早上起来之后发现座位被zzh占了,得知座位改为先来后到,什么鬼…… 于是去了另一个有耳机的机房,然而并没有什么卵用. T1上来感觉很有意思,先切50分再说.T2好像是原题的说,切了原题30分后大胆猜测 ...

  5. CSS Grid网格布局全攻略

    CSS Grid网格布局全攻略 所有奇技淫巧都只在方寸之间. 几乎从我们踏入前端开发这个领域开始,就不停地接触不同的布局技术.从常见的浮动到表格布局,再到如今大行其道的flex布局,css布局技术一直 ...

  6. 《C Primer Plus(第6版)中文版》勘误

    搬运自己2016年11月28日发布于SegmentFault的文章.链接:https://segmentfault.com/a/1190000007626460 本勘误由本人整理并发布,仅针对下方列出 ...

  7. 个人永久性免费-Excel催化剂功能第17波-批量文件改名、下载、文件夹创建等

    前几天某个网友向我提出催化剂的图片功能是否可以增加导出图片功能,这个功能我一直想不明白为何有必要,图片直接在电脑里设个文件夹维护着不就可以了么?何苦还要把Excel上的图片又重新导出到文件夹中?这个让 ...

  8. Scrapy爬虫框架与常用命令

    07.08自我总结 一.Scrapy爬虫框架 大体框架 2个桥梁 二.常用命令 全局命令 startproject 语法:scrapy startproject <project_name> ...

  9. CF175C Geometry Horse(贪心)

    CF175C 贪心,注意有不少细节,很容易死循环TLE 贪心是显而易见的,每次枚举价值最小的物品,进行销毁操作 朴素的枚举每一件物品复杂度为\(O(\sum k_i)\),明显超时 我们注意到朴素的+ ...

  10. Go组件学习——cron定时器

    1 前言 转到Go已经将近三个月,写业务代码又找到了属于Go的条件反射了. 后置声明和多参数返回这些Go风格代码写起来也不会那么蹩脚,甚至还有点小适应~ 反而,前几天在写Java的时候,发现Java怎 ...