跳到主要内容

升级

概述

本指南提供了使用存储计算解耦(即,存算分离)架构升级 Doris 的分步说明。升级请使用本章节中推荐的步骤进行集群升级,Doris 集群升级可使用滚动升级的方式进行升级,无需集群节点全部停机升级,极大程度上降低对上层应用的影响。

Doris 版本说明

Doris 使用三位数的版本号格式,可以使用如下 SQL 进行查看版本:

MySQL [(none)]> select @@version_comment;
+--------------------------------------------------------+
| @@version_comment |
+--------------------------------------------------------+
| Doris version doris-3.0.3-rc03-43f06a5e26 (Cloud Mode) |
+--------------------------------------------------------+

其中3.0.3的第一个数字表示大版本号,第二个数字表示中版本号,第三个数字表示小版本号,在某些情况下,版本号会变成 4 位,如2.0.2.1,此时的最后一位数字表示这是一个紧急修复 bug 的版本,这通常意味着这个小版本有一些重大的 bug。

Doris 从3.0.0版本开始支持存算分离模式部署,当以这种模式部署后,版本号后面会有 Cloud Mode 后缀,以存算一体模式启动的话,则没有这个后缀。

Doris 以存算分离模式部署之后,不支持切换成存算一体模式。同样的,存算一体模式的 Doris 也不支持切换成存算分离模式。

Doris 原则上支持从低版本升级到高版本,以及小版本降级,对于中版本或大版本,则不支持降级。

升级步骤

升级说明

  1. 确保你的 Doris 是以存算分离模式启动的,如果你不清楚当前的 Doris 是什么部署方式,可以参考上一小节的说明。 对于存算一体模式的 Doris,升级步骤可参考集群升级
  2. 确保你的 Doris 导数任务具备重试机制,以避免升级过程中,因节点重启而导致的导数任务失败。
  3. 在升级之前,我们建议你检查一下各个 Doris 组件(MetaService、Recycler、Frontend、Backend)的状态正常并且无异常日志,以免升级过程中受到影响。

升级流程概览

  1. 元数据备份
  2. 升级 MetaService
  3. 升级 Recycler(如有)
  4. 升级 BE
  5. 升级 FE
    1. 先升级 Observer 角色的 FE
    2. 再升级其他非 Master 角色的 FE
    3. 最后升级 Master 角色的 FE

升级前置工作

  1. 备份 Master FE 的元数据目录,元数据目录通常是 FE 目录下 doris-meta 目录,如果此目录为空,那么可能是修改了目录的位置,你可以到 FE 的配置文件(conf/fe.conf)中搜索meta_dir配置项。
  2. 从 Doris 官方网站下载安装包,建议校验 SHA-512 码,保证下载到到安装包与 Doris 官方提供的是一致的。

升级流程

1. 升级 MetaService

假设以下环境变量:

  • ${MS_HOME}:MetaService 的工作目录。
  • ${MS_PACKAGE_DIR}:包含新 MetaService 包的目录。

按照以下步骤升级每个 MetaService 实例。

1.1. 停止当前 MetaService:

cd ${MS_HOME}
sh bin/stop.sh

1.2. 备份现有 MetaService 二进制文件:

mv ${MS_HOME}/bin bin_backup_$(date +%Y%m%d_%H%M%S)
mv ${MS_HOME}/lib lib_backup_$(date +%Y%m%d_%H%M%S)

1.3. 部署新包:

cp ${MS_PACKAGE_DIR}/bin ${MS_HOME}/bin
cp ${MS_PACKAGE_DIR}/lib ${MS_HOME}/lib

1.4. 启动新的 MetaService:

sh ${MS_HOME}/bin/start.sh --daemon

1.5. 检查新 MetaService 的状态:

确保新 MetaService 正在运行,并且在 ${MS_HOME}/log/doris_cloud.out 中有新的版本号。

2. 升级 Recycler(如有)

警告

如果你没有单独部署 Recycler 组件,那么可以跳过这一步。

假设以下环境变量:

  • ${RECYCLER_HOME}:Recycler 的工作目录
  • ${MS_PACKAGE_DIR}:包含新 MetaService 包的目录,MetaService 和 Recycler 使用相同的包。

按照以下步骤升级每个 Recycler 实例。

2.1. 停止当前 Recycler:

cd ${RECYCLER_HOME}
sh bin/stop.sh

2.2. 备份现有 Recycler 二进制文件:

mv ${RECYCLER_HOME}/bin bin_backup_$(date +%Y%m%d_%H%M%S)
mv ${RECYCLER_HOME}/lib lib_backup_$(date +%Y%m%d_%H%M%S)

2.3. 部署新包:

cp ${RECYCLER_PACKAGE_DIR}/bin ${RECYCLER_HOME}/bin
cp ${RECYCLER_PACKAGE_DIR}/lib ${RECYCLER_HOME}/lib

2.4. 启动新的 Recycler:

sh ${RECYCLER_HOME}/bin/start.sh --recycler --daemon

2.5. 检查新 Recycler 的状态:

确保新 Recycler 正在运行,并且在 ${RECYCLER_HOME}/log/doris_cloud.out 中有新的版本号。

3. 升级 BE

验证所有 MetaService 和 Recycler(如果单独安装)实例已升级。

假设以下环境变量:

  • ${BE_HOME}:BE 的工作目录。
  • ${BE_PACKAGE_DIR}:包含新 BE 包的目录。

按照以下步骤升级每个 BE 实例。

3.1. 停止当前 BE:

cd ${BE_HOME}
sh bin/stop_be.sh

3.2. 备份现有 BE 二进制文件:

mv ${BE_HOME}/bin bin_backup_$(date +%Y%m%d_%H%M%S)
mv ${BE_HOME}/lib lib_backup_$(date +%Y%m%d_%H%M%S)

3.3. 部署新包:

cp ${BE_PACKAGE_DIR}/bin ${BE_HOME}/bin
cp ${BE_PACKAGE_DIR}/lib ${BE_HOME}/lib

3.4. 启动新的 BE:

sh ${BE_HOME}/bin/start_be.sh --daemon

3.5. 检查新 BE 的状态:

确认新的 BE 是否正在运行,并且使用新版本正常运行。可以使用以下 SQL 获取状态和版本。

show backends;

4. 升级 FE

验证所有 BE 实例已升级。

假设以下环境变量:

  • ${FE_HOME}:FE 的工作目录。
  • ${FE_PACKAGE_DIR}:包含新 FE 包的目录。

按以下顺序升级 Frontend(FE)实例:

  1. 观察者 FE 节点
  2. 非主 FE 节点
  3. 主 FE 节点

按照以下步骤升级每个 Frontend(FE)节点。

4.1. 停止当前 FE:

cd ${FE_HOME}
sh bin/stop_fe.sh

4.2. 备份现有 FE 二进制文件:

mv ${FE_HOME}/bin bin_backup_$(date +%Y%m%d_%H%M%S)
mv ${FE_HOME}/lib lib_backup_$(date +%Y%m%d_%H%M%S)

4.3. 部署新包:

cp ${FE_PACKAGE_DIR}/bin ${FE_HOME}/bin
cp ${FE_PACKAGE_DIR}/lib ${FE_HOME}/lib

4.4. 启动新的 FE:

sh ${FE_HOME}/bin/start_fe.sh --daemon

4.5. 检查新 FE 的状态:

确认新的 FE 是否正在运行,并且使用新版本正常运行。可以使用以下 SQL 获取状态和版本。

show frontends;

FAQ

  1. 存算一体模式的 Doris 的升级前需要关闭副本均衡功能,存算分离模式下的集群需要吗?

不需要。因为存算分离模式下,Doris 的数据存放在 HDFS 或 S3 服务上,因此不存在副本均衡的需求。

  1. 有了独立的 MetaService 提供元数据服务,为什么 FE 还需要备份元数据?

因为目前 MetaService 保存了一部分元数据,FE 也保存了一部分元数据,为了稳妥起见,我们建议备份 FE 的元数据。