Java在CentOS上的集群部署方案
小樊
45
2025-11-19 20:17:58
架构总览与适用场景
- 面向传统 Java Web(如 Tomcat) 或 微服务(Spring Cloud) 的集群,建议采用“多实例 + 负载均衡 + 会话共享 + 监控告警”的组合架构,实现高可用与横向扩展。
- 典型拓扑:前端 Nginx/HAProxy 做反向代理与负载均衡,后端 2–N 台应用实例,配合 Redis 会话共享 或 JWT,数据库层使用 MySQL 主从/MGR 或 PostgreSQL 流复制,缓存用 Redis,消息队列用 Kafka/RabbitMQ,监控用 Prometheus + Grafana,日志用 ELK。微服务场景可叠加 Nacos/Eureka + Gateway 实现服务注册发现与网关层高可用。
部署步骤
- 基础环境
- 在所有节点安装相同版本的 JDK 8/11/17(示例:OpenJDK 8):sudo yum install -y java-1.8.0-openjdk-devel;配置环境变量:JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk,PATH=$JAVA_HOME/bin:$PATH;验证:java -version。
- 配置 /etc/hosts 或使用内网 DNS,确保节点名可互相解析;按需配置 SSH 免密登录 以便批量操作(ssh-keygen;ssh-copy-id)。
- 打开防火墙端口:firewall-cmd --zone=public --add-port=22/tcp --permanent;firewall-cmd --zone=public --add-port=80/tcp --permanent;firewall-cmd --zone=public --add-port=8080/tcp --permanent;firewall-cmd --reload。
- 应用部署
- 传统 Java Web:安装 Tomcat 9(wget 下载解压至 /usr/local/tomcat;export CATALINA_HOME;在每台实例执行 startup.sh)。
- 微服务:按各框架(如 Spring Boot)打包(jar/war),使用 systemd 或容器编排管理进程生命周期。
- 负载均衡
- 安装 Nginx:sudo yum install -y epel-release && sudo yum install -y nginx。
- 配置反向代理与负载均衡(/etc/nginx/conf.d/tomcat.conf):
- upstream tomcat { server node1:8080; server node2:8080; server node3:8080; }
- server { listen 80; location / { proxy_pass http://tomcat; 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; } }
- 启动:systemctl start nginx && systemctl enable nginx。
高可用与扩展
- 负载均衡与故障转移
- 策略可选:轮询、加权轮询、最少连接、IP Hash;建议开启 被动健康检查 与 失败重试/熔断,在 Nginx 中配置 max_fails/fail_timeout 等参数,提升容错性。
- 会话保持
- 优先使用 Redis 集中会话(Spring Session + Redis),或采用 JWT 无状态方案,避免单机粘滞导致扩容受限。
- 数据库高可用
- MySQL:主从复制 + MHA 自动切换,或 MySQL Group Replication(MGR) 多主高可用;应用侧使用 HikariCP/Druid 多数据源与读写分离组件(如 ShardingSphere-JDBC)。
- 缓存与消息队列
- Redis:主从 + Sentinel 自动故障转移,或 Redis Cluster 分片高可用;Java 客户端可用 Lettuce/Jedis/Redisson。
- Kafka:多 Broker 集群(依赖 ZooKeeper 协调),Java 使用 Spring Kafka;RabbitMQ 采用集群 + 镜像队列提升可用性。
- 服务注册与发现(微服务)
- Nacos/Eureka 做注册中心,Ribbon/OpenFeign 客户端负载均衡,Spring Cloud Gateway 统一网关(熔断/降级/路由)。
监控与日志
- 指标与可视化
- 部署 Prometheus 采集 JVM/应用/Tomcat/系统 指标,使用 Grafana 构建看板并设置阈值告警(如 GC 时间、线程数、HTTP 5xx、响应时延)。
- 日志集中
- 采用 ELK(Elasticsearch + Logstash + Kibana) 收集与检索 Tomcat/logback 日志,便于故障排查与审计。
- 健康检查与探针
- 暴露 /health 端点(Spring Boot Actuator),Nginx/负载均衡器对健康检查路径做主动探测,异常节点自动摘除。
快速验证与上线清单
- 部署验证
- 负载均衡:访问 http://VIP/ 多次刷新,确认请求在多个后端实例间分发;后端日志应体现不同实例处理。
- 会话共享:登录后写入会话,随后请求被路由到不同实例仍能保持登录态(Redis 或 JWT 生效)。
- 故障演练:停止某台实例,验证 Nginx 自动剔除并恢复;数据库/缓存故障切换演练确保业务不中断。
- 上线清单
- 统一 JDK/应用版本 与启动参数(如 -Xms/-Xmx/-XX:+UseG1GC);进程托管(systemd 或容器);防火墙/SELinux 策略;备份与回滚 方案;监控告警 与 值班 机制。