Starrocks版本升级

时间:2021-07-14 00:38:27

升级集群

您可以通过滚动升级的方式平滑升级 StarRocks。StarRocks 的版本号遵循 Major.Minor.Patch 的命名方式,分别代表重大版本,大版本以及小版本。

注意

  • 由于 StarRocks 保证 BE 后向兼容 FE,因此您需要先升级 BE 节点,再升级 FE 节点。错误的升级顺序可能导致新旧 FE、BE 节点不兼容,进而导致 BE 节点停止服务。
  • StarRocks 2.0 之前的大版本升级时必须逐个大版本升级,2.0 之后的版本可以跨大版本升级。更为推荐的稳妥方式是逐个版本升级,比如 1.19->2.0->2.1->2.2->2.3->2.4。StarRocks 2.2 和 2.5 是当前的长期支持版本(Long Term Support,LTS),维护期为半年以上。

版本可直接升级版本注意事项是否为 LTS 版本1.18.x更早版本需要按照 标准版 DorisDB 升级到社区版 StarRocks 操作。否1.19.x必须从1.18.x升级否2.0.x必须从1.19.x升级升级过程中需要暂时关闭 Clone。否2.1.x必须从2.0.x 升级灰度升级前需要修改 vector_chunk_size 和 batch_size。否2.2.x可以从2.0.x 或 2.1.x 升级回滚需要配置 ignore_unknown_log_id 为 true。是2.3.x可以从2.0.x、2.1.x 或 2.2.x 升级不建议跨版本回滚。回滚需要配置 ignore_unknown_log_id 为 true。否2.4.x可以从2.0.x、2.1.x、2.2.x 或 2.3.x 升级不建议跨版本回滚。如果您开启了 FQDN 访问,需先将集群修改为 IP 地址访问。否2.5.x可以从2.0.x、2.1.x、2.2.x、2.3.x 或 2.4.x 升级不建议跨版本回滚。如果您系统内有 LIST 分区表,需要先删除再回滚。是

下载安装文件

在完成数据正确性验证后,将新版本的 BE 和 FE 节点的安装包下载并分发至各自路径下。您也可以 ​​在 Docker 中编译​​ 对应 tag 的源码。建议您选择小版本号最高的版本。

升级 BE 前的准备

为了避免 BE 重启期间不必要的 Tablet 修复,进而影响升级后的集群性能,建议在升级前先在 Leader FE 上执行如下命令以禁用 Tablet 调度功能,

admin set frontend config ("max_scheduling_tablets"="0");
admin set frontend config ("disable_balance"="true");
admin set frontend config ("disable_colocate_balance"="true");

所有 BE 重启升级完成后,通过 show backends 命令确认所有 BE 的 Alive 状态为 true 后,启用 Tablet 调度功能,

admin set frontend config ("max_scheduling_tablets"="2000");
admin set frontend config ("disable_balance"="false");
admin set frontend config ("disable_colocate_balance"="false");

测试 BE 升级的正确性

  1. 选择任意一个 BE 节点,停止该节点。
  2. 替换改节点路径下的 bin 和 lib 文件夹。
  3. 启动该 BE 节点,通过 BE 日志 be.INFO 查看是否启动成功。
  4. 如果该 BE 节点启动失败,您可以先排查失败原因。如果错误不可恢复,您可以直接通过 

DROP BACKEND

  1.  删除该 BE、清理数据后,使用上一个版本的 starrocks_be 重新启动该 BE 节点。然后通过 

ADD BACKEND

  1.  重新添加 BE 节点。

警告

该方法会导致系统丢失一个数据副本,请务必确保 3 个副本完整的情况下执行这个操作。

升级 BE 节点

  1. 进入 BE 路径,停止 BE 节点。
cd StarRocks-x.x.x/be
sh bin/stop_be.sh
  1. 替换 BE 节点相关文件。

注意

BE 节点小版本升级中(例如从 2.0.x 升级到 2.0.y),您只需升级 /lib/starrocks_be。而大版本升级中(例如从 2.0.x 升级到 2.x.x),您需要替换 BE 节点路径下的 bin 和 lib 文件夹。

  1. 以下示例以大版本升级为例。
mv lib lib.bak 
mv bin bin.bak
cp -r /tmp/StarRocks-x.x.x/be/lib .
cp -r /tmp/StarRocks-x.x.x/be/bin .
  1. 启动 BE 节点。
sh bin/start_be.sh --daemon
  1. 确认当前节点启动成功。
ps aux | grep starrocks_be
  1. 重复以上步骤,升级其他 BE 节点。

测试 FE 升级的正确性

注意

由于 FE 元数据极其重要,而升级出现异常可能导致所有数据丢失,请谨慎升级。

  1. 在测试开发环境中单独使用新版本部署一个测试用的 FE 进程。
  2. 修改测试用的 FE 的配置文件 fe.conf,将所有端口设置为与生产环境不同。
  3. 在 fe.conf 添加配置 

cluster_id = 123456

  1. 在 fe.conf 添加配置 

metadata_failure_recovery = true

  1. 拷贝生产环境中 Leader FE 的元数据路径 meta 到测试环境。
  2. 修改测试环境中 meta/image/VERSION 文件中的 

cluster_id

  1.  为 

123456

  1. (即与第 3 步中相同)。
  2. 在测试环境中,运行 

sh bin/start_fe.sh

  1.  启动 FE。
  2. 通过 FE 日志 fe.log 验证测试 FE 节点是否成功启动。
  3. 如果启动成功,运行 

sh bin/stop_fe.sh

  1.  停止测试环境的 FE 节点进程。

说明

以上第 2 至 第 6 步的目的是防止测试环境的 FE 启动后,错误连接到线上环境中。

升级 FE 节点

升级 FE 集群时,您需要先升级各 Follower FE 节点,最后升级 Leader FE 节点,从而在 Follower FE 节点升级失败时可以提前发现问题,防止其影响集群查询功能。

  1. 进入 FE 路径,停止 FE 节点。
cd StarRocks-x.x.x/fe
sh bin/stop_fe.sh
  1. 替换 FE 相关文件。

注意

FE 节点小版本升级中(例如从 2.0.x 升级到 2.0.y),您只需升级 /lib/starrocks-fe.jar。而大版本升级中(例如从 2.0.x 升级到 2.x.x),您需要替换 FE 节点路径下的 binlib 和 spark-dpp 文件夹。

  1. 以下示例以大版本升级为例。
mv lib lib.bak 
mv bin bin.bak
cp -r /tmp/StarRocks-x.x.x/fe/lib .
cp -r /tmp/StarRocks-x.x.x/fe/bin .
cp -r /tmp/StarRocks-x.x.x/fe/spark-dpp .
  1. 启动 FE 节点。
sh bin/start_fe.sh --daemon
  1. 确认当前节点启动成功。
ps aux | grep StarRocksFE
  1. 重复以上步骤,升级其他 Follower FE 节点,并最后升级 Leader FE 节点。

升级 CN 节点

升级 CN 节点时,您需要根据升级的版本,选择对应的升级方式:

  • 如果为小版本升级(例如从 2.0.x 升级到 2.0.y),则只需要替换二进制文件 /lib/starrocks_be,然后重启服务。
  • 如果为大版本升级 (例如从 2.0.x 升级到 2.x.x),您需要替换 BE 节点路径下的 bin 和 lib 文件夹。

以下示例以大版本升级为例。

  1. 进入 CN 路径,停止 CN 节点。推荐使用 graceful 的停止方式。使用该种方式停止,CN 会等待当前运行的任务运行结束后再退出进程。
cd StarRocks-x.x.x/be
sh bin/stop_cn.sh --graceful
  1. 替换 CN 节点相关文件。
mv lib lib.bak 
mv bin bin.bak
cp -r /tmp/StarRocks-x.x.x/be/lib .
cp -r /tmp/StarRocks-x.x.x/be/bin .
  1. 启动 CN 节点。
sh bin/start_cn.sh --daemon
  1. 确认当前节点启动成功。
ps aux | grep starrocks_be
  1. 重复以上步骤,升级其他 CN 节点。

升级 Broker

  1. 进入 Broker 路径,停止 Broker 节点。
cd StarRocks-x.x.x/apache_hdfs_broker
sh bin/stop_broker.sh
  1. 替换 Broker 相关文件。
mv lib lib.bak 
mv bin bin.bak
cp -r /tmp/StarRocks-x.x.x/apache_hdfs_broker/lib .
cp -r /tmp/StarRocks-x.x.x/apache_hdfs_broker/bin .
  1. 启动 Broker 节点。
sh bin/start_broker.sh --daemon
  1. 在升级下一台实例之前,您需要确认当前实例启动成功。

关于 StarRocks 1.19 升级至 2.0.x

如果您需要将 StarRocks 1.19 升级至 2.0.x,您必须在升级过程中关闭 Clone 以避免触发旧版本中的 Bug。该操作同样适用于从 StarRocks 2.1.5 或之前版本升级至 2.1.6 或之后版本。

升级开始前,您需要关闭 Clone。

ADMIN SET FRONTEND CONFIG ("max_scheduling_tablets" = "0");
ADMIN SET FRONTEND CONFIG ("max_balancing_tablets" = "0");

升级结束后,开启 Clone。

ADMIN SET FRONTEND CONFIG ("max_scheduling_tablets" = "2000");
ADMIN SET FRONTEND CONFIG ("max_balancing_tablets" = "100");

关于 StarRocks 2.0.x 灰度升级至 2.1.x

如果您需要将 StarRocks 2.0 灰度升级至 2.1,则必须确保所有 BE 节点拥有一致的 chunk size,即 BE 节点在每个批次中处理数据的行数。

  1. 在配置文件 conf/be.conf 中,将所有 BE 节点的配置项 

vector_chunk_size

  1.  设为 

4096

  1. (默认值为 4096,单位为行)。配置项修改将在重启后生效。
  2. 为 FE 节点设定全局变量 

batch_size

  1.  小于或等于 

4096

  1. (默认值和建议值为 4096,单位为行)。

示例:

-- 查询 batch_size
mysql> show variables like '%batch_size%';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| batch_size | 1024 |
+---------------+-------+
1 row in set (0.00 sec)

-- 设置 batch_size
mysql> set global batch_size = 4096;

故障排除

Q:升级 StarRocks 2.0 至 2.1 及后期版本后,通过 Stream Load 将 JSON 格式的 BOOLEAN 类型数据导入至整形列中返回 NULL。我该如何处理?

A:StarRocks 2.0 版本将所有字段作为字符串解析,然后进行类型转换。将执行格式为 JSON 且类型为 BOOLEAN 的数据(true 和 false)导入至整形列中时,StarRocks 2.0 会将数据转化为 0 和 1 后导入。StarRocks 2.1 及后期版本重制了 JSON Parser,直接按照目标列类型提取 JSON 字段,从而导致最终得到的数据为 NULL。您可以通过在导入命令 columns 项中添加表达式 tmp, target=if(tmp,1,0) 解决该问题。完整导入命令如下:

curl --location-trusted -u root:
-H "columns: <col_name_1>, <col_name_2>, <tmp>, <col_name_3>=if(<tmp>,1,0)"
-T demo.csv -XPUT
http://<fe_ip>:<fe_http_port>/api/<db_name>/<table_name>/_stream_load

回滚集群

您可以通过命令回滚 StarRocks 版本,回滚范围包括所有安装包名为 StarRocks-xx 的版本。当升级后发现出现异常状况,不符合预期,想快速恢复服务的,可以按照下述操作回滚版本。

注意

回滚操作与升级操作的顺序相反,应当先回滚 FE 节点,再回滚 BE 节点 。错误的回滚顺序可能导致新旧 FE、BE 节点不兼容,进而导致 BE 节点停止服务。

前置工作

回滚 StarRocks 2.2 及以后版本前,您需要在所有 FE 节点的配置文件 fe.conf 中增加配置项 ignore_unknown_log_id=true,否则回滚后系统可能无法启动。重启 StarRocks,CheckPoint 完成后,您需要将该设置项恢复为 ignore_unknown_log_id=false,然后重启 FE 以恢复正常配置。

下载安装文件

在完成数据正确性验证后,将需要回滚的旧版本 BE 和 FE 节点安装包下载并分发至各自路径下。

回滚 FE 节点

您需要先回滚各 Follower FE 节点,最后回滚 Leader FE 节点。以下示例以大版本回滚为例。

注意

  • FE 节点小版本回滚中(例如从 2.0.y 回滚到 2.0.x),您只需回滚 /lib/starrocks-fe.jar
  • FE 节点大版本回滚中(例如从 2.x.x 升级到 2.0.x),您需要替换 FE 节点路径下的 binlib 和 spark-dpp 文件夹。
  • 从 2.1.x 回滚至 2.0.x及以前版本需要通过以下命令关闭 pipeline:

set global enable_pipeline_engine = false

  1. 进入 FE 路径,停止 FE 节点。
cd StarRocks-x.x.x/fe
sh bin/stop_fe.sh
  1. 替换 FE 相关文件。
mv lib lib.bak 
mv bin bin.bak
cp -r /tmp/StarRocks-x.x.x/fe/lib .
cp -r /tmp/StarRocks-x.x.x/fe/bin .
cp -r /tmp/StarRocks-x.x.x/fe/spark-dpp .
  1. 启动 FE 节点。
sh bin/start_fe.sh --daemon
  1. 确认当前节点启动成功。
ps aux | grep StarRocksFE
  1. 重复以上步骤,回滚其他 Follower FE 节点,并最后回滚 Leader FE 节点。

回滚 BE 节点前的准备

为了避免 BE 重启期间不必要的 Tablet 修复,进而影响回滚后的集群性能,建议在回滚前先在 Leader FE 上执行如下命令以禁用 Tablet 调度功能,

admin set frontend config ("max_scheduling_tablets"="0");
admin set frontend config ("disable_balance"="true");
admin set frontend config ("disable_colocate_balance"="true");

所有 BE 重启回滚完成后,通过 show backends 命令确认所有 BE 的 Alive 状态为 true 后,启用 Tablet 调度功能,

admin set frontend config ("max_scheduling_tablets"="2000");
admin set frontend config ("disable_balance"="false");
admin set frontend config ("disable_colocate_balance"="false");

回滚 BE 节点

以下示例以大版本回滚为例。

注意

BE 节点小版本回滚中(例如从 2.0.y 回滚到 2.0.x),您只需回滚 /lib/starrocks_be。而大版本回滚中(例如从 2.x.x 升级到 2.0.x),您需要替换 BE 节点路径下的 bin 和 lib 文件夹。

  1. 进入 BE 路径,停止 BE 节点。
cd StarRocks-x.x.x/be
sh bin/stop_be.sh
  1. 替换 BE 节点相关文件。
mv lib lib.bak 
mv bin bin.bak
cp -r /tmp/StarRocks-x.x.x/be/lib .
cp -r /tmp/StarRocks-x.x.x/be/bin .
  1. 启动 BE 节点。
sh bin/start_be.sh --daemon
  1. 确认当前节点启动成功。
ps aux | grep starrocks_be
  1. 重复以上步骤,回滚其他 BE 节点。

回滚 Broker

  1. 进入 Broker 路径,停止 Broker 节点。
cd StarRocks-x.x.x/apache_hdfs_broker
sh bin/stop_broker.sh
  1. 替换 Broker 相关文件。
mv lib lib.bak 
mv bin bin.bak
cp -r /tmp/StarRocks-x.x.x/apache_hdfs_broker/lib .
cp -r /tmp/StarRocks-x.x.x/apache_hdfs_broker/bin .
  1. 启动 Broker 节点。
sh bin/start_broker.sh --daemon
  1. 在升级下一台实例之前,您需要确认当前实例启动成功。