Debian下Tomcat自动扩容的可落地方案
一、总体思路与架构选择
二、方案一 Kubernetes自动扩容(推荐)
FROM tomcat:9-jre11
COPY target/app.war /usr/local/tomcat/webapps/ROOT.war
# 如需 JDBC/Redis 等,挂载 ConfigMap/Secret
CMD ["catalina.sh", "run"]
kubectl apply -f tomcat-deployment.yaml
kubectl apply -f tomcat-service.yaml
tomcat-deployment.yaml 片段:apiVersion: apps/v1
kind: Deployment
metadata:
name: tomcat-deployment
spec:
replicas: 2
selector: { matchLabels: { app: tomcat } }
template:
metadata: { labels: { app: tomcat } }
spec:
containers:
- name: tomcat
image: your-registry/tomcat-app:latest
ports: [{ containerPort: 8080 }]
resources:
requests: { cpu: "500m", memory: "1Gi" }
limits: { cpu: "2", memory: "2Gi" }
tomcat-service.yaml 片段(NodePort/LoadBalancer 任选其一):apiVersion: v1
kind: Service
metadata: { name: tomcat-service }
spec:
selector: { app: tomcat }
ports: [{ protocol: TCP, port: 80, targetPort: 8080 }]
type: LoadBalancer
kubectl apply -f tomcat-hpa.yaml
tomcat-hpa.yaml:apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata: { name: tomcat-hpa }
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: tomcat-deployment
minReplicas: 2
maxReplicas: 10
metrics:
- type: Resource
resource:
name: cpu
target:
type: Utilization
averageUtilization: 50
kubectl get hpa
kubectl get pods -l app=tomcat
kubectl describe hpa tomcat-hpa
三、方案二 物理机或虚拟机手动水平扩容 + 自动化脚本
sudo cp -r /opt/tomcat /opt/tomcat_new
# 编辑 /opt/tomcat_new/conf/server.xml
# Server port="8006" shutdown="SHUTDOWN"
# Connector port="8081" ...
# Connector port="8443" ... SSLEnabled="true" ...
# Connector port="8010" protocol="AJP/1.3" ...
/opt/tomcat_new/bin/startup.sh
upstream tomcat_cluster {
server localhost:8080;
server localhost:8081;
}
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 nginx -s reload
- name: Deploy Tomcat instance
hosts: tomcat_servers
tasks:
- name: Copy Tomcat instance
copy:
src: /opt/tomcat
dest: /opt/tomcat_new
owner: tomcat
group: tomcat
- name: Modify ports in server.xml
replace:
path: /opt/tomcat_new/conf/server.xml
regexp: '(port=")(\\d+)"'
replace: '\\1{{ item.port }}"'
with_items:
- { port: "8081" }
- { port: "8443" }
- { port: "8010" }
- name: Start Tomcat instance
shell: /opt/tomcat_new/bin/startup.sh
四、会话与状态一致性配置
五、JVM与系统资源基线
#!/bin/bash
export JAVA_OPTS="-Xms1g -Xmx1g -XX:MaxMetaspaceSize=256m -XX:+UseG1GC"