Tomcat集群的Debug方法

前言

在使用Tomcat集群的时候,有时我们想在测试环境中定位一个问题不得不通过分析代码,在多个地方添加和分析日志来一遍一遍的重复确定。这个时候,如果能对某一个节点进行debug调试的话,定位问题就相当easy了。当然,如果问题比较简单,一眼能看出来,也不需要debug。至于Nginx的安装,搜一下教程即可。

模拟环境如下:

  • 本机Windows,使用的无线网络
  • 服务器CentOS
  • 两个Tomcat及以上
  • 一个Nginx
  • 两个IDEA Project
实现过程
配置hosts

一般情况下,我们的测试环境都是有虚拟域名的,并且本机与测试环境的linux服务器都是分开的。这里为了模拟,需要在本机和服务器均配置hosts。原理就是:浏览器地址栏输入虚拟域名 → 查找本机hosts配置的该虚拟域名和对应的IP → 指向Nginx所在的服务器 → Nginx通过域名做负载均衡 → 查找服务器hosts配置的域名和IP → 转发到本机tomcat进行debug调试。

本机hosts目录为:

C:\Windows\System32\drivers\etc

将IP地址指向服务器,配置如下:

192.168.20.138 www.lcmall.com

服务器hosts目录为:

/etc/hosts

将IP地址指向本机,CentOS7配置完毕hosts之后,如果不起作用,需要执行以下命令:

/etc/init.d/network restart

如果还不生效,则只能reboot了,hosts配置如下:

192.168.16.159 www.lcmall.com
配置和启动Nginx

Nginx默认配置文件的路径为

/usr/local/nginx/conf

因为Nginx可能需要配置很多域名下的不同负载均衡,创建一个vhost文件夹,并将关于这些域名的配置文件统一归置到这里,如:

www.lcmall.com.conf

配置内容为:

#负载均衡
upstream lcmallnginx{
  #通过权重控制访问流量
  server www.lcmall.com:8080 weight=1;
  server www.lcmall.com:7080 weight=1;
}

server {
    listen 80;
    autoindex on;
    #监控本机域名
    server_name www.lcmall.com;
    access_log /usr/local/nginx/logs/access.log combined;
    index index.html index.htm index.jsp index.php;
    location / {
    	#反向代理
        proxy_pass http://lcmallnginx;
    }
}

然后在nginx.conf中引用这些配置文件:

include vhost/*.conf;
配置和启动Tomcat

首先需要两份代码,使用两个IDEA的Project窗口打开,这个就不演示了,下面看tomcat的配置。

  • 配置第1个Tomcat

选择IDEA第1个Project右上角工具栏中的的Add Configurations,如下图所示操作过程:
在这里插入图片描述在这里插入图片描述
配置好第1个Tomcat1之后,添加第2个Tomcat2,这里需要注意的是,Tomcat1与Tomcat2不能是同一个实例,可以将Tomcat1路径中的Tomcat版本复制一份,也可以使用另外一个版本。

然后添加要部署的war包,操作如下图:
在这里插入图片描述

  • 配置第2个Tomcat

配置好第1个project之后,第2个project就简单了,同样类似上面的操作,不过不用设置Configure那一步了,将Name命名为Tomcat2,Application Server一栏选择Tomcat2,然后更改端口号,如下图:
在这里插入图片描述
最后配置需要部署的war包,这样两个project的Tomcat就配置完毕了。

  • 启动Tomcat

    对于多个Tomcat的调试,最好将Nginx的负载均衡第2个节点给注掉(修改配置文件之后,需要重启下Nginx),然后确保第一个Tomcat在debug的模式下断点能用。测试通过之后,再启动第2个。否则全部起来之后,没有起到应有的作用,还得重启多个Tomcat。

踩的坑
  • Nginx无法访问主机

    在浏览器地址栏输入域名之后,响应好久才返回 502 Bad Gateway,通过查看 /usr/local/nginx/logs/ 下的error.log 发现如下问题:

    [error] 7086#0: *5 connect() failed (111: Connection refused) while connecting to upstream, client: 192.168.20.1, server: www.lcmall.com, request: "GET / HTTP/1.1", upstream: "http://192.168.16.177:8080/", host: "www.lcmall.com"
    

    也就是说在NAT模式下,虚拟机无法连接192.168.16.177这个主机IP,我记得当时配hosts的时候是先查看电脑的IP,然后复制过去的,按理说不应该存在这个问题啊,难道说主机IP会一直变化吗?当把无线网络断开并重连之后发现确实变了。。。没办法,只能重新配置一下服务器的hosts。

  • Tomcat最好使用干净的,事先启动并能够访问到主页面,排除干扰因素

  • 在配置tomcat实例的时候,也就是配置Application Servers的时候,如果没有添加第2个Tomcat2,在第2个Project中使用了第2个Tomcat实例,第1个Project也会被更改为第2个Tomcat实例。

总结

Tomcat集群调试,Nginx负载均衡配置(还有其他的方式,如轮询、IP Hash等),之前都没有亲自操作过。当真正实现了的时候,还是很开心的。学习的收获有多有少,但过程却不可或缺。当一天天重复造轮子的时候,我们就已经进入了一个舒适区,适当的给自己加些压力,每天都比前一天多点知识储备,相信未来还是会有很大帮助的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值