一.多实例部署
生产环境中,通过ps -ef | grep tomcat查看,会发现有多个tomcat实例在运行,除了主站点之外,后期有定制的项目,需要二次开发的内容,那就可以再起一些实例。除了原有的tomcat项目,再增加2个,分别为tomcat_8081和tomcat_8082,只需要改动端口,还用原来的JDK。
1.tomcat准备
这样会有一个问题,当服务器重启后,tomcat这个项目通过systemd管理,并且加入了开机自启,但是tomcat_8081和tomcat_8082并不会开机自启,也需要配置systemd,加入开机自启动。
添加测试文件到新的站点
浏览器访问测试
http://192.168.77.142:8081/test.jsp
http://192.168.77.142:8082/test.jsp
二.tomcat监控
开启tomcat监控功能,就可以通过zabbix监控或jconsole监控,生产要使用,要严格限制,如防火墙限制访问、使用更复杂的密码和用户名、或者在JMX连接上使用SSL/TLS来增强安全性。
1.修改catalina.sh配置文件
参数解释
-Dcom.sun.management.jmxremote #jmx remote 开启tomcat远程监控功能
-Dcom.sun.management.jmxremote.port=12345 #指定端口一般为 12345 还有2个随机端口
-Dcom.sun.management.jmxremote.authenticate=true #auth 认证 是否开启远程监控认证(用户名 密码)
-Dcom.sun.management.jmxremote.password.file=/app/tools/tomcat/conf/jmxremote.password #(用户名 密码)
-Dcom.sun.management.jmxremote.access.file=/app/tools/tomcat/conf/jmxremote.access#(用户名 权限)
-Dcom.sun.management.jmxremote.ssl=false #是否开启https
-Djava.rmi.server.hostname=192.168.77.142" #tomcat监听的ip地址 bind,生产环境 写内网ip
在 tomcat 8.5.x 配置开启功能 修改 catalina.sh 要写成一行 或 加上 \ (续行)
2.电脑安装JDK,使用jconsole监控
这里安装到了C:\Program Files\Java\jdk1.8.0_31\bin\jconsole.exe,运行jconsole.exe
输入服务器IP:端口,自定义的用户名和口令后
3.zabbix监控tomcat
拓扑图
配置---主机---添加主机
模版选自带的Apache Tomcat JMX
不太明白为啥提示Runtime: JVM is not reachable?电脑使用jconsole测试可以连接。在宿主机上安装JDK,使用jconsole也可以连接。因为轮训默认StartJavaPollers=0,未启用JavaGateway。
解决:
其实,在一开始部署docker时,可以直接设置环境变量即可,后期无需修改
zabbix通过docker部署,zabbix_server.conf配置文件存在zabbix-server-mysql容器中,
其他报错
报错1active check configuration update from host [web01] started to fail
zabbix-server宿主机反而要开启防护墙,关闭报错
2024/07/14 12:47:13.131848 [101] cannot receive data from [192.168.77.130:10051]: Cannot read message: 'read tcp 192.168.77.142:45262->192.168.77.130:10051: i/o timeout'
2024/07/14 12:47:13.131915 [101] active check configuration update from host [web01] started to fail
解决:
zabbix-server宿主机开启防火墙后,连接正常;
2024/07/14 12:47:19.908686 [101] active check configuration update from [192.168.77.130:10051] is working again
报错2Runtime: JVM is not reachable
解决:
被监控tomcat没有开启,开启systemctl start tomcat
开启zabbix_java_gateway并设置轮训数量
报错3 docker-server的宿主机中zabbix-java-gateway容器日志报错bad protocol header
2024-07-14 04:49:41.331 [main] INFO com.zabbix.gateway.JavaGateway - listening on 0.0.0.0/0.0.0.0:10052
2024-07-14 04:53:02.521 [pool-2-thread-1] WARN com.zabbix.gateway.SocketProcessor - error processing request: bad protocol header: 53 53 48 2D 32
解决:
不用管,是因为我在客户端测试宿主机10052端口的报错,ssh -vp 10052 192.168.77.130