温馨提示×

Linux环境下Java如何进行分布式部署

小樊
38
2025-12-20 02:01:16
栏目: 编程语言

Linux环境下Java分布式部署实操指南

一 架构与服务器规划

  • 典型三层架构:接入层(Nginx 反向代理/负载均衡)→ 服务层(多台 Java 应用实例)→ 数据与中间件层(MySQL 8.0+Redis 6.0+、对象存储如 MinIO,注册中心如 Nacos 2.x)。
  • 建议最小集群(示例网段 192.168.100.0/24):
    • 192.168.100.1:Nginx、MySQL、Redis、MinIO、Nacos(控制/管理面)
    • 192.168.100.2 / 192.168.100.3:JDK + 应用服务节点(业务面,至少2个实例便于横向扩展)
  • 常用端口规划:80/443(HTTP/HTTPS)、3306(MySQL)、6379(Redis)、8848(Nacos)、9000(MinIO)、8080(应用)。

二 基础环境准备

  • 系统与网络
    • 所有节点统一时区(如 Asia/Shanghai)、同步时间(如 chrony)、确保节点间 SSH 互通;按需配置 DNS/hosts
  • JDK 安装(示例 JDK 8/11
    • 方式一(RPM/仓库):yum install -y java-11-openjdk-develyum install -y java-1.8.0-openjdk*
    • 方式二(Tar 包):解压至 /usr/local/jdk,配置环境变量(JAVA_HOMEPATH),执行 source /etc/profile 生效。
  • 防火墙与端口
    • 建议生产环境按白名单开放端口,示例:
      • firewall-cmd --zone=public --add-port=80/tcp --permanent
      • firewall-cmd --zone=public --add-port=3306/tcp --permanent
      • firewall-cmd --zone=public --add-port=8848/tcp --permanent
      • firewall-cmd --reload && firewall-cmd --list-ports
  • 基础监控与日志
    • 建议同步规划 Prometheus/Grafana 监控与 ELK(或 Loki/EFK)日志集中,便于分布式链路观测与排障。

三 中间件部署与高可用要点

  • Nacos(服务注册与配置中心)
    • 下载解压至 /usr/local/nacos;生产建议集群模式并接入 MySQL(执行 nacos-mysql.sql 初始化)。
    • 配置 application.properties
      • spring.datasource.platform=mysql
      • db.num=1
      • db.url.0=jdbc:mysql://192.168.100.1:3306/nacos?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC
      • db.user.0=rootdb.password.0=******
    • 启动:单机 sh startup.sh -m standalone;集群 sh startup.sh;访问控制台 http://IP:8848/nacos(默认账号/密码 nacos/nacos)。
  • MySQL 8.0
    • 安装(Tar 包或仓库),初始化数据目录,启动服务;创建业务库与账号,按需配置主从复制/组复制以提升可用性。
  • Redis 7.x
    • 编译安装(make && make install),以系统服务运行(/usr/local/bin/redis-server /etc/redis.conf),建议开启 AOF/RDB 持久化与必要安全配置(如绑定内网、设置密码)。
  • MinIO(对象存储)
    • 下载二进制至 /usr/local/bin/minio,数据目录 /data/minio
    • 启动:minio server --address :9000 /data/minio
    • 建议以 systemd 托管并设置强口令(环境变量 MINIO_ROOT_USER / MINIO_ROOT_PASSWORD)。
  • Nginx(四层/七层负载均衡)
    • 安装(源码或仓库),配置 upstream 与反向代理:
      • upstream:server 192.168.100.2:8080; server 192.168.100.3:8080;
      • 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; }
    • 启用 systemd 管理,支持热重载与开机自启。

四 Java应用部署与发布策略

  • 打包与目录
    • 构建可执行 Fat JAR(如 mvn clean package),上传至应用节点目录(如 /opt/app/),准备启动脚本与日志目录(如 /var/log/app/)。
  • systemd 服务示例(/etc/systemd/system/app.service)
    • [Unit] Description=My Java App
    • [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.target
    • 常用命令:systemctl daemon-reload && systemctl enable --now app
  • 发布与回滚
    • 蓝绿发布:准备两套目录(如 /opt/app/v1/opt/app/v2),通过软链切换或 Nginx upstream 权重/摘除节点实现零停机切换。
    • 滚动升级:逐台替换实例并健康检查,确保容量冗余后再继续。
    • 健康检查:应用暴露 /actuator/health;Nginx 可配置 health_check(商业版)或在外部做 TCP/HTTP 探活脚本。
  • 配置与密钥
    • 建议将可变配置托管至 NacosKubernetes ConfigMap/Secret,避免硬编码;数据库、Redis、MinIO 等凭据使用 VaultKMS 管理。
  • 优雅停机
    • 启用 JVM 关闭钩子(Spring Boot 默认),设置合理的 terminationGracePeriodSeconds(K8s 场景),先停止接收流量再等待处理中请求完成。

五 自动化与容器化方案

  • Ansible 自动化
    • 控制节点安装 Ansible,配置 SSH 免密inventory(按角色分组:web、db、redis 等),通过 Playbook/Roles 一键部署 JDK、Nginx、应用与回滚;模板化配置(Jinja2)支持多环境差异化。
  • Docker 与 Kubernetes
    • Dockerfile 示例:
      • FROM openjdk:11-jre-slim
      • COPY target/app.jar /app.jar
      • CMD [“java”,“-jar”,“/app.jar”]
    • Kubernetes:
      • 使用 Deployment 管理副本数(如 replicas: 3),Service 暴露端口,ConfigMap/Secret 注入配置与密钥;
      • 借助 readiness/liveness 探针实现自动恢复与滚动升级;Ingress 统一南北向流量治理。
  • 框架与生态
    • Spring Boot 提供自动配置与内嵌容器,便于微服务快速交付;Quarkus/Micronaut 面向云原生,具备更快启动与更低内存占用,适合容器化与 Serverless 场景。

0