运维

升级与迁移太一

原地更新兼容的签名二进制、在版本不兼容时重置状态,或把完整 Controller 安装迁移到另一台主机。

选择流程

目标流程
原主机兼容更新备份 → 更新 → 重启 → 验证
迁移 Controller停止源端 → 完整复制状态和配置 → 在目标端用相同版本启动
状态不兼容更新备份 → purge → 更新保留的二进制 → 安装 → 重新配置

更新器只验证发行元数据、校验和与签名,没有硬编码最低版本,也不替代持久化数据兼容性判断;更新前应阅读目标版本说明。

日常签名更新

sudo tiyi update --check
sudo tiyi update --yes                 # GitHub,失败自动回退 Gitee
sudo tiyi update --yes --mirror gitee # 强制 Gitee
sudo systemctl restart tiyi
tiyi --version
sudo tiyi system health
sudo journalctl -u tiyi -b -n 200 --no-pager

update 原子替换已验证的二进制,但不会重启正在运行的进程。

状态不兼容的更新

v3.6.0 无法读取更早版本创建的状态。完成这一次过渡时,先保留离线回滚归档,purge 旧状态/配置,再更新保留的二进制并安装新服务;不要导入旧归档。

sudo systemctl stop tiyi
stamp=$(date -u +%Y%m%dT%H%M%SZ)
sudo install -d -m 0700 /var/backups/tiyi
sudo tar --xattrs --acls -C / \
  -czf "/var/backups/tiyi/tiyi-before-update-${stamp}.tar.gz" \
  var/lib/tiyi etc/tiyi etc/systemd/system/tiyi.service usr/local/bin/tiyi
sudo sha256sum "/var/backups/tiyi/tiyi-before-update-${stamp}.tar.gz"

sudo /usr/local/bin/tiyi uninstall --purge
sudo /usr/local/bin/tiyi update --yes --mirror gitee
sudo /usr/local/bin/tiyi doctor --mode run
sudo /usr/local/bin/tiyi install --now
sudo systemctl status tiyi --no-pager
sudo journalctl -u tiyi -b -n 200 --no-pager

uninstall --purge 会删除 unit、状态/配置和服务账号,但有意保留 /usr/local/bin/tiyiupdate 会覆盖这个文件。若保留的二进制没有 update 命令,验证归档后只删除该二进制,再用公开安装器。保存新管理员密码,并在目标协议要求时重新注册 Agent。

把 Controller 迁移到另一台主机

尽量使用完全相同的版本,严禁两台 Controller 同时运行。它们共享部署身份、签名密钥和 Agent 信任。

停止源端后复制完整 /var/lib/tiyi,不能只复制 state.db。目录还可能包含 WAL 文件、KEK、日志/明细分区、请求证据、CRS 数据、发行制品、bundle 和身份。同时复制 /etc/tiyi 及配置引用的外部 KEK、license、证书和密钥文件。

# 源端
tiyi --version
systemctl cat tiyi
sudo systemctl stop tiyi
stamp=$(date -u +%Y%m%dT%H%M%SZ)
sudo install -d -m 0700 /var/backups/tiyi
sudo tar --xattrs --acls -C / \
  -czf "/var/backups/tiyi/tiyi-migrate-${stamp}.tar.gz" \
  var/lib/tiyi etc/tiyi
sudo sha256sum "/var/backups/tiyi/tiyi-migrate-${stamp}.tar.gz"

# 干净目标端:替换 vX.Y.Z 与归档文件名。
source_tag=vX.Y.Z
archive=/secure/path/tiyi-migrate-YYYYMMDDTHHMMSSZ.tar.gz
curl -fsSL https://www.tiyisec.com/install.sh \
  | TIYI_VERSION="$source_tag" bash
sudo /usr/local/bin/tiyi install
sudo sha256sum "$archive"
sudo tar --xattrs --acls -C / -xzf "$archive"
sudo chown -R tiyi:tiyi /var/lib/tiyi
sudo chgrp -R tiyi /etc/tiyi
sudo chmod -R g+rX /etc/tiyi
sudo /usr/local/bin/tiyi doctor --mode run --fix-state-ownership
sudo /usr/local/bin/tiyi install --now

解压前验证校验和,在运行 doctor 前重建审核过的 unit 选项、drop-in、注入环境与外部文件,并检查健康、站点、证书、远程 Agent、bundle revision、tiyi audit verify、日志和 /metrics。回滚时先停止目标端,再启动未改动的源端;两边都接受过写入后不能合并状态树。

排查失败

sudo /usr/local/bin/tiyi doctor --mode run
systemctl status tiyi --no-pager
journalctl -u tiyi -b -n 200 --no-pager
journalctl -u tiyi -f
ss -ltnp

参见 Prometheus 接入通用排障