云计算教程之LNMTTomcat集群

举报
tea_year 发表于 2024/08/21 21:34:40 2024/08/21
【摘要】 Tomcat集群二课程目标熟练掌握tomcat项目部署熟练LNMT架构的搭建一、部署项目1.1 启动程序 nginxWebUI-3.4.0.jar java -jar -Dfile.encoding=UTF-8 nginxWebUI-4.2.2.jar --server.port=8848 > /dev/null & 占用端口, 默认以8080端口启动 项目配置文件目录,存放数据库文件,证...

Tomcat集群二

课程目标

  • 熟练掌握tomcat项目部署

  • 熟练LNMT架构的搭建

一、部署项目

1.1 启动程序 nginxWebUI-3.4.0.jar

  java -jar -Dfile.encoding=UTF-8 nginxWebUI-4.2.2.jar --server.port=8848 > /dev/null &
 占用端口, 默认以8080端口启动
 项目配置文件目录,存放数据库文件,证书文件,
 日志等, 默认为/app/code/nginxWebUI/
 注意Linux命令最后加一个&号, 表示项目后台运行

1.2 ZrLog项目

1 前台: http: //zrlog.yunhelinux.cn:8080/zrlog/

2 后台管理: http: //zrlog.yunhelinux.cn:8080/zrlog/admin/

二、对接Nginx

2.1 nginx代理功能

 #在web03做tomcat 项目的代理
 #在/etc/nginx/conf.d/创建zrlog.linux.cn.conf文件,代码如下:
 ​
 server{
         listen 80;
         server_name zrlog.linux.cn;
         error_log /var/log/nginx/zrlog.error.log notice;
         access_log /var/log/nginx/zrlog.access.log main;
 ​
         location /{
                 proxy_pass http://127.0.0.1:8080;
                 proxy_set_header Host $http_host;
                 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
         }
 }
 ​
 #完毕后,检查代码
 nginx -t
 #配置/etc/hosts
 192.168.3.9 zrlog.linux.cn;
 #重启nginx
 systemctl restart nginx


 #在windows下的hosts修改文件
 192.168.3.9 zrlog.linux.cn

2.2 动静分离

         location ~* \.(html|jpg|jpeg|png|js|css)$ {
                 expires 10d;
                 proxy_pass http://127.0.0.1:8080;
                 proxy_set_header Host $http_host;
                 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;               
         }

2.3 负载均衡

随着业务的发展,单实例服务已经不能够满足业务使用需要

pv 页面访问数量

qps 每秒查询次数 并发量

DAU 每日活跃用户数

单实例无法满足,扩容为多实例实施步骤:

①复制虚拟机,多实例

两台tomcat里项目里的内容要一致

在server04上配置和server03一样的实现:

1>建立项目文件夹目录,绑定host主机域名

 [root@web03 logs]# vim /apps/tomcat/conf/server.xml
       <Host name="zrlog.xuzhichao.com"  appBase="/data/tomcat/zrlog"
             unpackWARs="true" autoDeploy="true">
         <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
                prefix="zrlog_access_log" suffix=".txt"
                pattern="%{X-Forwarded-For}i %l %u %t %r %s %b %{User-Agent}i %{Referer}i" />  <==定义日志格式,显示客户端真实IP地址
       </Host> 

②配置nginx负载均衡**

在lb01上进行配置

 upstream tomcat{
         server 192.168.3.9:8080;
         server 192.168.3.10:8080;
 }
 ​
 server{
         listen 80;
         server_name zrlog.linux.cn;
         error_log /var/log/nginx/zrlog.error.log notice;
         access_log /var/log/nginx/zrlog.access.log main;
 ​
         location ~* \.(html|jpg|jpeg|png|js|css)$ {
                 expires 10d;
                 proxy_pass http://tomcat;
                 proxy_set_header Host $http_host;
                 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;           }
 ​
         location /{
                 proxy_pass http://tomcat;
                 proxy_set_header Host $http_host;
                 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
         }
 }
 ​


三、监控功能

3.1) 概述

未来通过各种监控工具(Zabbix/Grafana/Prometheus/....),监控Tomcat/java.

需要我们开启java远程监控功能(JMX remote)

2) 步骤

tomcat配置中修改tomcat启动的选项.开启jmx远程监控功能.

交给zbx就可以了(使用windows jdk连接tomcat)

*开启远程监控功能选项*
-Dcom.sun.management.jmxremote 开启远程监控功能
-Dcom.sun.management.jmxremote.port=12345 指定端口
-Dcom.sun.management.jmxremote.authenticate=false 关闭认证功能
-Dcom.sun.management.jmxremote.ssl=false 关闭ssl加密功能
-Djava.rmi.server.hostname=10.0.0.9 写上本地网卡的ip,监听的地址.

3.1 java监控命令

jps jps命令,只显示java进程. 类似于 ps -ef |grep java

jstack

jstack查看java进程内部信息,线程信息.

进程: 占空间,占系统资源,厂房.

线程: 厂房里面的工人,处理与用户的请求.

需要代码使用多线程技术. 通过ps aux 查看进程是否支持线程(是否使用多线程技术)

jmap

jmap查看或导出jvm信息 查看jvm使用情况

jmap -heap java-pid 导出java进程的jvm内存使用情况.
jmap -heap 130741

#导出文件到家目录下
jmap -dump:format=b,file=/root/8081.hprof 130741

[root@web03 bin]# ll -h /root
总用量 27M
-rw-------  1 root root  27M 8月  21 00:47 8081.hprof

mat分析工具

jvm内存映像文件,在windows/mac/ubuntu系统下通过MemoryAnalyzer Tool (MA/MAT) 1. 需要jdk环境

  1. 软件包解压即可使用

  2. MemoryAnalyzer.exe(英文目录 )


3.2 查看进程

top命令找出消耗CPU高的Java进程及其线程id: 开启线程的显示模式(top -H,或者打开top后按H)。 按cpu使用率排序(top缺省就是按CPU的使用率降序)。 记下Java进程id及其CPU高的线程id。

#1.安装下载
wget --no-check-certificate https://github.com/oldratlee/useful-scripts/archive/release.zip

#2.解压
unzip release.zip 

#.3查看
sh show-busy-java-threads.sh
# 从所有运行的Java进程中找出最消耗CPU的线程(缺省5个),打印出其线程栈
show-busy-java-threads

# 缺省会自动从所有的Java进程中找出最消耗CPU的线程,这样用更方便
# 当然你可以手动指定要分析的Java进程Id,以保证只会显示你关心的那个Java进程的信息
show-busy-java-threads -p <指定的Java进程Id>

show-busy-java-threads -c <要显示的线程栈数>

# 多次执行
show-busy-java-threads <重复执行的间隔秒数> [<重复执行的次数>]

# 记录到文件以方便回溯查看
show-busy-java-threads -a <运行输出的记录到的文件>

# 指定jstack输出文件的存储目录,方便记录以后续分析
show-busy-java-threads -S <存储jstack输出文件的目录>

故障排查流程

四、tomcat优化

安全优化

性能优化

jvm优化

1 安全优化 2 性能优化

io模型优化.线程数量,压缩的配置.

1) io模型优化

类似于nginx同步,异步模型.

决定了tomcat如何处理数据

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。