在Linux环境中使用Nginx作为反向代理来负载均衡多个Tomcat实例是一种常见的企业级部署方案。这种架构通常包含以下组件:
在/etc/nginx/nginx.conf
或/etc/nginx/conf.d/
下的配置文件中添加:
upstream tomcat_cluster {
# 配置负载均衡策略
least_conn; # 最少连接策略
# ip_hash; # 基于IP的会话保持
# Tomcat实例列表
server 192.168.1.101:8080 weight=3;
server 192.168.1.102:8080 weight=2;
server 192.168.1.103:8080 backup; # 备用服务器
}
server {
listen 80;
server_name yourdomain.com;
location / {
proxy_pass http://tomcat_cluster;
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_connect_timeout 5s;
proxy_read_timeout 60s;
proxy_send_timeout 30s;
}
}
在每个Tomcat实例的server.xml
中确保配置一致:
<!-- 启用集群功能 -->
<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"/>
<!-- 配置会话复制 -->
<Manager className="org.apache.catalina.ha.session.DeltaManager"
expireSessionsOnShutdown="false"
notifyListenersOnReplication="true"/>
推荐配置示例(使用Redis):
<Manager className="org.apache.catalina.session.PersistentManager"
saveOnRestart="true">
<Store className="org.apache.catalina.session.RedisStore"
host="redis.server"
port="6379"
password="yourpassword"
database="0"
timeout="2000"/>
</Manager>
Nginx调优:
Tomcat调优:
<Connector port="8080" protocol="HTTP/1.1"
maxThreads="200"
minSpareThreads="25"
acceptCount="100"
connectionTimeout="20000"/>
监控方案:
ngx_http_stub_status_module
top
和vmstat
监控系统资源考虑使用Ansible、Docker或Kubernetes来管理集群部署,例如Docker Compose示例:
version: '3'
services:
nginx:
image: nginx:latest
ports:
- "80:80"
- "443:443"
volumes:
- ./nginx.conf:/etc/nginx/nginx.conf
depends_on:
- tomcat1
- tomcat2
tomcat1:
image: tomcat:9.0
environment:
- JAVA_OPTS=-Djava.net.preferIPv4Stack=true -Djava.net.preferIPv4Addresses=true
volumes:
- ./app.war:/usr/local/tomcat/webapps/ROOT.war
tomcat2:
image: tomcat:9.0
environment:
- JAVA_OPTS=-Djava.net.preferIPv4Stack=true -Djava.net.preferIPv4Addresses=true
volumes:
- ./app.war:/usr/local/tomcat/webapps/ROOT.war
这种架构提供了高可用性、可扩展性和灵活性,适用于大多数企业级Java Web应用场景。