Linux上Java如何进行分布式部署
导读:Linux 上 Java 分布式部署实操指南 一 架构与方案选型 典型三层架构:接入层(如 Nginx 反向代理/负载均衡)→ 服务层(多实例 Java 微服务)→ 数据与中间件层(MySQL、Redis、Nacos 等)。 部署形态对比...
Linux 上 Java 分布式部署实操指南
一 架构与方案选型
- 典型三层架构:接入层(如 Nginx 反向代理/负载均衡)→ 服务层(多实例 Java 微服务)→ 数据与中间件层(MySQL、Redis、Nacos 等)。
- 部署形态对比:
- 裸机/虚拟机多实例:上手快、可控性强,适合中小规模或遗留系统。
- 容器化(Docker)+ 编排(Kubernetes):标准化交付、弹性伸缩、自愈与滚动升级,适合云原生与快速迭代。
- 服务治理与通信:微服务可选 Spring Cloud 或 Dubbo;高性能 RPC 选 gRPC;大数据批流处理可选 Hadoop/Spark。
二 快速落地步骤
- 步骤 1 环境准备
- 在所有节点安装 JDK 8/11/17,统一 /etc/profile 中的 JAVA_HOME/PATH;建议关闭 SELinux 或设为宽容模式,防火墙按需开放端口(如 80/443/3306/6379/8848/9000 等)。
- 步骤 2 中间件部署
- 在管理/入口节点部署 Nginx(反向代理/负载均衡);部署 MySQL 8.0、Redis、Nacos(作为注册中心/配置中心);对象存储可用 MinIO。
- 步骤 3 应用打包与分发
- 使用 Maven/Gradle 构建可执行 fat jar;通过 scp/rsync 或制品库分发到各应用节点。
- 步骤 4 进程托管
- 使用 systemd 托管 Java 进程(配置 WorkingDirectory/ExecStart/Restart=always),便于开机自启与日志采集(journald)。
- 步骤 5 反向代理与负载均衡
- Nginx 配置 upstream 指向多个应用实例,启用长连接、健康检查与限流。
- 步骤 6 服务注册与配置
- 微服务启动时向 Nacos 注册,远程拉取配置;数据库/缓存连接使用连接池并开启合理超时。
- 步骤 7 监控与日志
- 暴露 /actuator/health 与指标端点,接入 Prometheus/Grafana;日志统一落盘并接入 ELK 或 Loki。
三 示例配置与命令
- systemd 托管示例(/etc/systemd/system/app.service)
常用命令:[Unit] Description=My Java App After=network.target [Service] Type=simple User=app WorkingDirectory=/opt/app ExecStart=/usr/bin/java -Xms2g -Xmx2g -jar /opt/app/app.jar --spring.profiles.active=prod Restart=always StandardOutput=journal StandardError=journal [Install] WantedBy=multi-user.targetsystemctl daemon-reload systemctl enable --now app journalctl -u app -f - Nginx 负载均衡示例(/etc/nginx/conf.d/app.conf)
upstream backend { server 192.168.100.2:8080 max_fails=3 fail_timeout=30s; server 192.168.100.3:8080 max_fails=3 fail_timeout=30s; keepalive 32; } server { listen 80; location / { proxy_pass http://backend; 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; } } - 防火墙端口开放示例
firewall-cmd --zone=public --add-port=80/tcp --permanent firewall-cmd --zone=public --add-port=3306/tcp --permanent firewall-cmd --zone=public --add-port=6379/tcp --permanent firewall-cmd --zone=public --add-port=8848/tcp --permanent firewall-cmd --reload - Docker 与 Kubernetes 最小示例
Dockerfile:
Kubernetes(示例):FROM openjdk:11-jre-slim COPY target/app.jar /app.jar CMD ["java","-jar","/app.jar"]
上述托管、Nginx 与防火墙示例适用于裸机/虚拟机部署;Docker/K8s 示例用于容器化与编排场景。kubectl create deployment app --image=myorg/app:1.0 --replicas=3 kubectl expose deployment app --port=80 --target-port=8080
四 生产级注意事项
- 高可用与弹性:核心中间件(如 Nacos/MySQL/Redis)至少部署 3 节点;应用多实例跨不同宿主机分布;接入层启用健康检查与自动摘除。
- 配置与密钥:使用 Nacos/Spring Cloud Config 集中管理配置;数据库密码、密钥等通过 Vault/KMS 或 K8s Secret 注入,避免硬编码。
- 网络与安全:服务间启用 mTLS;限制容器/主机间访问策略;对外最小暴露面,仅开放 80/443 与必要管理端口。
- 资源与治理:为 JVM 设置合理堆与 GC 策略(如 G1),容器设置 requests/limits;引入 熔断/降级/限流(如 Resilience4j/Sentinel)与 分布式追踪(如 SkyWalking)。
- 发布与回滚:采用 蓝绿/金丝雀 发布;保留最近 N 个可回滚版本;变更前后做健康检查与流量对比。
- 监控告警:覆盖 应用指标/日志/链路追踪;设置 P99/P95 延迟、错误率、线程池与连接池告警阈值;定期压测与容量评估。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: Linux上Java如何进行分布式部署
本文地址: https://pptw.com/jishu/770303.html
