当前位置: 首页 > news >正文

在Linux中部署tomcat

tomcat

tomcatA

[root@tomcatA ~]# dnf install java-1.8.0-openjdk.x86_64 -y#从网上下载tomcat包,然后解包即可
[root@tomcatA ~]# ls
anaconda-ks.cfg  apache-tomcat-9.0.107.tar.gz
[root@tomcatA ~]# tar zxf apache-tomcat-9.0.107.tar.gz -C /usr/local/
[root@tomcatA ~]# cd /usr/local/#重命名目录名(不是必须)
[root@tomcatA local]# mv apache-tomcat-9.0.107/ tomcat
[root@tomcatA local]# cd tomcat/
[root@tomcatA tomcat]# ls
bin  BUILDING.txt  conf  CONTRIBUTING.md  lib  LICENSE  logs  NOTICE  README.md  RELEASE-NOTES  RUNNING.txt  temp  webapps  work
[root@tomcatA tomcat]# cd bin/
[root@tomcatA bin]# ls
bootstrap.jar       ciphers.sh                    daemon.sh     setclasspath.bat  startup.sh            version.bat
catalina.bat        commons-daemon.jar            digest.bat    setclasspath.sh   tomcat-juli.jar       version.sh
catalina.sh         commons-daemon-native.tar.gz  digest.sh     shutdown.bat      tomcat-native.tar.gz
catalina-tasks.xml  configtest.bat                makebase.bat  shutdown.sh       tool-wrapper.bat
ciphers.bat         configtest.sh                 makebase.sh   startup.bat       tool-wrapper.sh
[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 80
tcp6       0      0 127.0.0.1:8005          :::*                    LISTEN      0          58326      30388/java
tcp6       0      0 :::8080                 :::*                    LISTEN      0          58314      30388/java

测试访问

image-20250730111326445

tomcatB

[root@tomcatB ~]# ls
anaconda-ks.cfg  apache-tomcat-9.0.107.tar.gz
[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  etc    include  lib64    sbin   src
bin                    games  lib      libexec  share
[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
[root@tomcatB local]# cd tomcat/
[root@tomcatB tomcat]# cd bin/
[root@tomcatB 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@tomcatB bin]# ss -tunlp | grep 80
tcp   LISTEN 0      1      [::ffff:127.0.0.1]:8005            *:*    users:(("java",pid=30153,fd=67))
tcp   LISTEN 0      100                     *:8080            *:*    users:(("java",pid=30153,fd=57))

image-20250730111347345

制作启动文件

[root@tomcatA/B ~]# vim /usr/local/tomcat/conf/tomcat.conf
JAVA_HOME=/etc/alternatives/jre
[root@tomcatA/B ~]# 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[root@tomcatA ~]# useradd -s /bin/false -M tomcat
[root@tomcatB ~]# useradd -s /sbin/nologin -M tomcat
[root@tomcatA ~]# chown tomcat.tomcat -R /usr/local/tomcat/[root@tomcatA/B ~]# cd /usr/local/tomcat/bin/
[root@tomcatA/B bin]# ./shutdown.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:[root@tomcatA/B bin]# netstat -antlupe | grep java
[root@tomcatA ~]# systemctl enable --now tomcat
Created symlink /etc/systemd/system/multi-user.target.wants/tomcat.service → /usr/lib/systemd/system/tomcat.service.
[root@tomcatA ~]# systemctl status tomcat.service
● tomcat.service - TomcatLoaded: loaded (/usr/lib/systemd/system/tomcat.service; enabled; preset: disabled)Active: active (running) since Wed 2025-07-30 11:27:04 CST; 9s agoProcess: 30951 ExecStart=/usr/local/tomcat/bin/startup.sh (code=exited, status=0/SUCCESS)Main PID: 30960 (java)Tasks: 32 (limit: 22964)Memory: 110.2MCPU: 1.751sCGroup: /system.slice/tomcat.service└─30960 /etc/alternatives/jre/bin/java -Djava.util.logging.config.file=/usr/local/tomcat/conf/logging.properties -Djava.uti>Jul 30 11:27:04 tomcatA systemd[1]: Starting Tomcat...
Jul 30 11:27:04 tomcatA startup.sh[30951]: Tomcat started.
Jul 30 11:27:04 tomcatA systemd[1]: Started Tomcat.
[root@tomcatB bin]# systemctl enable tomcat.service --now
Created symlink /etc/systemd/system/multi-user.target.wants/tomcat.service → /usr/lib/systemd/system/tomcat.service.
[root@tomcatB bin]# systemctl status tomcat.service
● tomcat.service - TomcatLoaded: loaded (/usr/lib/systemd/system/tomcat.service; enabled; preset: disabled)Active: active (running) since Wed 2025-07-30 11:28:26 CST; 6s agoProcess: 30615 ExecStart=/usr/local/tomcat/bin/startup.sh (code=exited, status=0/SUCCESS)Main PID: 30623 (java)Tasks: 32 (limit: 22964)Memory: 109.2MCPU: 1.842sCGroup: /system.slice/tomcat.service└─30623 /etc/alternatives/jre/bin/java -Djava.util.logging.config.file=/usr/local/tomcat/conf/logging.properties -Djava.util.logging.manager>Jul 30 11:28:26 tomcatB systemd[1]: Starting Tomcat...
Jul 30 11:28:26 tomcatB startup.sh[30615]: Tomcat started.
Jul 30 11:28:26 tomcatB systemd[1]: Started Tomcat.

单机

[root@nginx ~]# systemctl status firewalld.service
[root@tomcatB ~]# systemctl disable firewalld --now
[root@tomcatA ~]# systemctl disable firewalld --now
[root@nginx ~]# vim /etc/nginx/conf.d/vhost.conf
server {listen      80;server_name www.vb.org;location ~ \.jsp$ {proxy_pass http://172.25.254.10:8080;}}

image-20250730122751580

image-20250730122840871

image-20250730123714822

image-20250730123722810

多机负载均衡

ip_hash

虽然对于ip进行哈希也能做到负载均衡,但是要考虑到对ip进行哈希时,可能存在由一个路由上携带同一ip集中统一多用户需求

hash $cookie_JSESSIONID — 基于cookie值的会话保持

所以对于ip哈希进行改进,我们可以观察到cookie值是会统一发放的,而且是唯一的,并且我们还可以结合JSESSIONID进行会话绑定。

[root@nginx ~]# vim /etc/nginx/conf.d/vhost.conf
upstream tomcat{hash $cookie_JSESSIONID;server 172.25.254.10:8080;server 172.25.254.20:8080;
}
server {listen      80;server_name www.vb.org;location ~ \.jsp$ {#proxy_pass http://172.25.254.10:8080;proxy_pass http://tomcat;}
}

image-20250730123109774

image-20250730123256061

[root@tomcatA/B ~]# unzip jar.zip
Archive:  jar.zipcreating: jar/inflating: jar/asm-5.2.jarinflating: jar/kryo-3.0.3.jarinflating: jar/kryo-serializers-0.45.jarinflating: jar/memcached-session-manager-2.3.2.jarinflating: jar/memcached-session-manager-tc9-2.3.2.jarinflating: jar/minlog-1.3.1.jarinflating: jar/msm-kryo-serializer-2.3.2.jarinflating: jar/objenesis-2.6.jarinflating: jar/reflectasm-1.11.9.jarinflating: jar/spymemcached-2.12.3.jar
[root@tomcatA/B ~]# mv jar/* /usr/local/tomcat/lib/
[root@tomcatA/B ~]# systemctl status tomcat.service

image-20250730145301654

[root@tomcatA/B ~]# systemctl restart tomcat.service
[root@tomcatA/B ~]# systemctl status tomcat.service

image-20250730145412862

image-20250730145717083

交叉存储memcache

解决当用户正在访问时,用户的session绑定的服务器下线时,避免在nginx调配去另一服务器时,用户提交的表格信息等丢失或清空。

在tomcatA/B主机上

都要下载memcached

并且配置memcached的配置文件

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

在tomcatA服务器1中配置

[root@tomcatA ~]# 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>

image-20250730153828319

[root@tomcatA ~]# vim /usr/local/tomcat/conf/context.xml

image-20250730151356249

我们关闭10上的tomcat来模拟10主机下线

然后当我们在浏览器继续提交表格信息时,会自动切换到20主机上并且还会读取到之前用户填写的信息。

image-20250730151500107

"
requestUriIgnorePattern=“.*.(ico|png|gif|jpg|css|js)$”
transcoderFactoryClass=“de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory”
/>


[外链图片转存中...(img-i4iDomgh-1754927283647)]

[root@tomcatA ~]# vim /usr/local/tomcat/conf/context.xml

[外链图片转存中...(img-zBcHB7y2-1754927283647)]我们关闭10上的tomcat来模拟10主机下线然后当我们在浏览器继续提交表格信息时,会自动切换到20主机上并且还会读取到之前用户填写的信息。[外链图片转存中...(img-KJjgsubf-1754927283647)]
http://www.lryc.cn/news/617154.html

相关文章:

  • MyBatis高级特性与性能优化:从入门到精通的实战指南
  • NEON性能优化总结
  • EXISTS 替代 IN 的性能优化技巧
  • Unity大型场景性能优化全攻略:PC与安卓端深度实践 - 场景管理、渲染优化、资源调度 C#
  • C# 异步编程(BeginInvoke和EndInvoke)
  • openEuler、 CentOS、Ubuntu等 Linux 系统中,Docker 常用命令总结
  • Selenium经典面试题 - 多窗口切换解决方案
  • 深入解析游戏引擎(OGRE引擎)通用属性系统:基于Any类的类型安全动态属性设计
  • 如何在 Ubuntu 24.04 LTS Linux 上安装和使用 Flatpak
  • 游戏引擎(Unreal Engine、Unity、Godot等)大对比:选择最适合你的工具
  • [Ubuntu] VNC连接Linux云服务器 | 实现GNOME图形化
  • 从零开始的云计算生活——项目实战容器化
  • Ubuntu 22.04 离线环境下 Python 包与 FFmpeg 安装全攻略​
  • Python 爬虫:Selenium 自动化控制(Headless 模式 / 无痕浏览)
  • 使用Windbg分析多线程死锁项目实战问题分享
  • 从零开始的云计算生活——第四十一天,勇攀高峰,Kubernetes模块之单Master集群部署
  • 数据结构 双链表与LinkedList
  • 云原生环境Prometheus企业级监控
  • 浅谈 LangGraph 子图流式执行(subgraphs=True/False)模式
  • redis(2)-java客户端使用(IDEA基于springboot)
  • Selenium动态元素定位
  • glide缓存策略和缓存命中
  • 探秘华为:松山湖的科技与浪漫之旅
  • 打烊:餐厅开业前的“压力测试”
  • 《汇编语言:基于X86处理器》第13章 高级语言接口(1)
  • 前端实现 MD5 + AES 加密的安全登录请求
  • JVM基础【Java】
  • leetcode-hot-100 (图论)
  • 心理咨询|学生心理咨询评估系统|基于Springboot的学生心理咨询评估系统设计与实现(源码+数据库+文档)
  • python面向对象设计模式