1 需求背景
无论是在开发测试环境下还是在生产环境里面,都需要多台Tomcat来处理相同的业务或不同的业务,但Tomcat默认配置下仅支持一台启动。
1.1 如何启动多台Tomcat
分布式部署,利用多台物理服务器进行部署,每台服务器上面仅部署一个Tomcat。
单机多进程,利用一台性能较高的物理机部署,通过修改Tomcat的配置文件(一般至少修改端口号),从而达到启动多台Tomcat的方式。
单机多进程的方式一般适用于开发测试环境,很少会出现生产环境下,原因是某个Tomcat出了问题,排查需要一定的时间,生产环境下,单机部署的状态下,通常会考虑使用容器的方式来解决。
2 配置
Tomcat软件可以从官方获取,此文档中不再提供。
Tomcat版本:9.0
需要将Tomcat多解压出来几份,文档中采用的是3份,命名(可自定义)如下:
apache-tomcat-9.0.43_1
apache-tomcat-9.0.43_2
apache-tomcat-9.0.43_3
2.1 系统环境变量配置
windows+s输入env的方式来直接访问系统环境变量,如下图
点击环境变量,添加三个环境变量,如下表:
变量名 | 变量值(软件存放的根目录) |
---|---|
CATALINA_HOME_8081 | F:\software\Dev_Tools\tomcat\apache-tomcat-9.0.43_1 |
CATALINA_HOME_8082 | F:\software\Dev_Tools\tomcat\apache-tomcat-9.0.43_2 |
CATALINA_HOME_8083 | F:\software\Dev_Tools\tomcat\apache-tomcat-9.0.43_3 |
如图
2.2 端口修改
修改启动端口
进入到第一台的目录下,找到conf下的server.xml
第一个需要修改的端口号,在默认配置文件的第20行,将其内容中的port按照下面进行修改。
<Server port="8081" shutdown="SHUTDOWN">
第二个需要修改的端口号,在默认配置文件的第63行,将其内容中的port按照下面进行修改
<Connector connectionTimeout="20000" port="8181" protocol="HTTP/1.1" redirectPort="8443"/>
进入到第二台的目录下,找到conf下的server.xml
第一个需要修改的端口号,在默认配置文件的第20行,将其内容中的port按照下面进行修改。
<Server port="8082" shutdown="SHUTDOWN">
第二个需要修改的端口号,在默认配置文件的第63行,将其内容中的port按照下面进行修改
<Connector connectionTimeout="20000" port="8282" protocol="HTTP/1.1" redirectPort="8443"/>
进入到第三台的目录下,找到conf下的server.xml
第一个需要修改的端口号,在默认配置文件的第20行,将其内容中的port按照下面进行修改。
<Server port="8083" shutdown="SHUTDOWN">
第二个需要修改的端口号,在默认配置文件的第63行,将其内容中的port按照下面进行修改
<Connector connectionTimeout="20000" port="8383" protocol="HTTP/1.1" redirectPort="8443"/>
2.3 脚本参数修改
三个Tomcat都需要修改的脚本名称,三个脚本都在Tomcat的bin目录下
startup.bat
shutdown.bat
catalina.bat
其需要修改的内容是,脚本中的CATALINA_HOME,需要根据Tomcat的配置环境变量名称进行修改。修改的过程,建议使用文本编辑器(如NotePad++)处理。
通过文本编辑器打开第一台Tomcat的startup.bat、shutdown.bat、catalina.cat全部进行替换。
CATALINA_HOME
# 替换为
CATALINA_HOME_8081
通过文本编辑器打开第二台Tomcat的startup.bat、shutdown.bat、catalina.cat全部进行替换。
CATALINA_HOME
# 替换为
CATALINA_HOME_8082
通过文本编辑器打开第三台Tomcat的startup.bat、shutdown.bat、catalina.cat全部进行替换。
CATALINA_HOME
# 替换为
CATALINA_HOME_8083
2.4 启动测试
进入到Tomcat的bin目录下,双击startup.bat,然后通过浏览器访问。
启动第一台后,耐心等待启动完成,通过浏览器访问第一台Tomcat
localhost:8181
启动第二台后,耐心等待启动完成,通过浏览器访问第二台Tomcat
localhost:8282
启动第三台后,耐心等待启动完成,通过浏览器访问第三台Tomcat
localhost:8383
3 Nginx反向代理
由于多台的Tomcat必然会出现端口的争夺问题,那么通过Nginx反向代理Tomcat后,可以实现一个端口共同使用的效果。用户访问的时候也不需要考虑访问的是哪台Tomcat上的资源,以此实现负载均衡的效果。
3.1 Nginx入门
把nginx的压缩包解压之后(windows系统环境)。
然后去到该软件的conf目录下,找到nginx.conf配置文件。
将配置文件中的端口号进行修改:
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
server {
listen 8888;
server_name localhost;
location / {
root html;
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}
双击nginx.exe文件,此程序启动之后不会有任何的界面提供,可以观察到屏幕闪烁一下。
通过浏览器访问localhost:8888
3.2 Nginx代理单台Tomcat
需要修改配置文件
建议将默认的配置文件拷贝一份作为备份。
可以先通过重新加载配置文件的方式尝试更新服务
nginx.exe -s reload
刷新浏览器后即可看到Nginx代理的Tomcat
然后把使用8181端口的Tomcat手动停止发现Nginx页面出现了502 Bad Gateway
3.3 Nginx负载均衡
通过反向代理多台Tomcat来实现负载均衡的效果,其目的是,当有其中任何一台Tomcat停机时,甚至到只剩下一台时,都不会影响服务的运行。
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
upstream tomcat_servers {
# 因当前环境中的tomcat是一台物理机中通过修改端口来启动的,
# 未来在工作中,多台Tomcat必然是在物理机中部署的,需要修改的内容是localhost及端口号
# 如:
# server 10.172.121.111:8080
# server 10.172.121.112:8080
server localhost:8181;
server localhost:8282;
server localhost:8383;
}
server {
listen 8888;
location / {
proxy_pass http://tomcat_servers;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
}
修改好之后,通过reload的方式重新加载配置文件中的内容。