tomcat
一 介绍
前端三大核心技术:
HTML(HyperText Markup Language)超文本标记语言
CSS(Cascading Style Sheets)层叠样式表
Javascript
简称
JS
,是一种动态的弱类型脚本解释性语言
同步:即要更新网页中一小部分(如提交账号密码等)缺将整个网页一起更新
异步:只更新要更新的部分,其他部分不便
WEB框架
web访问流程:

后台应用框架

单体架构:
传统架构(单机系统),一个项目一个工程,统一部署,一个进程
all in one
的架构方式,把所有的功能单元放在一个应用里。然后把整个应用部署到一台服务器上。
如果负载能力不行,将整个应用进行水平复制,进行扩展,然后通过负载均衡实现访问。
Java
实现:
JSP
、
Servlet
,打包成一个
jar
、
war
部署
优点:易于开发和测试
:
也十分方便部署
;
当需要扩展时,只需要将
war
复制多份,然后放到多个服务器上, 再做个负载均衡就可以了。
缺点:如果某个功能模块出问题,有可能全站不可访问,修改
Bug
后、某模块功能修改或升级后,需要停 掉整个服务,重新整体重新打包、部署这个应用war
包,功能模块相互之间耦合度高
,
相互影响
,
不适 合当今互联网业务功能的快速迭代。 特别是对于一个大型应用,我们不可能吧所有内容都放在一个应用里面,我们如何维护、如何分工
合作都是问题。如果项目庞大,管理难度大
微服务
属于
SOA
(
Service Oriented Architecture
)的子集
将传统的一站式应用,根据业务拆分成一个一个的服务,彻底去掉耦合,每一
个微服务提供单个业务功能,一个服务只做一件事。每个服务都围绕着具体业务进行构建,并且能
够被独立地部署到生产环境、类生产环境等。
服务之间采用轻量级的通信机制(通常是基于
HTTP
的
RESTful API
)。
web应用服务器
开源的
tomcat
、
jetty
、
glassfish
商用的有
weblogic
、
websphere
、
Jboss
tomcat是免费开源的web应用服务器
官网:https://tomcat.apache.org/
官网文档
:
https://tomcat.apache.org/tomcat-8.5-doc/index.html
帮助文档
:
https://cwiki.apache.org/confluence/display/tomcat/
https://cwiki.apache.org/confluence/display/tomcat/FAQ
二 安装
实验环境:两个web应用服务器,一个nginx服务器
1.下载安装包
wget https://dlcdn.apache.org/tomcat/tomcat-9/v9.0.115/bin/apache-tomcat-9.0.115.tar.gz
2.部署tomcat
检查是否开启httpd服务,开启要关闭
[root@RS1 ~]# systemctl status httpd
[root@RS1 ~]# systemctl disable –now httpd
Removed "/etc/systemd/system/multi-user.target.wants/httpd.service".
[root@RS1 ~]#
安装运行所需的java
[root@RS1 ~]# yum install java-1.8.0-openjdk.x86_64 -y
[root@RS1 ~]# tar zxf apache-tomcat-9.0.115.tar.gz -C /usr/local
z识别并处理 gzip 格式的压缩包(对应 .tar.gz/.tgz 后缀),自动调用 gzip 解压
x执行解压操作(extract),是解压场景的核心参数
f指定要处理的压缩包文件(file),f 后必须紧跟压缩包文件名(不能分开)
-C /usr/localC 是 Change directory 的缩写,指定解压后的文件放到 /usr/local 目录(而非当前目录)
[root@RS1 ~]# cd /usr/local/
[root@RS1 local]# ls
apache-tomcat-9.0.115 bin etc games include lib lib64 libexec sbin share src
[root@RS1 local]# mv apache-tomcat-9.0.115/ tomcat
[root@RS1 local]# cd tomcat/
[root@RS1 tomcat]# ls
bin BUILDING.txt conf CONTRIBUTING.md lib LICENSE logs NOTICE README.md RELEASE-NOTES RUNNING.txt temp webapps work
[root@RS1 tomcat]#
[root@RS1 tomcat]# cd bin
[root@RS1 bin]# ./startup.sh
// #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@RS1 bin]# netstat -antlupe | grep 8080
tcp6 0 0 :::8080 :::* LISTEN 0 40232 3833/java
[root@RS1 bin]#
3.制作tomcat的启动脚本
[root@RS1 bin]# vim /usr/local/tomcat/conf/tomcat.conf
1 JAVA_HOME=/etc/alternatives/jre
定义 Tomcat 运行依赖的JAVA_HOME环境变量,指向系统中 JRE(Java 运行环境)的软链接路径(/etc/alternatives/jre是 Linux 系统中 Java 的统一替代路径,避免手动指定具体 JRE 版本),Tomcat 必须通过这个变量找到 Java 环境才能启动。
[root@RS1 bin]# vim /lib/systemd/system/tomcat.service
#systemd管理Tomcat服务的核心配置文件
1 [Unit]
2 Description=Tomcat
3 #After=syslog.target network.target remote-fs.target nss-lookup.target
4 After=syslog.target network.target
5
6 [Service]
7 Type=forking
8 EnvironmentFile=/usr/local/tomcat/conf/tomcat.conf
9 ExecStart=/usr/local/tomcat/bin/startup.sh
10 ExecStop=/usr/local/tomcat/bin/shutdown.sh
11 PrivateTmp=true
12 User=tomcat
13 Group=tomcat
14
15 [Install]
16 WantedBy=multi-user.target
[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
[root@RS1 bin]# useradd -s /sbin/nologin -M tomcat
//创建tomcat系统用户:
– -s /sbin/nologin:禁止该用户通过 SSH / 终端登录(仅用于运行服务,提高安全性);
– -M:不创建该用户的家目录(无需登录,节省资源)
[root@RS1 bin]# chown tomcat.tomcat /usr/local/tomcat/ -R
递归修改 Tomcat 安装目录的属主和属组为tomcat:tomcat:
– -R:递归处理所有子文件 / 目录;
– 确保tomcat用户有读写执行权限,避免启动时权限不足。
[root@RS1 bin]# systemctl daemon-reload
重新加载 systemd 的配置文件:因为修改了tomcat.service,需要让 systemd 识别新配置,否则服务管理命令会失效。
[root@RS1 bin]# systemctl enable –now tomcat.service
Created symlink /etc/systemd/system/multi-user.target.wants/tomcat.service → /usr/lib/systemd/system/tomcat.service.
[root@RS1 bin]# netstat -antlupe | grep java
[root@RS1 bin]# systemctl enable –now tomcat.service
[root@RS1 bin]# netstat -antlupe | grep java
tcp6 0 0 127.0.0.1:8005 :::* LISTEN 1000 50603 4387/java
tcp6 0 0 :::8080 :::* LISTEN 1000 50591 4387/java
//查看系统网络连接,并过滤和 Java 相关的进程:
– -a:显示所有连接;
– -n:显示端口号(而非服务名);
– -t:显示 TCP 连接;
– -u:显示 UDP 连接;
– -l:显示监听状态的端口;
– -p:显示进程 ID 和进程名;
– -e:显示用户 ID 等扩展信息;
4.访问tomcat(服务器ip:8080)
三 nginx与tomcat的整合(结合反向代理部署)
常见的部署方式:

standalone
模式,
Tomcat
单独运行,直接接受用户的请求,不推荐
单机反向代理,单机运行,提供了一个
Nginx
作为反向代理,可以做到静态由
nginx
提供响应,动态
jsp
代理给Tomcat
LNMT
:
Linux + Nginx + MySQL + Tomcat
LAMT:
Linux + Apache
(
Httpd
)
+ MySQL + Tomcat
反向代理多机:前置一台
Nginx
,给多台
Tomcat
实例做反向代理和负载均衡调度,
Tomcat上部署的纯动态页面更适合LNMT
:
Linux + Nginx + MySQL + Tomcat
LNMT
:
Linux + Nginx + MySQL + Tomcat
多级代理:LNNMT
:
Linux + Nginx + Nginx + MySQL + Tomcat
1.单体架构
利用nginx反向代理实现,编辑子配置文件添加

nginx服务器上:
[root@nginx ~]# cd /usr/local/nginx/conf/conf.d/
[root@nginx conf.d]# ls
anti-leeching.conf.bak proxy.conf.bak ssl_https.conf.bak vhosts_status.conf.bak
php.conf setvariable.conf.bak vhosts.conf.bak WEBrewrite.conf.bak
[root@nginx conf.d]# mv php.conf p
php.conf proxy.conf.bak
[root@nginx conf.d]# mv php.conf php.conf.bak
[root@nginx conf.d]# vim tomcat.conf
1 server {
2 listen 80;
3 server_name app.xier.org;
4 location ~* \\.jsp$ {
5 proxy_pass http://172.25.254.10:8080;
6 }
7 }
tomcat服务器上:
先上传准备好的test.jsp文件到root的/usr/local/tomcat/webapps/ROOT/目录下
[root@nginx ~]# scp test.jsp root@172.25.254.10:/usr/local/tomcat/webapps/ROOT/
test.jsp 100% 968 2.1MB/s 00:00
[root@nginx ~]# scp test.jsp root@172.25.254.20:/usr/local/tomcat/webapps/ROOT/
[root@nginx ~]#
[root@nginx ~]# nginx -t
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
[root@nginx ~]# nginx -s reload
[root@nginx ~]#
测试:
在windows中设定app.xier.org的解析并在浏览器中访问app.xier.org/test.jsp
即在C:\\Windows\\System32\\drivers\\etc\\hosts中添加

2.tomcat负载均衡
[root@nginx ~]# cd /usr/local/nginx/conf/conf.d/
[root@nginx conf.d]# ll
总用量 36
-rw-r–r– 1 root root 377 2月 6 19:00 anti-leeching.conf.bak
-rw-r–r– 1 root root 568 2月 8 14:28 php.conf.bak
-rw-r–r– 1 root root 620 2月 6 19:00 proxy.conf.bak
-rw-r–r– 1 root root 233 2月 6 19:00 setvariable.conf.bak
-rw-r–r– 1 root root 349 2月 6 19:00 ssl_https.conf.bak
-rw-r–r– 1 root root 116 2月 13 23:58 tomcat.conf
-rw-r–r– 1 root root 652 2月 6 19:00 vhosts.conf.bak
-rw-r–r– 1 root root 205 2月 6 19:00 vhosts_status.conf.bak
-rw-r–r– 1 root root 636 2月 6 19:00 WEBrewrite.conf.bak
[root@nginx conf.d]# vim tomcat.conf
处理 /root/.vimrc 时发生错误:
第 3 行:
E488: Trailing characters: set relativenumber: #set relativenumber
请按 ENTER 或其它命令继续
1 #server {
2 # listen 80;
3 # server_name app.xier.org;
4 # location ~* \\.jsp$ {
5 # proxy_pass http://172.25.254.10:8080;
6 # }
7 #}
8 upstream tomcat {
9 hash $cookie_JSESSIONID;
10 server 172.25.254.10:8080;
11 server 172.25.254.20:8080;
12 }
13 server {
14 listen 80;
15 server_name app.xier.org;
16 location ~* \\.jsp$ {
17 proxy_pass http://tomcat;
18 }
19 }
[root@nginx conf.d]# nginx -t
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
[root@nginx conf.d]# nginx -s reload
测试
在windows中设定app.xier.org的解析并在两个浏览器中访问app.xier.org/test.jsp

四 tomcat+memcache实现session会话零丢失
Memcached介绍:
Memcached
只支持能序列化的数据类型,不支持持久化,基于
Key-Value的内存缓存系统,
可以通过做集群同步的方式, 让各memcached
服务器的数据进行同步,从而实现数据的一致性,即保证各
memcached
的数据是一样 的,即使有任何一台 memcached
发生故障,只要集群中有一台
memcached
可用就不会出现数据丢失,当其他memcached
重新加入到集群的时候
,
可以自动从有数据的
memcached
当中自动获取数据并 提供服务。
Memcached
官网:
http://memcached.org/
session共享服务器
msm介绍
msm
(
memcached session manager
)提供将
Tomcat
的
session
保持到
memcached
可以实现高可用。
项目早期托管在
google code,
目前在
Github
github
网站链接
:
https://github.com/magro/memcached-session-manager

原理:交叉保存
即
t1
和
m1
部署可以在一台主机上,
t2
和
m2
部署也可以在同一台。
当新用户发请求到
Tomcat1
时
, Tomcat1
生成
session
返回给用户的同时
,
也会同时发给
memcached2
备
份。即
Tomcat1 session
为主
session
,
memcached2 session
为备用
session
,使用
memcached
相当于
备份了一份
Session
如果
Tomcat1
发现
memcached2
失败
,
无法备份
Session
到
memcached2,
则将
Sessoin
备份存放在
memcached1
中
安装
参考链接
:
https://github.com/magro/memcached-session-manager/wiki/SetupAndConfiguration
将
spymemcached.jar
、
memcached-session-manage
、
kyro
相关的
jar
文件都放到
Tomcat
的
lib
目录
中,这个目录是
$CATALINA_HOME/lib/
,对应本次安装就是
/usr/local/tomcat/lib
1.tomcat加载模块
先上传jar.zip到RS1
[root@RS1 ~]#
[root@RS1 ~]# unzip jar.zip
Archive: jar.zip
creating: jar/
inflating: jar/asm-5.2.jar
inflating: jar/kryo-3.0.3.jar
inflating: jar/kryo-serializers-0.45.jar
inflating: jar/memcached-session-manager-2.3.2.jar
inflating: jar/memcached-session-manager-tc9-2.3.2.jar
inflating: jar/minlog-1.3.1.jar
inflating: jar/msm-kryo-serializer-2.3.2.jar
inflating: jar/objenesis-2.6.jar
inflating: jar/reflectasm-1.11.9.jar
inflating: jar/spymemcached-2.12.3.jar
[root@RS1 ~]# cd jar/
[root@RS1 jar]# cp * /usr/local/tomcat/lib/
[root@RS1 jar]# scp * root@172.25.254.20:/usr/local/tomcat/lib/
asm-5.2.jar 100% 52KB 37.8MB/s 00:00
kryo-3.0.3.jar 100% 279KB 62.2MB/s 00:00
kryo-serializers-0.45.jar 100% 123KB 54.2MB/s 00:00
memcached-session-manager-2.3.2.jar 100% 163KB 80.4MB/s 00:00
memcached-session-manager-tc9-2.3.2.jar 100% 11KB 20.7MB/s 00:00
minlog-1.3.1.jar 100% 5923 8.3MB/s 00:00
msm-kryo-serializer-2.3.2.jar 100% 37KB 35.4MB/s 00:00
objenesis-2.6.jar 100% 54KB 16.1MB/s 00:00
reflectasm-1.11.9.jar 100% 71KB 56.1MB/s 00:00
spymemcached-2.12.3.jar 100% 463KB 149.7MB/s 00:00
2.安装 memcache
[root@RS2 ~]# dnf install memcached -y
[root@RS1 ~]# dnf install memcached -y
[root@RS1 ~]# vim /etc/sysconfig/memcached
[root@RS2 ~]# vim /etc/sysconfig/memcached
PORT="11211"
USER="memcached"
MAXCONN="1024"
CACHESIZE="64"
OPTIONS="-l 0.0.0.0,::1"
//127.0.0.1 —0.0.0.0
[root@RS1 ~]# systemctl restart memcached.service
[root@RS1 ~]# netstat -antluple | grep memcached
tcp 0 0 0.0.0.0:11211 0.0.0.0:* LISTEN 987 40256 2298/memcached
tcp6 0 0 ::1:11211 :::* LISTEN 987 40257 2298/memcached
[root@RS1 ~]#
[root@RS2 ~]# systemctl restart memcached.service
[root@RS2 ~]# netstat -antluple | grep memcached
tcp 0 0 0.0.0.0:11211 0.0.0.0:* LISTEN 988 45515 5004/memcached
tcp6 0 0 ::1:11211 :::* LISTEN 988 45516 5004/memcached
[root@RS2 ~]#
3.tomcat配置
下载相关
jar
包
,
参考下面官方说明的下载链接(配置文件同样参考官方文档)
https://github.com/magro/memcached-session-manager/wiki/SetupAnd
vim /usr/local/tomcat/conf/context.xml
29 <Manager pathname="" />
30 –>
31 <Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
32 memcachedNodes="n1:172.25.254.10:11211,n2:172.25.254.20:11211"
33 failoverNodes="n2"
34 requestUriIgnorePattern=".*\\.(ico|png|gif|jpg|css|js)$"
35 transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory"
36 />
37
[root@RS1 ]# vim /usr/local/tomcat/conf/context.xml
<Context>
<!– Default set of monitored resources. If one of these changes, the –>
<!– web application will be reloaded. –>
<WatchedResource>WEB-INF/web.xml</WatchedResource>
<WatchedResource>WEB-INF/tomcat-web.xml</WatchedResource>
<WatchedResource>${catalina.base}/conf/web.xml</WatchedResource>
<!– Uncomment this to disable session persistence across Tomcat restarts –>
<!–
<Manager pathname="" />
–>
<Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
memcachedNodes="n1:172.25.254.10:11211,n2:172.25.254.20:11211"
failoverNodes="n1"
requestUriIgnorePattern=".*\\.(ico|png|gif|jpg|css|js)$"
transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory"
/>
</Context>
[root@RS2 ~]# vim /usr/local/tomcat/conf/context.xml
3 <Manager pathname="" />
2 –>
1 <Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
32 memcachedNodes="n1:172.25.254.10:11211,n2:172.25.254.20:11211"
1 failoverNodes="n2"
2 requestUriIgnorePattern=".*\\.(ico|png|gif|jpg|css|js)$"
3 transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory"
4 />
5 </Context>
[root@RS2 ~]# systemctl restart tomcat.service
[root@RS1 ~]# systemctl restart tomcat.service
测试
在一个浏览器中访问,提交数据后关闭当前服务器10,

[root@RS1 ~]# systemctl stop tomcat.service
跳转到20上后在提交查看数据是否还在

网硕互联帮助中心





评论前必须登录!
注册