dbbot 升级与回滚

本文说明 dbbot 发行包在控制节点上的推荐升级方式,以及内置 CLI dbbotctl 当前版本能自动处理的范围。

1. 升级原则

不建议再使用下面这套手工流程:

  1. 备份 hosts.inicommon_config.yml 等文件。
  2. 删除 /usr/local/dbbot
  3. 解压新包。
  4. 再把旧配置拷回去。

这套方法的问题是:

  • 步骤多,容易漏文件。
  • 无法统一在线和离线流程。
  • 配置文件被整包覆盖后,人工恢复成本高。
  • 新版本模板里新增的内容不容易发现。

推荐做法是始终通过 /usr/local/dbbot/bin/dbbotctl 执行升级,让下载、快照、替换、自检、回滚走同一条路径。

2. 先做版本和环境检查

/usr/local/dbbot/bin/dbbotctl version
/usr/local/dbbot/bin/dbbotctl doctor

其中 doctor 会检查:

  • tarpython3mktemp 等本地命令
  • curlwget 是否可用于在线升级
  • 绿色版 Ansible 入口是否可执行
  • 控制节点本地磁盘空间

3. 在线升级

升级到最新 official release:

/usr/local/dbbot/bin/dbbotctl release upgrade --latest

升级到固定 tag:

/usr/local/dbbot/bin/dbbotctl release upgrade --tag v0.2.0

默认行为:

  1. 下载 release 包。
  2. 校验包结构。
  3. 创建升级快照。
  4. 替换受发行包管理的文件。
  5. 回放保留的本地状态。
  6. 运行 ansible-playbook --version 与公开入口 --syntax-check

如需只看计划、不落盘,可先执行:

/usr/local/dbbot/bin/dbbotctl release upgrade --tag v0.2.0 --dry-run

4. 离线升级

如果控制节点不能联网,先把 release 包传到本地,再执行:

/usr/local/dbbot/bin/dbbotctl release upgrade --package /tmp/dbbot-v0.2.0.tar.gz

离线与在线只有“包从哪里来”不同,后续升级逻辑一致。

5. 当前版本会保留哪些内容

当前 dbbotctl release upgrade 会保留并回放下面这些本地状态:

  • mysql_ansible/inventory/
  • mysql_ansible/downloads/
  • mysql_ansible/playbooks/common_config.yml
  • mysql_ansible/playbooks/advanced_config.yml
  • mysql_ansible/playbooks/vars/
  • mysql_ansible/playbooks/logs/
  • clickhouse_ansible/inventory/
  • clickhouse_ansible/downloads/
  • clickhouse_ansible/playbooks/vars/
  • clickhouse_ansible/playbooks/logs/
  • monitoring_prometheus_ansible/inventory/
  • monitoring_prometheus_ansible/downloads/
  • monitoring_prometheus_ansible/playbooks/common_config.yml
  • monitoring_prometheus_ansible/playbooks/vars/
  • monitoring_prometheus_ansible/playbooks/logs/

其余受发行包管理的内容,例如 roles/、顶层 README、绿色版 Ansible、bin/dbbotctllibexec/,会按新版本替换。

6. 回滚

查看升级历史:

/usr/local/dbbot/bin/dbbotctl release history

回滚到最近一次升级快照:

/usr/local/dbbot/bin/dbbotctl release rollback

回滚到指定快照:

/usr/local/dbbot/bin/dbbotctl release rollback 20260321T235959Z_v0.2.0

升级快照保存在:

/usr/local/dbbot/.dbbotctl/snapshots/

每个快照目录下会包含:

  • root-before-upgrade.tar.gz:升级前完整快照
  • metadata.env:版本、来源、状态等元数据
  • packaged-preserved-paths/:升级前会被“保留文件”覆盖掉的新包模板副本

7. 当前实现边界

当前版本的升级命令已经解决了“在线/离线统一入口、自动快照、自动回滚、自检”这些痛点,但它还没有做 YAML 键级别的智能合并。

这意味着:

  • 你的旧配置会被保留下来,不会因为整包替换而直接丢失。
  • 新包里同路径的新模板副本会保存在快照目录,便于人工对比。
  • MySQL 和 Monitoring 因为本身有 default/* 兜底,新参数兼容性相对更好。
  • ClickHouse 变量文件当前仍建议在升级后重点复查。