大数据

Doris 2.1.x版本升级

元数据兼容性测试

注意

在生产环境中,建议保持 3 个以上的 FE 做高可用配置。如果只有 1 个 FE 节点,需要先做元数据兼容性测试后,再进行升级操作。元数据兼容非常重要,如果因为元数据不兼容导致的升级失败,能会导致数据丢失。建议每次升级前都进行元数据兼容性测试,在做元数据兼容性测试时,注意以下几点:

  • 建议在开发机或 BE 节点上做元数据兼容性测试,尽量避免在 FE 节点上做兼容性测试
  • 如果只能在 FE 节点上做兼容性测试,建议选择非 Master 节点,并停止原有 FE 进程

在升级前,建议进行元数据兼容性测试,防止升级过程中元数据不兼容导致的升级失败。

  1. 备份元数据信息:在开始升级工作前,需要备份 Master FE 节点的元数据信息。通过 show frontends 中 IsMaster 列可以判断 Master FE 节点。在备份 FE 元信息时,无需停止 FE 节点,可以直接热备份元信息。默认情况下,FE 元数据在 fe/doris-meta 目录下,可以通过 fe.conf 文件中 meta_dir 参数确定元数据目录。
  2. 修改测试用的 FE 的配置文件 fe.conf
vi ${DORIS_NEW_HOME}/conf/fe.conf

修改以下端口信息,将所有端口设置为与线上不同,同时修改 clusterID 参数:

...
## modify port
http_port = 18030
rpc_port = 19020
query_port = 19030
arrow_flight_sql_port = 19040
edit_log_port = 19010

## modify clusterIP
clusterId=<a_new_clusterID, such as 123456>
...

将备份的 Master FE 元数据拷贝到新的兼容性测试环境中

cp ${DORIS_OLD_HOME}/fe/doris-meta/* ${DORIS_NEW_HOME}/fe/doris-meta

将拷贝的元数据目文件中的 VERSION 文件中的 cluster_id 修改为新的 cluster ID,如在上例中修改为 123456:

vi ${DORIS_NEW_HOME}/fe/doris-meta/image/VERSION
clusterId=123456

在测试环境中启动 FE 进程

sh ${DORIS_NEW_HOME}/bin/start_fe.sh --daemon --metadata_failure_recovery

验证 FE 启动成功,通过 mysql 命令链接当前 FE,如上文中使用 query port 为 19030:

mysql -uroot -P19030 -h127.0.0.1

升级步骤

升级过程具体流程如下:

  1. 关闭副本修复与均衡功能
  2. 升级 BE 节点
  3. 升级 FE 节点
  4. 打开副本修复与均衡功能

升级过程中,要遵循先升级 BE、在升级 FE 的原则。在升级 FE 时,先升级 Observer FE 与 Follower FE 节点,再升级 Master FE 节点。

注意

Doris 只需要升级 FE 目录下的 /bin 和 /lib 以及 BE 目录下的 /bin 和 /lib

在 2.0.2 及之后的版本,FE 和 BE 部署路径下新增了 custom_lib/ 目录(如没有可以手动创建)。custom_lib/ 目录用于存放一些用户自定义的第三方 jar 包,如 hadoop-lzo-*.jarorai18n.jar 等。这个目录在升级时不需要替换。

第 1 步:关闭副本修复与均衡功能

在升级过程中会有节点重启,可能会触发不必要的集群均衡和副本修复逻辑,先通过以下命令关闭:

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

第 2 步:升级 BE 节点

备注:

为了保证您的数据安全,请使用 3 副本来存储您的数据,以避免升级误操作或失败导致的数据丢失问题。

在多副本的集群中,可以选择一台 BE 节点停止进程,进行灰度升级:

sh ${DORIS_OLD_HOME}/be/bin/stop_be.sh

重命名 BE 目录下的 /bin/lib 目录:

mv ${DORIS_OLD_HOME}/be/bin ${DORIS_OLD_HOME}/be/bin_back
mv ${DORIS_OLD_HOME}/be/lib ${DORIS_OLD_HOME}/be/lib_back

复制新版本的 /bin/lib 目录到原 BE 目录下:

cp -r ${DORIS_NEW_HOME}/be/bin ${DORIS_OLD_HOME}/be/bin
cp -r ${DORIS_NEW_HOME}/be/lib ${DORIS_OLD_HOME}/be/lib

启动该 BE 节点:

sh ${DORIS_OLD_HOME}/be/bin/start_be.sh --daemon

连接集群,查看该节点信息:

show backends\G

若该 BE 节点 alive 状态为 true,且 Version 值为新版本,则该节点升级成功。

第 3 步:升级 FE 节点

多个 FE 节点情况下,选择一个非 Master 节点进行升级,先停止运行:

sh ${DORIS_OLD_HOME}/fe/bin/stop_fe.sh

重命名 FE 目录下的 /bin/lib/mysql_ssl_default_certificate 目录:

mv ${DORIS_OLD_HOME}/fe/bin ${DORIS_OLD_HOME}/fe/bin_back
mv ${DORIS_OLD_HOME}/fe/lib ${DORIS_OLD_HOME}/fe/lib_back
mv ${DORIS_OLD_HOME}/fe/mysql_ssl_default_certificate ${DORIS_OLD_HOME}/fe/mysql_ssl_default_certificate_back

复制新版本的 /bin/lib/mysql_ssl_default_certificate 目录到原 FE 目录下:

cp -r ${DORIS_NEW_HOME}/fe/bin ${DORIS_OLD_HOME}/fe/bin
cp -r ${DORIS_NEW_HOME}/fe/lib ${DORIS_OLD_HOME}/fe/lib
cp -r ${DORIS_NEW_HOME}/fe/mysql_ssl_default_certificate ${DORIS_OLD_HOME}/fe/mysql_ssl_default_certificate

启动该 FE 节点:

sh ${DORIS_OLD_HOME}/fe/bin/start_fe.sh --daemon

连接集群,查看该节点信息:

show frontends\G

若该 FE 节点 alive 状态为 true,且 Version 值为新版本,则该节点升级成功。

依次完成其他 FE 节点升级,最后完成 Master 节点的升级

第 4 步:打开副本修复与均衡功能

升级完成,并且所有 BE 节点状态变为 Alive 后,打开集群副本修复和均衡功能:

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