跳到主要内容

服务器升级与回滚

每次升级都会让四个产品和数据库结构一起前进,并先备份租户数据库;回滚会恢复上一个发布和那份备份。

第 1 步:看看现在装的是哪个版本​

soln status --dir /opt/soln-tenant-runtime
  • 成功:已安装的发布版本、四个产品的容器状态,以及 ready
  • DEPLOYMENT_NOT_INSTALLED —— 这个目录不是部署目录,检查 --dir
soln upgrade --check --dir /opt/soln-tenant-runtime
  • Soln <版本> is up to date. —— 无需操作
  • Update available: <当前> -> <新版本> —— 继续第 2 步
  • Update required: <当前> -> <新版本> —— 控制面已强制要求这个版本,尽快升级以免 Runtime 断连

第 2 步:检查存储与容量​

sl storage status --dir /opt/soln-tenant-runtime --json
sl upgrade --dir /opt/soln-tenant-runtime --check --json

确认数据卷已挂载,加密方式已核实,各文件系统有足够空间。CLI 分别计算新版镜像、数据库备份和数据迁移余量;相同文件系统上的预算合并计算。空间不足时在停止服务和迁移前中止。containerd 镜像存储需填写实际宿主机路径,详见存储与容量管理。

升级备份默认保存在部署目录的 .soln/backups,由 CLI 加密,第一次升级时创建;它不自动放入租户数据加密卷,也不包含 MinIO 附件。另行建立异机备份及恢复策略。

第 3 步:升级​

soln upgrade --dir /opt/soln-tenant-runtime

非交互终端加 --yes;只有在必须装某个确切版本时才加 --release <版本>。CLI 依次做这些事:

  1. 检查基础环境与加密数据挂载,并校验部署绑定
  2. 获取并验证发布清单、获取短期 Registry 凭据
  3. 检查部署备份、Docker 镜像与租户数据的空间预算
  4. 校验镜像签名并拉取新版镜像
  5. 记录升级状态,停止业务服务并写入加密数据库备份
  6. 记录迁移阶段并执行 Database Migrator
  7. 启动新版服务,直接 CLI 升级等待健康检查;租户内升级由页面重新连接并确认目标版本
  8. 保存新版本状态和上一版清单,供回滚使用
  • 成功:Soln upgraded to <版本>. Backup: <部署目录>/.soln/backups/postgres-tenant-<时间戳>.sql.gz.enc
  • DEPLOYMENT_ALREADY_CURRENT —— 这个版本已经装好了
  • DEPLOYMENT_RECOVERY_REQUIRED —— 上一次升级没有走完,先按第 5 步回滚
  • 签名校验或 doctor 检查失败时,升级在任何迁移之前就停下

第 4 步:验证新版本​

soln status --dir /opt/soln-tenant-runtime
  • 成功:版本号是新版本,状态为 ready
curl -fsS -o /dev/null -w '%{http_code}\n' \
https://runtime.customer.example.com/health/ready
  • 成功:200
  • 出现 TENANT_RUNTIME_NOT_READY 或不是 200:先去部署排查看心跳和 Lease 报错,再做别的操作

第 5 步:回滚​

数据影响: 正常回滚会恢复升级前的 PostgreSQL 备份,升级后新增、修改或删除的数据库记录不会保留。它不恢复对象存储文件,也不把 Temporal 状态一起回退;数据库与这些服务可能需要人工核对。操作前停止业务写入,并保留当前数据库、对象存储和相关外部服务的备份,再确认是否回滚。

如果升级停在 backup_pending 阶段,CLI 的恢复分支只重启原版本,不恢复数据库;以 CLI 的操作提示为准。不要手工改未完成操作标记。

soln rollback --dir /opt/soln-tenant-runtime

迁移或健康检查失败、或者需要撤掉新版本时使用。CLI 依次做这些事:

  1. 找到上一个发布和它的备份(没有则报 DEPLOYMENT_ROLLBACK_UNAVAILABLE)
  2. 停止业务服务
  3. 恢复 PostgreSQL 备份
  4. 用上一个发布执行 Database Migrator
  5. 启动上一个发布并等待 /health/ready
  6. 把上一个发布设为当前版本,并丢弃回滚目标
  • 成功:Soln rolled back to <版本>.
  • 外部服务模式下,备份会被恢复到租户自己的 PostgreSQL 里,因此要确认账号仍然有权删除并重建上一个发布所需的结构对象
  • 只保留一个回滚目标:回滚之后再升级,会重新写一份备份

运维规则​

  • 不要手改 .soln/deployment.json 和 .soln/docker-compose.release.yml:它们记录当前发布、镜像摘要和未完成的操作
  • /health/ready 失败时不要绕过 Lease 校验,先看心跳和 Lease 报错
  • 按升级预算和业务增长为各文件系统保留空间,不要删掉属于当前发布的那份备份
  • 复用同一个部署目录;不要在已有部署上重装(会报 DEPLOYMENT_ALREADY_INSTALLED)
  • 只有打算重连 Runtime 时才轮换 Agent 密钥,并且要执行一次生命周期操作,让新值进入容器

另见部署排查。

需要更换已部署 Runtime 的访问地址时,参见更换租户访问域名。