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 -u‘jspgouadmin‘ -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 单(多)实例部署使用的主要内容,如果未能解决你的问题,请参考以下文章