前言:CentOS 7 官方支持终止后,服务器操作系统迭代成为企业运维刚需,Rocky Linux 9 作为 RHEL 兼容替代品,成为主流选择。堡垒机作为运维安全核心,承载权限管控与操作审计,其迁移需兼顾零数据丢失、低风险与服务连续性。本文复盘 CentOS 7 至 Rocky Linux 9 堡垒机迁移全流程,避开常见坑点,提供可直接复用的实战指南,助力运维同行高效完成迁移。
一、迁移背景与目标
本次迁移是将运行在 CentOS 7 上的 JumpServer 堡垒机,完整迁移到 Rocky Linux 9 服务器。核心目标是:
- 零数据丢失:确保所有用户、资产、授权和审计日志完整迁移。
- 最小化变更:复制老环境的配置和工作流程,避免引入新的最佳实践带来的风险。
- 风险可控:通过分步验证和回滚预案,确保业务连续性。
二、迁移前准备
1. 老环境备份(关键!)
在执行任何操作前,务必对老环境进行完整备份:
bash
# 1. 检查老环境 Docker 版本(确保新环境兼容)
docker version | grep "Server Version"
# 2. 备份堡垒机核心数据和配置
tar -zcvf /tmp/jumpserver_data_config.tar.gz \
/data/jumpserver \
/opt/jumpserver
# 3. 备份启动脚本目录
tar -zcvf /tmp/jumpserver_installer.tar.gz \
/opt/jumpserver-installer-v3.10.11
# 4. (可选)备份所有 Docker 镜像,用于新环境离线导入
docker save -o /tmp/jumpserver_images.tar \
$(docker images | grep jumpserver | awk '{print $1":"$2}')
2. 新环境初始化
在新的 Rocky Linux 9 服务器上,执行以下操作:
bash
# 1. 切换公网 DNS,确保能下载依赖
echo "nameserver 100.96.0.2" > /etc/resolv.conf
# 2. 安装基础依赖
dnf install -y dnf-plugins-core wget git
# 3. 添加 Docker 官方仓库(优化:使用 RHEL 仓库,符合 Rocky Linux 9 官方推荐)
dnf config-manager --add-repo https://download.docker.com/linux/rhel/docker-ce.repo
# 4. 安装 Docker 和 Compose 插件
dnf install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin
# 5. 启动并启用 Docker
systemctl start docker
systemctl enable docker
三、核心迁移步骤
步骤 1:传输备份文件到新环境
在老环境执行,将备份文件传输到新环境的 /tmp 目录:
bash
# 传输数据和配置包
scp -P 22 -i huoshanyun.pem /tmp/jumpserver_data_config.tar.gz root@新环境IP:/tmp/
# 传输启动脚本包
scp -P 22 -i huoshanyun.pem /tmp/jumpserver_installer.tar.gz root@新环境IP:/tmp/
# (可选)传输离线镜像包
scp -P 22 -i huoshanyun.pem /tmp/jumpserver_images.tar root@新环境IP:/tmp/
步骤 2:在新环境解压恢复
在新环境执行,将备份文件解压到对应路径:
bash
# 1. 恢复数据和配置
tar -zxvf /tmp/jumpserver_data_config.tar.gz -C /
# 2. 恢复启动脚本
tar -zxvf /tmp/jumpserver_installer.tar.gz -C /opt/
# 3. (可选)离线导入 Docker 镜像
docker load -i /tmp/jumpserver_images.tar
步骤 3:修改堡垒机ip
在新环境中,编辑 /opt/jumpserver/config/config.txt,将默认端口修改为自定义端口(例如:Web 端口改为 8443,SSH 端口改为 5222):
bash
# 编辑配置文件
vi /opt/jumpserver/config/config.txt
# 找到并修改以下配置项(示例)
HTTP_PORT=8443
SSH_PORT=5222
bash
# 批量替换所有老 IP 为新 IP
sed -i 's/老ip/新ip/g' /opt/jumpserver/config/config.txt
注意:端口号需确保未被其他服务占用,且符合企业安全策略。
步骤 4:解决命令兼容性问题
Rocky Linux 9 使用 docker compose(空格)命令,而老脚本调用的是 docker-compose(横杠),需要创建软链接兼容:
bash
ln -s /usr/libexec/docker/cli-plugins/docker-compose /usr/bin/docker-compose
# 验证
docker-compose --version
步骤 5:配置国内镜像加速器(解决拉取慢/中断)
bash
mkdir -p /etc/docker
cat > /etc/docker/daemon.json <<EOF
{
"registry-mirrors": [
"https://hub-mirror.c.163.com",
"https://docker.mirrors.ustc.edu.cn",
"https://mirror.baidubce.com"
]
}
EOF
systemctl daemon-reload
systemctl restart docker
步骤 6:放行自定义堡垒机端口
bash
# 放行自定义端口(替换为你实际修改的端口)
firewall-cmd --permanent --add-port=8443/tcp --add-port=5222/tcp
firewall-cmd --reload
步骤 7:启动堡垒机服务
bash
cd /opt/jumpserver-installer-v3.10.11
./jmsctl.sh start
# 验证服务状态
./jmsctl.sh status
四、常见问题与排错思路
问题 1:docker-compose: command not found
- 现象 :启动脚本报错
docker-compose: command not found。 - 原因 :Rocky Linux 9 不再提供独立的
docker-compose包,而是作为插件提供。 - 解决方案 :创建软链接
ln -s /usr/libexec/docker/cli-plugins/docker-compose /usr/bin/docker-compose。
问题 2:镜像拉取慢/中断(connection reset by peer)
- 现象:拉取镜像时网络中断,进度条卡住。
- 原因:国内访问 Docker Hub 国际链路不稳定。
- 解决方案 :
- 配置国内镜像加速器(见步骤 5)。
- 从老环境导出镜像,在新环境离线导入。
问题 3:服务启动后 Web 界面无法访问
- 现象:容器状态正常,但无法通过浏览器访问自定义端口。
- 原因 :防火墙未放行端口或
config.txt中绑定的 IP 不正确。 - 解决方案 :
- 放行自定义端口(见步骤 6)。
- 检查
/opt/jumpserver/config/config.txt中的BIND_ADDRESS配置。
问题 4:systemctl status docker 显示 Active: failed
-
现象:Docker 服务启动失败,与 firewalld 冲突。
-
原因:Rocky 9 默认启用 firewalld,Docker 与防火墙规则冲突。
-
解决方案 :
bashfirewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.0.0/16" port port="2375" protocol="tcp" accept' firewall-cmd --reload
五、迁移后验证
- 服务状态 :执行
./jmsctl.sh status,确保所有容器状态为Started或Healthy。 - Web 界面 :访问
https://新环境IP:自定义Web端口,使用老环境账号登录,确认用户、资产和授权信息完整。 - 功能测试:测试资产登录、文件传输、命令审计等核心功能,确保与老环境一致。
六、总结与注意事项
- 数据优先 :始终将
/data/jumpserver数据目录的备份和恢复作为首要任务。 - 环境复制:优先复制老环境的配置和脚本,而非采纳新的最佳实践,以降低风险。
- 端口安全:修改默认端口是企业安全的基本要求,避免端口冲突和泄露风险。
- 网络问题:国内环境下,Docker 镜像拉取是最常见的坑,提前准备离线镜像或国内加速器至关重要。
- 回滚预案:在确认新环境稳定运行前,不要关停老环境,以便随时回滚。
通过以上步骤,我们成功将 JumpServer 堡垒机从 CentOS 7 迁移到了 Rocky Linux 9,实现了数据完整、服务可用、风险可控的迁移目标。
