文章
Doris 2.1.x版本升级
元数据兼容性测试
注意
在生产环境中,建议保持 3 个以上的 FE 做高可用配置。如果只有 1 个 FE 节点,需要先做元数据兼容性测试后,再进行升级操作。元数据兼容非常重要,如果因为元数据不兼容导致的升级失败,能会导致数据丢失。建议每次升级前都进行元数据兼容性测试,在做元数据兼容性测试时,注意以下几点:
- 建议在开发机或 BE 节点上做元数据兼容性测试,尽量避免在 FE 节点上做兼容性测试
- 如果只能在 FE 节点上做兼容性测试,建议选择非 Master 节点,并停止原有 FE 进程
在升级前,建议进行元数据兼容性测试,防止升级过程中元数据不兼容导致的升级失败。
- 备份元数据信息:在开始升级工作前,需要备份 Master FE 节点的元数据信息。通过
show frontends
中IsMaster
列可以判断 Master FE 节点。在备份 FE 元信息时,无需停止 FE 节点,可以直接热备份元信息。默认情况下,FE 元数据在fe/doris-meta
目录下,可以通过fe.conf
文件中meta_dir
参数确定元数据目录。 - 修改测试用的 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
升级步骤
升级过程具体流程如下:
- 关闭副本修复与均衡功能
- 升级 BE 节点
- 升级 FE 节点
- 打开副本修复与均衡功能
升级过程中,要遵循先升级 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-*.jar
,orai18n.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");