高性能web服务器Tomcat

发布于:2025-08-13 ⋅ 阅读:(21) ⋅ 点赞:(0)

一、Tomcat功能

Tomcat 的作用:是运行 Java Web 应用的服务器,能处理动态网页请求(如含 Java 代码的页面),将代码运行结果转换为浏览器可识别的内容并返回

  • 在电商网站查 “我的购物车”,这个页面不是固定的,它需要实时计算你加了哪些商品、多少钱、还有没有库存。这些需要根据你的信息实时生成的内容,就由 Tomcat 来处理:它运行背后的 Java 程序,去数据库查你的购物车数据,计算价格,最后把这些信息变成你看到的购物车页面,传到浏览器上去

    而网站里固定的图片、文字介绍(静态内容),可以由其他服务器直接提供,不用麻烦 Tomca

安装TOMCAT
  1. 首先要安装java环境
#安装iava环境
[root@tomcat ~]# yum install java-1.8.0-openjdk.x86_64 -y
#查看java版本
[root@tomcatA ~]# java -version
#查看java的文件权限
[root@tomcatA ~]# ll /usr/bin/java 
lrwxrwxrwx 1 root root 22 Jul 30 11:19 /usr/bin/java -> /etc/alternatives/java

在这里插入图片描述

  1. 安装并启动Tomcat
[root@tomcatB ~]# tar zxf apache-tomcat-9.0.107.tar.gz -C /usr/local/
[root@tomcatB ~]# cd /usr/local/
[root@tomcatB local]# ls
apache-tomcat-9.0.107  bin  etc  games  include  lib  lib64  libexec  sbin  share  src
[root@tomcatB local]# mv apache-tomcat-9.0.107/ tomcat
[root@tomcatB local]# ls
bin  etc  games  include  lib  lib64  libexec  sbin  share  src  tomcat

文件系统传输命令

scp tomcat root@192.168.147.20:/usr/local

#启动
[root@tomcatA ~]# cd /usr/local/tomcat/bin/
[root@tomcatA bin]# ./startup.sh 
Using CATALINA_BASE:   /usr/local/tomcat
Using CATALINA_HOME:   /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME:        /usr
Using CLASSPATH:       /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
Using CATALINA_OPTS:   
Tomcat started.

#查看端口是否开启
[root@tomcatA bin]# netstat -antlupe | grep java
tcp6       0      0 127.0.0.1:8005          :::*                    LISTEN      0          212698     121930/java         
tcp6       0      0 :::8080                 :::*                    LISTEN      0          214170     121930/java  

测试访问tomcat

在这里插入图片描述

tomcat的文件结构

目录结构

目录 				   说明
-------------------------------------------------------
bin					服务启动、停止等相关程序和文件
conf 				配置文件
lib 				库目录
logs 				日志目录
webapps 			应用程序,应用部署目录,相当于nginx的默认发布目录
work jsp 			编译后的结果文件,建议提前预热访问
配置Tomcat启动文件
  1. 生成Tomcat的配置文件
[root@tomcat ~]# vim /usr/local/tomcat/conf/tomcat.conf
JAVA_HOME=/etc/alternatives/jre
  1. 生成启动文件
[root@tomcatA ~]# vim /lib/systemd/system/tomcat.service
####
[Unit]
Description=Tomcat
#After=syslog.target network.target remote-fs.target nss-lookup.target
After=syslog.target network.target

[Service]
Type=forking
EnvironmentFile=/usr/local/tomcat/conf/tomcat.conf
ExecStart=/usr/local/tomcat/bin/startup.sh
ExecStop=/usr/local/tomcat/bin/shutdown.sh
PrivateTmp=true
User=tomcat
Group=tomcat

[Install]
WantedBy=multi-user.target
  1. 生成tomcat用户并设定软件安装目录权限
[root@tomcatA ~]# useradd -s /sbin/nologin -M tomcat
[root@tomcatA ~]# chown tomcat.tomcat /usr/local/tomcat/ -R
  1. 设置开机启动tomcat脚本
[root@tomcatA ~]# systemctl start tomcat.service
[root@tomcatA ~]# systemctl status tomcat.service

二、反向代理实现tomcat部署

1. 常见部署方式介绍

在这里插入图片描述

2. 利用nginx反向代理

在这里插入图片描述

  • 利用nginx反向代理功能,实现图中的代理功能,将用户请求全部转发至指定的同一个tomcat主机
  • 利用nginx指令proxy_pass 可以向后端服务器转发请求报文,并且在转发时会保留客户端的请求报文中的host首部
  1. 在Nginx服务器开启Nginx服务

    配置路由策略

    [root@Nginx ~]# dnf install nginx -y
    [root@Nginx ~]# systemctl start nginx.service
    
    [root@Nginx ~]# vim /etc/nginx/conf.d/vhosts.conf
    upstream tomcat {
            hash $cookie_JSESSIONID;
            server 192.168.147.10:8080;
            server 192.168.147.20:8080;
    }
    server {
            listen 80;
            server_name www.zym.org;
            location ~ \.jsp$ {
                    #proxy_pass http://172.25.254.10:8080;
                    proxy_pass http://tomcat;
            }
    }
    
    #查看主机域名
    [root@Nginx conf.d]# cat /etc/hosts
    192.168.147.100 Nginx.zym.org   www.zym.org
    
  2. 在Tomcat服务器上

    两台服务器均要配置

    #把jsp页面放入该目录内
    [root@tomcatA ~]# cd /usr/local/tomcat/webapps/ROOT/
    

    在这里插入图片描述

  3. 测试访问

注意!!!

浏览器访问时,需要查看windows上是否解析了主机的域名

C:\Windows\System32\drivers\etc的host文件

如果无法保存,请先用管理员身份运行记事本,在打开host文件,编辑后保存即可
在这里插入图片描述

使用浏览器访问主机域名在这里插入图片描述

三、Memcached

  • Memcache 是一种分布式内存缓存系统,主要作用是缓存频繁访问的数据(如数据库查询结果等),通过将数据存储在内存中,加快数据访问速度,从而减轻数据库等后端存储的压力,提升应用整体响应效率

比如说:一个网站,很多人看同一篇热门文章,Memcache 会把这篇文章的内容暂时缓存这篇文章,当用户再访问时可以直接访问看,不用每次都去数据库里 “翻仓库”相当于查数据库,减缓的是数据库的压力

cookie值—会话值,来一个会话缓存存会话值,进行会话;

  • 比如说去看病,cookie为病情,每看一个医生,就要再说一遍病情是什么
1. memcached的安装与启动

在这里插入图片描述

[root@tomcatA ~]# dnf install memcached -y
[root@tomcat ~]# vim /etc/sysconfig/memcached
PORT="11211"
USER="memcached"
MAXCONN="1024"
CACHESIZE="64"
OPTIONS="-l 0.0.0.0,::1"

[root@tomcat ~]# systemctl enable --now memcached
[root@tomcat ~]# netstat -antlupe | grep memcache
tcp        0      0 0.0.0.0:11211           0.0.0.0:                *               LISTEN      980        1201515    72                0385/memcached
tcp6       0      0 ::1:11211               :::*                                    LISTEN      980        1201516    72                0385/memcached
2. memcached操作命令

五种基本 memcached 命令执行最简单的操作。这些命令和操作包括:set、add、replace、get、delete

#前三个命令是用于操作存储在 memcached 中的键值对的标准修改命令,都使用如下所示的语法:
command <key> <flags> <expiration time> <bytes>
<value>

#参数说明如下:
command set/add/replace
key 				用于查找缓存值
flags 				可以包括键值对的整型参数,客户机使用它存储关于键值对的额外信息
expiration time 	在缓存中保存键值对的时间长度(以秒为单位,0 表示永远)
bytes 				在缓存中存储的字节数
value 				存储的值(始终位于第二行)

#增加key,过期时间为秒,bytes为存储数据的字节数
add key flags exptime bytes

简单示例

[root@tomcatA ~]# telnet localhost 11211
Trying ::1...
Connected to localhost.
Escape character is '^]'.
add leekey 0 60 4
test
STORED

add leekey1 0 60 3
lee
STORED

#查看
get leekey
VALUE leekey 0 4
test
END

四、session共享服务器

1. msm介绍

在这里插入图片描述

将会话数据,交叉缓存到memcached中,当一台tomcat挂掉后,数据缓存到了memcached中,可以切换到另一台tomcat也可以读取到缓存的数据

安装配置:把需要的jar包,放到/usr/local/tomcat/lib该目录下

kryo-3.0.3.jar
asm-5.2.jar
objenesis-2.6.jar
reflectasm-1.11.9.jar
minlog-1.3.1.jar
kryo-serializers-0.45.jar
msm-kryo-serializer-2.3.2.jar
memcached-session-manager-tc9-2.3.2.jar
spymemcached-2.12.3.jar
memcached-session-manager-2.3.2.jar
2. 配置tomcat修改
#在tomcatA上配置
[root@tomcatA ~]# vim /usr/local/tomcat/conf/context.xml
 <Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
        memcachedNodes="n1:192.168.147.10:11211,n2:192.168.147.20:11211"
        failoverNodes="n1"
        requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$"
transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory"

#在tomcatB上配置
[root@tomcatB ~]# vim /usr/local/tomcat/conf/context.xml
<Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
        memcachedNodes="n1:192.168.147.10:11211,n2:192.168.147.20:11211"
        failoverNodes="n2"
        requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$"
transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory"

#重启服务
[root@tomcatA ~]# systemctl restart memcached.service

tomcatA的context.xml
在这里插入图片描述

3. 配置nginx修改
[root@Nginx ~]# vim /etc/nginx/conf.d/vhosts.conf
upstream tomcat {
        hash $cookie_JSESSIONID;
        server 192.168.147.10:8080;
        server 192.168.147.20:8080;
}
server {
        listen 80;
        server_name www.zym.org;
        root /web/zym;
        access_log /web/var/log/nginx/access.log;
        error_log /web/var/log/nginx/error.log;
        try_files $uri $uri.html $uri/index.html /error/default.html

        location ~ \.jsp$ {
                proxy_pass http://tomcat;
        }
}
4. 进行访问测试
#两台tomcat服务确保该服务启动
[root@tomcatA ~]# systemctl restart tomcat.service
[root@tomcatA ~]# systemctl status tomcat.service

访问www.zym.org/test.jsp

现在服务是在tomcatA上,写入数据,数据正常
在这里插入图片描述

把tomcatA停掉服务

[root@tomcatA ~]# systemctl stop tomcat.service
[root@tomcatA ~]# systemctl status tomcat.service

在这里插入图片描述

查看页面是否转换服务器,数据缓存

  • 服务器转换到了tomcatB上,此时读取的是交叉缓存到memcached上的数据
  • 读取到之前的会话信息

重启服务,回到之前服务器上
在这里插入图片描述


网站公告

今日签到

点亮在社区的每一天
去签到