CentOS 上实现 Tomcat 负载均衡的实用方案
一 架构与准备
firewall-cmd --add-port=8080/tcp --permanent && firewall-cmd --reload。如使用 SELinux,遇到 502 可临时放行网络访问:setsebool -P httpd_can_network_connect 1。以上为常见做法,便于快速打通网络通路。二 方案一 Nginx 反向代理负载均衡
sudo yum install -y epel-releasesudo yum install -y nginxsudo systemctl enable --now nginx/etc/nginx/conf.d/tomcat_lb.confupstream tomcat_cluster {
# 示例:两台 Tomcat
server 192.168.10.11:8080 weight=1 max_fails=3 fail_timeout=30s;
server 192.168.10.12:8080 weight=1 max_fails=3 fail_timeout=30s;
# 可选:ip_hash; # 会话保持(基于客户端 IP)
}
server {
listen 80;
server_name your.domain.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_set_header X-Forwarded-Proto $scheme;
proxy_connect_timeout 5s;
proxy_send_timeout 10s;
proxy_read_timeout 10s;
}
# 可选:简单动静分离
location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ {
root /opt/static-resources;
expires 7d;
}
}
sudo nginx -t && sudo systemctl reload nginx三 方案二 Apache HTTP Server + mod_jk 负载均衡
sudo yum install -y httpdsudo yum groupinstall -y "Development Tools";sudo yum install -y httpd-devel apr-devel apr-util-develcd /usr/local/src
wget https://mirrors.bfsu.edu.cn/apache/tomcat/tomcat-connectors/jk/tomcat-connectors-1.2.48-src.tar.gz
tar xf tomcat-connectors-1.2.48-src.tar.gz
cd tomcat-connectors-1.2.48-src/native
./configure --with-apxs=/usr/bin/apxs
make && sudo make install
LoadModule jk_module modules/mod_jk.so
JkWorkersFile /etc/httpd/conf/workers.properties
JkMount /* controller
worker.list=controller
worker.controller.type=lb
worker.controller.balanced_workers=tomcat1,tomcat2
worker.controller.sticky_session=1
worker.tomcat1.type=ajp13
worker.tomcat1.host=192.168.10.11
worker.tomcat1.port=8009
worker.tomcat1.lbfactor=1
worker.tomcat2.type=ajp13
worker.tomcat2.host=192.168.10.12
worker.tomcat2.port=8009
worker.tomcat2.lbfactor=1
<Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat1">
<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"/>
<Manager className="org.apache.catalina.ha.session.DeltaManager"
expireSessionsOnShutdown="false"
notifyListenersOnReplication="true"/>
<ClusterListener className="org.apache.catalina.ha.session.ClusterSessionListener"/>
sudo systemctl enable --now httpd./startup.sh四 会话保持与高可用要点
五 常见问题与快速排查
setsebool -P httpd_can_network_connect 1。