tomcat集群部署

1.tomcat基本介绍

JVM介绍
java业务基本上都是运行在java虚拟机上的,Java虚拟机简称JVM
虚拟机是通过软件模拟出具有完整硬件操作系统的功能

JAVA环境JRE和JDK的区别
jre是java的运行环境,包含jvm
jdk是java的开发环境,包含Java的运行环境jre
如果单纯的运行java代码,只需要jre就够了,如果需要提供开发环境以及运行环境则需要jdk

Tomcat
Tomcat和nginx类似,都是web服务器,只不过tomcat是基于java环境开发的web服务,只要解析java代码
nginx仅支持静态资源分析,而tomcat支持解析java开发的web应用,还支持解析静态资源(效率不高)
nginx适合做前端负载,tomcat适合做后端应用处理

通常情况下企业会使用 nginx+tomcat结合,nginx处理静态,tomcat处理动态

tomcat快速部署

yum install java-11-openjdk -y

[root@test3 bin]# pwd
/root/apache-tomcat-10.1.30/bin
[root@test3 bin]# ls
bootstrap.jar       ciphers.sh                    daemon.sh     migrate.bat       shutdown.sh           tool-wrapper.bat
catalina.bat        commons-daemon.jar            digest.bat    migrate.sh        startup.bat           tool-wrapper.sh
catalina.sh         commons-daemon-native.tar.gz  digest.sh     setclasspath.bat  startup.sh            version.bat
catalina-tasks.xml  configtest.bat                makebase.bat  setclasspath.sh   tomcat-juli.jar       version.sh
ciphers.bat         configtest.sh                 makebase.sh   shutdown.bat      tomcat-native.tar.gz


配置为systemctl管理
[root@test3 system]# systemctl cat nginx    #找配置systemctl管理的文件在哪
# /usr/lib/systemd/system/nginx.service



[root@test3 system]# cat /usr/lib/systemd/system/tomcat.service 
[Unit]
Description=The tomcat apache
After=network-online.target remote-fs.target nss-lookup.target
Wants=network-online.target

[Service]
Type=forking
ExecStart=/root/apache-tomcat-10.1.30/bin/startup.sh
ExecStop=/root/apache-tomcat-10.1.30/bin/shutdown.sh
ExecRestart=/root/apache-tomcat-10.1.30/bin/shutdown.sh && sleep 2 && /root/apache-tomcat-10.1.30/bin/startup.sh

[Install]
WantedBy=multi-user.target


[root@test3 ~]# cat /usr/lib/systemd/system/tomcat.service
[Unit]
Description=The tomcat apache
After=network-online.target remote-fs.target nss-lookup.target
Wants=network-online.target

[Service]
Type=forking
ExecStart=/root/apache-tomcat-9.0.98/bin/startup.sh
ExecStop=/root/apache-tomcat-9.0.98/bin/shutdown.sh
#ExecRestart=/root/apache-tomcat-9.0.98/bin/shutdown.sh && sleep 2 && /root/apache-tomcat-9.0.98/bin/startup.sh
Restart=/root/apache-tomcat-9.0.98/bin/shutdown.sh && sleep 2 && /root/apache-tomcat-9.0.98/bin/startup.sh
#Restart=always
#SuccessExitStatus=143

[Install]
WantedBy=multi-user.target

[root@test3 system]# systemctl daemon-reload
[root@test3 system]# systemctl restart tomcat
[root@test3 system]# systemctl status tomcat
● tomcat.service - The tomcat apache
   Loaded: loaded (/usr/lib/systemd/system/tomcat.service; disabled; vendor preset: disabled)
   Active: active (running) since Sat 2024-11-30 21:16:25 CST; 5s ago
  Process: 2449 ExecStart=/root/apache-tomcat-10.1.30/bin/startup.sh (code=exited, status=0/SUCCESS)
 Main PID: 2463 (java)
    Tasks: 34
   Memory: 206.9M
   CGroup: /system.slice/tomcat.service
           └─2463 /usr/bin/java -Djava.util.logging.config.file=/root/apache-tomcat-10.1.30/conf/logging.properties -Djava.util.loggi...

Nov 30 21:16:25 test3 systemd[1]: Starting The tomcat apache...
Nov 30 21:16:25 test3 startup.sh[2449]: Tomcat started.
Nov 30 21:16:25 test3 systemd[1]: Started The tomcat apache.

[root@test3 system]# netstat -tunlp|grep 8080
tcp6       0      0 :::8080                 :::*                    LISTEN      2463/java       


如何测restart有没有生效,restart之后 pid号会变 ps -ef


tomcat 软件目录结构
bin       --主要包含启动和关闭tomcat的脚本(启停java脚本依赖jar包)
conf      --tomcat的配置文件目录(站点配置 server.xml)
lib       --tomcat运行时需要加载的jar包
logs      --tomcat日志存放的路径                localhost_access_log.2024-12-04.txt,访问日志
temp      --tomcat临时存放文件的路径
webapps   --tomcat默认站点目录
work      --tomcat运行时产生的缓存

配置文件  server.xml
      <Host name="localhost"  appBase="webapps"    #name=域名  appBase=代码目录 
            unpackWARs="true" autoDeploy="true">    自动解压.war   
      <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
               prefix="localhost_access_log" suffix=".txt"       #日志文件存放的地方
               pattern="%h %l %u %t &quot;%r&quot; %s %b" />
日志参数解释:
    %a - 远程IP地址
    %A - 本地IP地址
    %b - 发送的字节数,不包括HTTP头,或“ - ”如果没有发送字节
    %B - 发送的字节数,不包括HTTP头
    %h - 远程主机名
    %H - 请求协议
    %l (小写的L)- 远程逻辑从identd的用户名(总是返回' - ')
    %m - 请求方法
    %p - 本地端口
    %q - 查询字符串(在前面加上一个“?”如果它存在,否则是一个空字符串
    %r - 第一行的要求
    %s - 响应的HTTP状态代码
    %S - 用户会话ID
    %t - 日期和时间,在通用日志格式
    %u - 远程用户身份验证
    %U - 请求的URL路径
    %v - 本地服务器名
    %D - 处理请求的时间(以毫秒为单位)
    %T - 处理请求的时间(以秒为单位)
    %I (大写的i) - 当前请求的线程名称

tomcat自定义server

      <Host name="th.com"  appBase="/code/tomcat"
            unpackWARs="true" autoDeploy="true">

        <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
               prefix="th" suffix=".log"
               pattern="%h %l %u %t &quot;%r&quot; %s %b" />

      </Host>
tomcat实际的资源路径为
/code/tomcat/ROOT
[root@test3 ~]# systemctl restart tomcat
配置hosts解析
root@test3 logs]# tail -n1 /etc/hosts
192.168.23.103 th.com

此时就有日志了
[root@test3 logs]# tail -f th.2024-12-07.log 
192.168.23.103 - - [07/Dec/2024:20:51:41 +0800] "GET / HTTP/1.1" 404 683
192.168.23.1 - - [07/Dec/2024:21:00:46 +0800] "GET / HTTP/1.1" 404 649
192.168.23.1 - - [07/Dec/2024:21:00:46 +0800] "GET /favicon.ico HTTP/1.1" 404 649

在这里插入图片描述

配置首页文件

[root@test3 logs]# mkdir /code/tomcat/ROOT/ -p
[root@test3 logs]# echo 1111 > /code/tomcat/ROOT/index.html
[root@test3 logs]# curl th.com:8080
1111



tomcat中Context的作用:
      <Host name="th.com"  appBase="/code/tomcat"
            unpackWARs="true" autoDeploy="true">
            #访问th.com/tt 这个uri时,获取/code/tt中页面的资源,不存在该目录会报错,无法启动tomcat,需要提前创建
        <Context docBase="/code/tt" path="/tt" reloadable="true" />
        
        <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
               prefix="th" suffix=".log"
               pattern="%h %l %u %t &quot;%r&quot; %s %b" />

      </Host>

创建资源
[root@test3 ~]# mkdir /code/tt     
[root@test3 ~]# echo 1111111 > /code/tt/index.html
[root@test3 ~]# systemctl restart tomcat


在这里插入图片描述

tomcat管理页

在这里插入图片描述

Tomcat自带的管理页面
   管理功能
   监控功能
1.所有的管理页面都将权限赋予了角色,而角色的名称时固定的 manager-gui  admin-gui
2.需要添加一个用户,将用户捆绑至对应的角色,这样用户就可以访问到对应的页面


[root@test3 ~]# tail -n6 apache-tomcat-10.1.30/conf/tomcat-users.xml

<role rolename="manager-gui"/>    #需要两个角色来管理
<role rolename="admin-gui"/>
<user username="tomcat" password="s3cret" roles="manager-gui,admin-gui"/>

</tomcat-users>


开启ip地址的限制
由于项目默认允许127.0.0.1访问,所以配置好了角色和用户也无法正常访问
[root@test3 ~]# vim apache-tomcat-10.1.30/webapps/host-manager/META-INF/context.xml

  <Valve className="org.apache.catalina.valves.RemoteAddrValve"
         allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1" />   #一开始只允许127段的访问
改成
  <Valve className="org.apache.catalina.valves.RemoteAddrValve"
         allow="\d+\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1" />   #允许所有的ip访问  d+就相当于0.0.0.0

[root@test3 ~]# vim apache-tomcat-10.1.30/webapps/manager/META-INF/context.xml 
  <Valve className="org.apache.catalina.valves.RemoteAddrValve"
         allow="\d+\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1" />    #同上

[root@test3 ~]# systemctl restart tomcat

在这里插入图片描述

tomcat部署zrlog

[root@test3 ~]# vim apache-tomcat-10.1.30/conf/server.xml
      <Host name="zr.com"  appBase="/code/zrlog"
            unpackWARs="true" autoDeploy="true">

        <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
               prefix="zrlog" suffix=".log"
               pattern="%h %l %u %t &quot;%r&quot; %s %b" />

      </Host>



上传zrlog包
[root@test3 zrlog]# pwd
/code/zrlog
[root@test3 zrlog]# ls
ROOT  ROOT.war

如何快速扩展一台ttest2

1.安装jdk
[root@test2 yum.repos.d]# yum install java-11-openjdk java-11-openjdk-devel -y
2.拷贝tomcat目录文件
[root@test3 ~]#scp -r apache-tomcat-9.0.98  192.168.23.102:/root
3.拷贝tomcat 代码文件
[root@test3 ~]# scp -r /code/zrlog   192.168.23.102:/code
[root@test3 ~]# scp /usr/lib/systemd/system/tomcat.service 192.168.23.102:/usr/lib/systemd/system/


重启,访问test2的IP即可

加入负载均衡
[root@test3 ~]# cat /etc/nginx/conf.d/zrlog.conf
upstream {
	server 192.168.23.103:8080;
	server 192.168.23.102:8080;
}
server {
	listen 80;
	server_name 192.168.23.103;
	location / {
		proxy_pass http://zrlog;
		proxy_set_header Host $http_host;
		proxy_set_header X-Real-IP $remote_addr;
		proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
		proxy_http_version 1.1;
	}
}

Tomcat+nginx+redis会话保持

多种会话方式:1.ip_hash 2.mysql 3.redis
tomcat 自带的cluster session复制,(官方建议不超过4个节点)

所有节点都需要配置
cat server.xml
      <Host name="session.com"  appBase="/code/session/"
            unpackWARs="true" autoDeploy="true">

        <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
               prefix="localhost_access_log" suffix=".txt"
               pattern="%h %l %u %t &quot;%r&quot; %s %b" />
    </Host>



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值