1 基础知识
Doris 数据备份与恢复依赖于插件 FS_broker ,插件可以独立于 Doris 部署,Doris 官方 默认提供了读取 HDFS 、百度云 BOS 及 Amazon S3 的 fs_broker,不过需要我们自行做编译,且开源版的 Doris 仅支持 HDFS 。因此我们想对 Doris 做数据迁移前,需要先搭建一个 HDFS。
2 准备工作
一台 4c8g CentOS 7.x 服务器
docker 离线安装包 链接: https://pan.baidu.com/s/1pQOtdR-zSteCe-OhI_sXLA 密码: 719d
hadoop 容器镜像 链接: https://pan.baidu.com/s/1nAtd22X1qkynZ4e5riyv7Q 密码: oat4
Doris 开发镜像 链接: https://pan.baidu.com/s/1qtL76S8eKbZblIqLEVCx9w 密码: avov
Doris 源码包 链接: https://pan.baidu.com/s/15YN2UCmHC3uBqRzzJXTeIQ 密码: eqag
将 docker 离线安装包 、hadoop 容器镜像、Doris 开发镜像、Doris 源码包均上传到服务器上备用。
3 编译 fs_broker
编译 fs_broker 链接: https://pan.baidu.com/s/1UKCoXcugr5K1yR8JdiJn3A 密码: 4sne
fs_broker 已编译好,内网环境或者急用的可直接下载,无需继续往下
解压 docker 离线包并安装 docker
unzip docker_offline.zip && sh docker_offline/install.sh
加载 Doris 开发镜像
docker load -i doris.tar
启动 Doris 开发容器
docker run -it --name doris-node -h doris-node --network host --privileged -d apache/incubator-Doris:build-env-1.4.1
将 Doris 源码包拷贝至容器内部
docker cp apache-doris-0.15.0-incubating-src.tar.gz doris-node:/tmp
进入 Doris-node 容器,编译 fs_broker
cd /tmp/
tar -zxvf apache-doris-0.15.0-incubating-src.tar.gz
cd apache-doris-0.15.0-incubating-src/fs_brokers/apache_hdfs_broker
sh build.sh
接下来就是漫长的等待,编译时间大概要持续 30 分钟左右,完成后目录下会多出一个 output 文件夹,如下图所示:
压缩 output 文件夹并将其拷贝到我们的宿主机上,fs_broker 就编译完成了。
tar -zcvf output.tar output
#退出容器
exit
docker cp doris-node:/tmp/apache-Doris-0.15.0-incubating-src/fs_brokers/apache_hdfs_broker/output.tar /tmp
4 搭建单机版 hadoop
加载 hadoop 镜像,并启动 hadoop 容器
docker load -i hadoop.tar
docker run -i -t --name hadoop --network host -d sequenceiq/hadoop-docker:2.6.0
安装broker :
5 启动 fs_broker
将编译好的 fs_broker 上传到 DataEase 的服务器,并且拷贝到 doris-fe 容器内部
#拷贝
docker cp output.tar doris-fe:/tmp
#解压
tar -xvf output.tar
#启动 broker
cd output/apache_hdfs_broker
sh bin/start_broker.sh --daemon
6 往 Doris 里添加 fs_broker
在 doris-fe 内部执行以下命令,连接 Doris
mysql -u root -P9030 -h doris-fe -pPassword123@Doris
执行以下命令添加 名为 hdfs_broker 的 broker
ALTER SYSTEM add BROKER hdfs_broker "Doris-fe:8000";
添加完成后,执行以下命令查看 broker 状态
show proc "/brokers";
当观察到 Alive 状态为 true 时,broker 即安装成功。
7 创建远端仓库
执行以下命令创建远端仓库,注意,IP 替换为 hadoop 所在服务器的 IP
CREATE REPOSITORY `hdfs_repo`
WITH BROKER `hdfs_broker`
ON LOCATION "hdfs://IP:9000/hdfs_repo/"
PROPERTIES
(
"username" = "root",
"password" = ""
);
创建完成后,执行一下命令查看远端仓库是否成功建立
show repositories;
同时,我们可以去 hadoop web 页面查看下备份文件夹是否成功建立。
访问:http://ip:50070,查看到 hdfs_repo 的文件夹,即说明远端仓库建立成功。
8 创建备份任务
Doris 备份任务仅可针对表来进行,可以同时备份多张表,因此我们需要将 DataEase 中所有的表以 “,” 拼接。
在 Doris 库里执行以下命令,查询出表名合集。
use dataease;
select group_concat(table_name) from information_schema.tables where table_schema='dataease';
注意:将复制查询出来的结果集,替换到以下命令的 tables 里。
BACKUP SNAPSHOT dataease.dataease_snapshot_0328 TO hdfs_repo ON (tables);
执行以下命令查看备份任务状态及进度
show backup;
注意观察两个字段,state (备份任务状态),Progress (备份进度),当 state 为 FINISHED 时备份即已完成。
9 创建恢复任务
使用任意 MySQL 客户端连接目标 Doris
在目标 Doris 里创建远端仓库,注意:命令必须同源 Doris 里创建远端仓库一样。
CREATE REPOSITORY `hdfs_repo`
WITH BROKER `hdfs_broker`
ON LOCATION "hdfs://IP:9000/hdfs_repo/"
PROPERTIES
(
"username" = "root",
"password" = ""
);
接着执行一下命令查看已备份的快照
show snapshot on hdfs_repo;
接着我们执行恢复任务,如果数据库没有创建,首先创建数据库
create database dataease;
use dataease;
执行恢复任务,注意:tables 同备份时的 tables , backup_timestamp 的值为上一步查询出来的快照的 Timestamp。
RESTORE SNAPSHOT dataease_snapshot_0328 FROM `hdfs_repo` ON (tables) PROPERTIES ("backup_timestamp"="2022-03-28-15-12-47");
执行以下命令查看恢复任务状态
show restore;
待 state 状态变为 FINISHED 时,快照即恢复完成。
此时就可以修改原本 DataEase 的 Doris 连接,指向新的 Doris 了。