高性能web服务器Tomcat
一、Tomcat功能
Tomcat 的作用:是运行 Java Web 应用的服务器,能处理动态网页请求(如含 Java 代码的页面),将代码运行结果转换为浏览器可识别的内容并返回
-
在电商网站查 “我的购物车”,这个页面不是固定的,它需要实时计算你加了哪些商品、多少钱、还有没有库存。这些需要根据你的信息实时生成的内容,就由 Tomcat 来处理:它运行背后的 Java 程序,去数据库查你的购物车数据,计算价格,最后把这些信息变成你看到的购物车页面,传到浏览器上去
而网站里固定的图片、文字介绍(静态内容),可以由其他服务器直接提供,不用麻烦 Tomca
安装TOMCAT
- 首先要安装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
- 安装并启动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启动文件
- 生成Tomcat的配置文件
[root@tomcat ~]# vim /usr/local/tomcat/conf/tomcat.conf
JAVA_HOME=/etc/alternatives/jre
- 生成启动文件
[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
- 生成tomcat用户并设定软件安装目录权限
[root@tomcatA ~]# useradd -s /sbin/nologin -M tomcat
[root@tomcatA ~]# chown tomcat.tomcat /usr/local/tomcat/ -R
- 设置开机启动tomcat脚本
[root@tomcatA ~]# systemctl start tomcat.service
[root@tomcatA ~]# systemctl status tomcat.service
二、反向代理实现tomcat部署
1. 常见部署方式介绍
2. 利用nginx反向代理
- 利用nginx反向代理功能,实现图中的代理功能,将用户请求全部转发至指定的同一个tomcat主机
- 利用nginx指令proxy_pass 可以向后端服务器转发请求报文,并且在转发时会保留客户端的请求报文中的host首部
-
在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
-
在Tomcat服务器上
两台服务器均要配置
#把jsp页面放入该目录内 [root@tomcatA ~]# cd /usr/local/tomcat/webapps/ROOT/
-
测试访问
注意!!!
浏览器访问时,需要查看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
STOREDadd 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.htmllocation ~ \.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上的数据
- 读取到之前的会话信息
重启服务,回到之前服务器上