CentOS Java应用迁移指南
小樊
45
2025-11-23 17:47:12
一 迁移总览与准备
- 明确范围与目标:是原地升级 JDK、同版本跨机迁移,还是跨操作系统(如 Windows→CentOS);目标 JDK 版本与中间件版本(如 Tomcat 8/9、Spring Boot)保持一致或明确升级路线。
- 评估与盘点:梳理应用架构与依赖(JAR/WAR、第三方库、启动脚本、定时任务、JVM 参数)、外部资源(数据库、缓存、消息队列、存储)、端口与防火墙、系统资源(CPU/内存/磁盘/IO)。
- 制定计划:包含时间表、资源分配、回滚策略、演练与验收标准;优先在实验环境验证,再并行试运行,最后灰度切换。
- 备份与变更留痕:全量备份应用包、配置、数据库、证书、密钥;使用版本控制管理配置与脚本;准备应急预案与回滚包。
- 切换策略:通过负载均衡或 DNS 轮询逐步切流,保留回滚窗口,确保旧环境在验证期内可用。
二 环境搭建与 JDK 迁移
- 系统准备:更新系统并安装常用工具(如 curl、wget、vim),创建专用运行用户(如 appuser),规划目录(如 /opt/app、/var/log/app)。
- 安装 OpenJDK(推荐):
- 查看可用版本:
yum list available | grep java
- 安装示例:
sudo yum install java-11-openjdk-devel -y 或 sudo yum install java-1.8.0-openjdk-devel -y
- 安装 Oracle JDK(如需):
- 下载 .tar.gz,解压至 /opt/java,设置环境变量:
export JAVA_HOME=/opt/java/jdk<版本号>
export PATH=$JAVA_HOME/bin:$PATH
- 执行
source /etc/profile 使配置生效
- 多版本管理:使用 alternatives 切换默认 Java
- 列出:
alternatives --display java
- 配置:
sudo alternatives --config java
- 验证:
java -version、javac -version、echo $JAVA_HOME
- 注意事项:保持与源环境JDK 主版本一致可减少风险;如升级版本,需完成兼容性验证与回归测试。
三 应用与数据迁移
- 打包与传输:
- 按构建工具打包(如 Maven/Gradle 生成 JAR/WAR),使用 rsync/scp 或制品库上传至新环境;保留构建信息与校验值(如 sha256sum)。
- 配置与目录:
- 迁移并调整 application.properties/application.yml、日志与证书路径;使用相对路径或占位符(如
${APP_HOME}),避免硬编码。
- 示例目录结构:
- 应用:
/opt/app/myapp.jar
- 配置:
/opt/app/conf/
- 日志:
/var/log/app/
- 启动与管理:
- 使用 systemd 管理(示例 myapp.service):
- ExecStart=/usr/bin/java -Xms512m -Xmx1g -jar /opt/app/myapp.jar --spring.config.location=/opt/app/conf/application.yml
- Restart=on-failure;设置 User=appuser 与 WorkingDirectory
- 数据库迁移:
- 小数据量:导出结构与数据(如 mysqldump --single-transaction),在目标库导入;
- 大数据量/低停机:采用主从同步或物理/逻辑复制;
- 切换前校验字符集(建议 utf8mb4)、时区、大小写敏感、SQL 模式等一致性。
- 文件与编码:
- 将 Windows 路径分隔符 “\” 改为 “/”;统一文件编码为 UTF-8;避免依赖 Windows 特定工具/命令。
- 验证要点:健康检查接口、关键业务链路、日志无异常、资源占用在阈值内。
四 切换上线与回滚
- 预发布与试运行:在生产镜像环境完成功能/性能/安全测试;与旧环境并行运行,观察错误率、延迟、JVM GC等指标。
- 灰度与切流:通过 Nginx/HAProxy/云LB 按权重/Header/Cookie逐步切流;保留回滚开关与快速回切脚本。
- 切换窗口:选择低峰时段,通知相关方;执行DNS TTL 预降与防火墙策略检查。
- 上线后观察:持续监控应用指标、JVM、依赖服务、磁盘/IO,确保稳定性后再扩大流量。
- 回滚机制:一键回滚到上一个稳定版本(回滚包、回滚脚本、数据库回滚方案);回滚后复核数据与配置。
五 常见问题与排查清单
- 兼容性问题:跨 OS 迁移需检查文件路径分隔符、环境变量、第三方库差异;必要时调整代码或替换依赖。
- JDK 版本不匹配:确认
java -version 与 javac -version 一致;使用 alternatives 切换;如升级版本,先做回归测试。
- 端口与防火墙:核对 8080/8443/3306 等端口开放;云环境检查安全组与 SELinux。
- 字符集与大小写:数据库与连接参数统一为 UTF-8/utf8mb4;如从 Windows 迁移到 Linux,注意表名大小写策略差异。
- JVM 与内存:按应用特性设置 -Xms/-Xmx/-XX:MetaspaceSize;关注 GC 日志与 OOM;必要时开启 JMX 远程监控。
- 文件权限与用户:应用以非 root运行;目录权限与属主正确(如 appuser:appuser)。
- 日志与诊断:统一日志路径与滚动策略;保留启动/错误日志与线程/堆转储以便排查。