AlexRomeo
发布于 2024-06-04 / 253 阅读
1
0

Windows多台Tomcat的部署及Nginx的使用

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的方式来直接访问系统环境变量,如下图

image-20240604133626049

点击环境变量,添加三个环境变量,如下表:

变量名 变量值(软件存放的根目录)
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

如图

image-20240604133842046

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

image-20240604141018709

启动第二台后,耐心等待启动完成,通过浏览器访问第二台Tomcat

localhost:8282

image-20240604141233678

启动第三台后,耐心等待启动完成,通过浏览器访问第三台Tomcat

localhost:8383

image-20240604141411459

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

image-20240604152822843

然后把使用8181端口的Tomcat手动停止发现Nginx页面出现了502 Bad Gateway

image-20240604152948032

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的方式重新加载配置文件中的内容。


评论