Tomcat多实例是指在一台设备上运行多个Tomcat服务,这些Tomcat相互独立,互补影响。多实例与虚拟主机不同,虚拟主机的本质是在一个服务下有多个相对独立的目录,但是多实例却存在了多个服务。
实验环境
tomcat1使用的端口为默认端口:8080、8005、8009
tomcat2使用的端口为:8081、8006、8010
8080端口: 用来监听tomcat服务的端口,
8005端口: 用来监听关闭tomcat服务的端口
8009端口: 负责和其他的HTTP服务器建立连接
systemctl stop firewalld
systemctl disable firewalld
setenforce 0
配置环境变量
vim /etc/profile.d/java.sh
export JAVA_HOME=/usr/java/jdk1.8.0_201-amd64
export CLASSPATH=.:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar
export PATH=$JAVA_HOME/bin:$PATH
source /etc/profile.d/java.sh
创建tomcat目录,安装tomcat
tar -zxf apache-tomcat-9.0.16.tar.gz
mkdir /usr/local/tomcat
mv apache-tomcat-9.0.16 /usr/local/tomcat/tomcat1
cp -a /usr/local/tomcat/tomcat1/ /usr/local/tomcat/tomcat2
vim /etc/profile.d/tomcat.sh
#tomcat1
export CATALINA_HOME1=/usr/local/tomcat/tomcat1
export CATALINA_BASE1=/usr/local/tomcat/tomcat1
export TOMCAT_HOME1=/usr/local/tomcat/tomcat1
#tomcat2
export CATALINA_HOME2=/usr/local/tomcat/tomcat2
export CATALINA_BASE2=/usr/local/tomcat/tomcat2
export TOMCAT_HOME2=/usr/local/tomcat/tomcat2
source /etc/profile.d/tomcat.sh
为什么要修改tomcat2,不修改tomcat1的呢,因为要求各tomcat实例配置不能有重复的端口号,tomcat1的端口是安装tomcat默认的端口,tomcat2时复制过来的端口,所以我们该tomcat2的端口就行了。
vim /usr/local/tomcat/tomcat2/conf/server.xml
#22行,修改Server prot,默认为8005 -> 修改为8006
修改为8081
#116行,修改Connector port AJP/1.3,默认为8009 -> 修改为8010
第一个连接器默认监听8080端口,负责建立HTTP连接,在通过浏览器访问Tomcat服务器的Web应用时,使用的就是这个连接器
第二个连接器默认监听8009端口,负责和其它的HTTP服务建立连接,在把Tomcat与其它HTTP服务器集成时,使用这个连接器。
vim /usr/local/tomcat/tomcat1/bin/startup.sh
# -----------------------------------------------------------------------------
# Start Script for the CATALINA Server
# -----------------------------------------------------------------------------
export CATALINA_BASE=$CATALINA_BASE1
export CATALINA_HOME=$CATALINA_HOME1
export TOMCAT_HOME=$TOMCAT_HOME1
vim /usr/local/tomcat/tomcat1/bin/shutdown.sh
# -----------------------------------------------------------------------------
# Stop script for the CATALINA Server
# -----------------------------------------------------------------------------
export CATALINA_BASE=$CATALINA_BASE1
export CATALINA_HOME=$CATALINA_HOME1
export TOMCAT_HOME=$TOMCAT_HOME1
vim /usr/local/tomcat/tomcat2/bin/startup.sh
# -----------------------------------------------------------------------------
# Start Script for the CATALINA Server
# -----------------------------------------------------------------------------
export CATALINA_BASE=$CATALINA_BASE2
export CATALINA_HOME=$CATALINA_HOME2
export TOMCAT_HOME=$TOMCAT_HOME2
vim /usr/local/tomcat/tomcat2/bin/shutdown.sh
# -----------------------------------------------------------------------------
# Stop script for the CATALINA Server
# -----------------------------------------------------------------------------
export CATALINA_BASE=$CATALINA_BASE2
export CATALINA_HOME=$CATALINA_HOME2
export TOMCAT_HOME=$TOMCAT_HOME2
/usr/local/tomcat/tomcat1/bin/startup.sh
/usr/local/tomcat/tomcat2/bin/startup.sh
netstat -natp |grep java
http://20.0.0.57:8080
http://20.0.0.57:8081
Nginx +Tomcat 结合原理:
当客户端请求的是静态页面或者图片,直接返回给客户端。
当客户端请求的是动态页面,那么nginx将作为反向代理,通过负载均衡将动态请求转发到Tomcat上进行执行,Tomcat执行完后,将内容返回给nginx,最后到达客户端。
nginx服务器:20.0.0.55:80
Tomcat服务器1:20.0.0.56:8080
Tomcat服务器2:20.0.0.57:8080 Tomcat服务器2:20.0.0.57:8081 (服务器2安装两个Tomcat)
yum -y install pcre-devel zlib-devel openssl-devel gcc gcc-c++ make
useradd -M -s /sbin/nglogin nginx
cd /opt
tar zxvf nginx-1.12.0.tar.gz -C /opt/
cd nginx-1.12.0/
./configure \
--prefix=/usr/local/nginx \
--user=nginx \
--group=nginx \
--with-file-aio \ #启用文件修改支持
--with-http_stub_status_module \ #启用状态统计
--with-http_gzip_static_module \ #启用 gzip静态压缩
--with-http_flv_module \ #启用 flv模块,提供对 flv 视频的伪流支持
--with-http_ssl_module #启用 SSL模块,提供SSL加密功能
--with-stream #启用 stream模块,提供4层调度
make && make install
ln -s /usr/local/nginx/sbin/nginx /usr/local/nginx
vim /lib/systemd/system/nginx.service
[Unit]
Description=nginx
After=network.target
[Service]
Type=forking
PIDFile=/usr/local/nginx/logs/nginx.pid
ExecStart=/usr/local/nginx/sbin/nginx
ExecrReload=/bin/kill -s HUP $MAINPID
ExecrStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true
[Install]
WantedBy=multi-user.target
chmod 754 /lib/systemd/system/nginx.service
systemctl start nginx.service
systemctl enable nginx.service
tar -zxf jdk-8u91-linux-x64.tar.gz -C /usr/local
vim /etc/profile
export JAVA_HOME=/usr/local/jdk1.8.0_91
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH
source /etc/profile
java -version
ln -s zxf apache-tomcat-9.0.16.tar.gz
mv apache-tomcat-9.0.16.tar.gz /usr/local/tomcat
ln -s /usr/local/tomcat/bin/startup.sh /usr/local/bin
ln -s /usr/local/tomcat/bin/shutdwon.sh /usr/local/bin
mkdir /usr/local/tomcat/webapps/test
vim /usrl/local/tomcat/webapps/test/index.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
JSP test1 page #指定为 test1 页面
<% out.println("动态页面 1,http://www.test1.com");%>
vim /usr/local/tomcat/conf/server.xml
#由于主机名 name 配置都为 localhost,需要删除前面的 HOST 配置
根据前面多实例步骤部署好一个服务器两个tomcat服务,一个tomcat1一个tomcat2,并且能正常访问到两个tomcat服务。
访问到之后,下面再修改页面标签。
mkdir /usr/local/tomcat/tomcat1/webapps/test
vim /usr/local/tomcat/tomcat1/webapps/test/index.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
JSP test2 page #指定为 test2 页面
<% out.println("动态页面 2,http://www.test2.com");%>
echo 'zhis is jingtai page
' > /usr/local/nginx/html/index.html
访问地址为:http://20.0.0.55/index.jsp ,然后按F5进行轮询切换不同tomcat服务
访问tomcat2服务器上
Tomcat多实例表示为在一个服务器上可以运行多个Tomcat服务,每个Tomcat服务相对独立,配置文件也是独立的,但是需要注意的是,Tomcat默认的端口为8080,如果有两个Tomcat服务,那么有另外一个服务的需要改成不同的端口。
这个与虚拟主机不同,虚拟主机时在一个Tomcat服务上,运行多个Host项目,在同一个主配置文件中进行配置不同的Host。
nginx+tomcat实验的本质,就是使用作为反向代理,将客户端发出的动态请求转发到Tomcat上,让Tmoca进行处理。还可以通过负载均衡设置Tomcat的地址池。可以使得nginx反向代理到多个不同的Tomcat服务器上或者是不同的虚拟主机上。