CentOS 下 Tomcat 集群搭建步骤
一 环境准备与安装
sudo yum install -y java-1.8.0-openjdk-develexport JAVA_HOME=/usr/java/jdk1.8.0_xxxexport PATH=$JAVA_HOME/bin:$PATHwget https://archive.apache.org/dist/tomcat/tomcat-9/v9.0.56/bin/apache-tomcat-9.0.56.tar.gztar xvf apache-tomcat-9.0.56.tar.gz -C /optsudo mv /opt/apache-tomcat-9.0.56 /opt/tomcatsudo useradd -r -m -U -d /opt/tomcat -s /sbin/nologin tomcatsudo chown -R tomcat:tomcat /opt/tomcatsudo firewall-cmd --permanent --add-port=8080/tcpsudo firewall-cmd --permanent --add-port=8009/tcpsudo firewall-cmd --reload$CATALINA_HOME/bin/catalina.sh 顶部添加 CATALINA_PID=/var/run/tomcat.pid,并创建 systemd 服务(示例见文末附录)。二 多实例与基础配置
<Server port="8105" shutdown="SHUTDOWN"><Connector port="8180" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" /><Connector port="8109" protocol="AJP/1.3" redirectPort="8443" /><Engine name="Catalina" defaultHost="localhost" jvmRoute="node1">三 配置 Tomcat 集群会话复制
<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"
channelSendOptions="8">
<Manager className="org.apache.catalina.ha.session.DeltaManager"
expireSessionsOnShutdown="false"
notifyListenersOnReplication="true"/>
<Channel className="org.apache.catalina.tribes.group.GroupChannel">
<Membership className="org.apache.catalina.tribes.membership.McastService"
address="228.0.0.4"
port="45564"
frequency="500"
dropTime="3000"/>
<Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver"
address="auto"
port="4000"
autoBind="100"
selectorTimeout="5000"
maxThreads="6"/>
<Sender className="org.apache.catalina.tribes.transport.ReplicationTransmitter">
<Transport className="org.apache.catalina.tribes.transport.nio.PooledParallelSender"/>
</Sender>
<Interceptor className="org.apache.catalina.tribes.group.interceptors.TcpFailureDetector"/>
<Interceptor className="org.apache.catalina.tribes.group.interceptors.MessageDispatchInterceptor"/>
</Channel>
<Valve className="org.apache.catalina.ha.tcp.ReplicationValve" filter=""/>
<Valve className="org.apache.catalina.ha.session.JvmRouteBinderValve"/>
<ClusterListener className="org.apache.catalina.ha.session.ClusterSessionListener"/>
</Cluster>
四 部署负载均衡
sudo yum install -y nginxhttp {
upstream tomcat_cluster {
server 192.168.10.11:8080;
server 192.168.10.12:8080;
# 可选:开启会话粘滞(配合 jvmRoute)
# ip_hash;
}
server {
listen 80;
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;
}
}
}
sudo systemctl enable --now nginxworker.list=loadbalancer
worker.worker1.type=ajp13
worker.worker1.host=192.168.10.11
worker.worker1.port=8009
worker.worker2.type=ajp13
worker.worker2.host=192.168.10.12
worker.worker2.port=8009
worker.loadbalancer.type=lb
worker.loadbalancer.balance_workers=worker1,worker2
worker.loadbalancer.sticky_session=1
JkMount /* loadbalancer。五 启动与验证
sudo -u tomcat /opt/tomcat/bin/startup.sh(或使用 systemd)sudo systemctl start nginxcurl -I http://<LB_IP>/ 应返回 200/302 等成功状态码ss -lntp | grep -E '8080|8009|80' 检查端口监听tail -f /opt/tomcat/logs/catalina.out /opt/tomcat/logs/localhost*.logtail -f /var/log/nginx/access.log /var/log/nginx/error.log附录 systemd 服务示例
[Unit]
Description=Apache Tomcat
After=network.target remote-fs.target nss-lookup.target
[Service]
Type=forking
PIDFile=/var/run/tomcat.pid
Environment=JAVA_HOME=/usr/java/jdk1.8.0_xxx
Environment=CATALINA_HOME=/opt/tomcat
ExecStart=/opt/tomcat/bin/startup.sh
ExecStop=/opt/tomcat/bin/shutdown.sh
User=tomcat
Group=tomcat
PrivateTmp=true
[Install]
WantedBy=multi-user.target
sudo systemctl daemon-reloadsudo systemctl enable --now tomcat