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-- 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 单(多)实例部署使用的更多相关文章
- tomcat单机多实例部署
最近在面试的过程中,一家公司在面试时提到了有关tomcat单机多实例部署的提问, 正好, 之前使用IntelliJ IDEA 13.1.4这款IDE开发web项目,在开发的过程中,因为有多个web项目 ...
- 通过Zabbix监控Tomcat单机多实例
前面已经介绍过Tomcat单机多实例部署,接下来就在他的基础上进行下一步操作:Tomcat多实例监控! Tomcat多实例监控过程和之前的redis多实例原理一样,分为以下4步: 1.获取多实例 2. ...
- tomcat单应用多实例部署报错 应用jar不存在
使用tomcat部署war包,同一环境有tomcat7和tomcat8两个应用,我这边使用tomcat7, 应用部署在其他目录,通过在启动脚本中设置CATALINA_HOME和CATALINA_BAS ...
- 性能测试二十:环境部署之Tomcat多实例部署+日志监控
一个tomcat性能有限,所以需要部署等多个tomcat 单实例部署与windows下类似,项目包放到webapp目录下,启动bin目录下的startup.sh即可启动命令:./startup.sh启 ...
- Tomcat多实例部署
前言 以前总是采用很Low的方式太同一台服务器上部署多个Web应用,步骤是这样的:Copy Tomcat目录-->更改conf/server.xml三个端口号----->部署war包--- ...
- Oracle 19c单实例部署
目录 Oracle 19c单实例部署: 1.配置yum: 2.安装rpm包: 3.设置hostname: 4.配置hostname解析: 5.配置时钟同步服务(ntp): 6.检查及配置内核参数: 7 ...
- 19.Tomcat多实例部署及负载均衡、动静分离
Tomcat多实例部署及负载均衡.动静分离 目录 Tomcat多实例部署及负载均衡.动静分离 Tomcat多实例部署 安装jdk 设置jdk环境变量 安装tomcat 配置 tomcat 环境变量 修 ...
- 分享一例测试环境下nginx+tomcat的视频业务部署记录
需求说明:在测试环境下(192.168.1.28)部署一套公司某业务环境,其中:该业务前台访问地址: http://testhehe.wangshibo.com该业务后台访问地址: http://te ...
- mysql 5.5多实例部署【图解】
mysql5.5数据库多实例部署,我们可以分以下几个步骤来完成. 1. mysql多实例的原理 2. mysql多实例的特点 3. mysql多实例应用场景 4. mysql5.5多实例部署方法 一. ...
随机推荐
- springboot-redis-crda example
springboot-redis-crda example 1. 从 https://github.com/XLuffyStory/springboot-redis-crdu 拿到源码之后,导入到ST ...
- 记一次基于Cloudflare服务的爬虫
前言 前几天有个朋友托我帮忙爬一个网站,第一次打开那个网站时,我去,它竟然就要验证码,不过当时是想加几个header应该就能解决,不过事实证明我还是错了.接下来将记录下爬虫中遇到的一些坑以及解决办法. ...
- ACM之路(转载)
转载自:https://www.cnblogs.com/tianjintou/p/4139416.html 要注意,ACM的竞赛性强,因此自己应该和自己的实际应用联系起来. 适合自己的才是好的,有的人 ...
- 关于C51 keil使用中.c文件的链接心得
这个问题一直烦了我很久,使用C51 keil进行.c文件链接的时候,老是报错诸如下面的信息: *** ERROR L104: MULTIPLE PUBLIC DEFINITIONS SYMBOL: a ...
- mongodb数据存储
# 打开服务端 直接执行abc.bat文件,如果执行闪退可以把data文件夹里的mongod.lock文件先删除 打开cmd窗口, 输入mongo,启动客户端. 也可以通过NoSQLBooster启动 ...
- Python线程池ThreadPoolExecutor源码分析
在学习concurrent库时遇到了一些问题,后来搞清楚了,这里记录一下 先看个例子: import time from concurrent.futures import ThreadPoolExe ...
- ElementUI 简要源码解析——Basic篇
Layout 布局 row 布局组件中的父组件,用于控制子组件.很简单的一个布局标签,主要通过 justify 和 align 控制子元素的对齐方式,使用 render 函数通过传入的 tag 属性控 ...
- linux服务器无telnet等测试工具,测试http+json服务连通性
1. 问题描述: 1.公司内部服务器需要通过http接口方式访问另一公司内部接口服务器. 2.申请信息安全开通访问权限,但是只能开通到服务器+端口号,例如:192.168.1:8080,无ping权限 ...
- Bzoj 2563: 阿狸和桃子的游戏 题解
2563: 阿狸和桃子的游戏 Time Limit: 3 Sec Memory Limit: 128 MBSubmit: 970 Solved: 695[Submit][Status][Discu ...
- C语言中的函数与数学上的函数很类似
函数,是C语言编程中一个很重要的概念,重要到个人认为可以与指针并驾齐驱.好多教材.老师.学习资源都会专门挑出一章来讲函数.我今天也来说说函数,只不过我是从数学课上的函数来引申到C语言中的函数. 先来说 ...