Apache Doris 元数据恢复

作者: 张家锋

1. 元数据恢复

Apache Doris在实际使用中可能是因为某些原因 FE(Frontend)出现无法启动 bdbje、FE 之间元数据无法同步等问题。故障表现包括:无法进行元数据写操作、没有 MASTER 等等,这时就需要手动恢复 FE。

重要提示

当前元数据的设计是无法向后兼容的。即如果新版本有新增的元数据结构变动(可以查看 FE 代码中的 FeMetaVersion.java 文件中是否有新增的 VERSION),那么在升级到新版本后,通常是无法再回滚到旧版本的。所以,在升级 FE 之前,请务必按照 集群部署升级章节中的操作,测试元数据兼容性。

1.1 恢复原理

手动恢复 FE 的大致原理,是先通过当前 FE meta_dir 中的元数据,找出元数据版本最新的元数据,使用元数据恢复模式启动,然后其他FE,重新作为一个新的FE节点添加到集群中。

如果你是单节点FE集群,直接通过元数据恢复模式启动,在FE的fe.conf中添加metadata_failure_recovery=true参数,重新启动FE即可

1.2 恢复示例

这里我们以一个高可用的Doris集群为例(三个FE Follower)为例进行讲解。

整个操作步骤请严格按照下面的步骤进行:

1.2.1 停止所有 FE 进程,

首先要停止所有FE进程,同时停止一切业务访问。保证在元数据恢复期间,不会因为外部访问导致其他不可预期的问题造成元数据不一致。

1.2.2 找出元数据版本最新的FE节点

  • 进入到每个FE节点的元数据目录(fe.conf中配置的meta_dir目录)
  • 备份整个元数据目录,防止在操作过程中的误操作导致元数据损坏
  • 通常情况下在集群出问题之前的FE Master节点,元数据版本是最新的。
  • 确保你操作的节点元数据版本是最新的可以通过查看你元数据目录下的image目录,image.xxxx 文件的后缀,数字越大,则表示元数据越新,如下所示:

tree

. ├── bdb │ ├── 000039e7.jdb │ ├── 00003a03.jdb │ ├── 00003a14.jdb │ ├── 00003a2e.jdb │ ├── 00003a5b.jdb │ ├── 00003a63.jdb │ ├── 00003aff.jdb … │ ├── 000041cb.jdb │ ├── 000041cc.jdb │ ├── je.config.csv │ ├── je.info.0 │ ├── je.info.0.lck │ ├── je.lck │ ├── je.stat.0.csv … │ ├── je.stat.8.csv │ └── je.stat.csv └── image

├── image.186235646
├── ROLE
└── VERSION
现在,我们要使用这个拥有最新元数据的 FE 节点,进行恢复,这里要确保是 FOLLOWER 节点恢复,而不是Observer节点,如果使用 OBSERVER 节点的元数据进行恢复会比较麻烦,cat ROLE(image文件夹下的ROLE文件)可以看到该节点角色

#### 1.2.3 在元数据版本最新的节点开始执行恢复操作
1. 在 fe.conf 中添加配置:`metadata_failure_recovery=true`
   `metadata_failure_recovery=true` 的含义是,清空 "bdbje" 的元数据。这样 bdbje 就不会再联系之前的其他 FE ,而作为一个独立的 FE 启动。这个参数只有在恢复启动时才需要设置为 true。恢复完成后,一定要设置为 false,否则一旦重启,bdbje 的元数据又会被清空,导致其他 FE 无法正常工作
2.  执行 `sh bin/start_fe.sh --daemon`,启动该FE,然后验证是否正常启动,可以通过log/fe.out日志看到,
3.  启动正常之后,先连接到这个 FE,执行一些查询导入,检查是否能够正常访问。如果不正常,有可能是操作有误,查看FE启动日志,排查问题后重新启动FE。 
4. 如果成功,通过 `show frontends;` 命令,应该可以看到之前集群所添加的所有 FE,并且当前 FE 是 master 
5. 然后将fe.conf 中的配置:`metadata_failure_recovery=true`,改成 false,重启改节点FE,验证是否启动成功,如果启动成功,执行下面的步骤。 
6. 通过Mysql 客户端连接当前FE,执行`ALTER SYSTEM DROP FOLLOWER "IP:edit_log_port"` 将其他的FE从集群中删除
7.  进入其他的FE节点,将改节点的元数据先备份,然后清空元数据目录下的数据 
8. 清空元数据目录之后,执行 `sh bin/start_fe.sh --helper "master_FE_IP:edit_log_port" --daemon`作为一个新节点加入到集群中 
9. 在通过Mysql 客户端连接刚才的Master FE,执行`ALTER SYSTEM DROP FOLLOWER "IP:edit_log_port"` 将改FE节点加入到集群中, 
10. 观察新加入的FE节点日志log/fe.out,fe.log,如果正常启动,将自己转换成Follower,并且开始从Master同步元数据,说明启动征程
    3.11 另外其他的FE节点的接入方法一样

#### 1.2.4 从Observer恢复

如果你的集群只有一个FE Follower节点,元数据已经损坏没办法恢复,但是你有FE Observer,这时可以尝试通过Observer来进行恢复集群。
1. 先将 meta_dir/image/ROLE 文件中的 `role=OBSERVER` 改为 `role=FOLLOWER 
2. 然后执行上面章节的步骤前三步 (1.2.3章节1-3步骤) 
3. 如果是用一个 OBSERVER 节点的元数据进行恢复的,那么完成如上步骤后,`show frontends;` 会发现,当前这个 FE 的角色为 OBSERVER,但是 IsMaster 显示为 true。这是因为,这里看到的 “OBSERVER” 是记录在 Doris 的元数据中的,而是否是 master,是记录在 bdbje 的元数据中的。因为我们是从一个 OBSERVER 节点恢复的,所以这里出现了不一致。这种内部不一致的状态,不能支持后续的导入等修改操作,所以,还需要继续按以下步骤修复: 
4.  先把除了这个 `OBSERVER`以外的所有 FE 节点 DROP 掉。 
5.  通过 `ADD FOLLOWER` 命令,添加一个新的 FOLLOWER FE,假设在 Doris_FE_A 上 
6. 在 Doris_FE_A 上启动一个全新的 FE,通过 --helper 的方式加入集群,这里的--helper参数里的master IP地址就是你刚才恢复的Observer的这台机器的IP地址 
7. 启动成功后,通过 `show frontends;` 语句,你应该能看到两个 FE,一个是之前的 OBSERVER,一个是新添加的 FOLLOWER,并且 OBSERVER 是 master 
8. 确认这个新的 FOLLOWER 是可以正常工作之后,用这个新的 FOLLOWER 的元数据,然后停掉原先Observer这台机器上的FE,并通过`ALTER SYSTEM DROP OBSERVER`方式删除掉 
9. 在重新添加启动一个新的Observer,即可

## 文章列表
- [获得Apache Doris社区之星](https://www.oomspot.com/post/huodeapachedorisshequzhixing)
- [自己写的一个BI可视化系统(支持Apache Doris)](https://www.oomspot.com/post/zijixiedeyigebikeshihuaxitongzhichiapachedoris)
- [神仙打架海底捞火了](https://www.oomspot.com/post/shenxiandajiahaidilaohuole)
- [数据治理方案](https://www.oomspot.com/post/shujuzhilifangan)
- [怎么进行数据仓库分层设计及设计规范](https://www.oomspot.com/post/zenmejinxingshujucangkufencengshejijishejiguifan)
- [实现通过Flink Mysql CDC结合Apache doris flink connector实现数据实时入库](https://www.oomspot.com/post/shixiantongguoflinkmysqlcdcjieheapachedorisflinkco)
- [如何构建公司的数据指标体系](https://www.oomspot.com/post/ruhegoujiangongsideshujuzhibiaotixi)
- [基于Apache-doris怎么构建数据中台(四)-数据接入系统](https://www.oomspot.com/post/jiyuapachedoriszenmegoujianshujuzhongtaisishujujie)
- [基于Apache-doris怎么构建数据中台(六)-数据服务](https://www.oomspot.com/post/jiyuapachedoriszenmegoujianshujuzhongtailiushujufu)
- [基于Apache-doris怎么构建数据中台(八)-数仓管理](https://www.oomspot.com/post/jiyuapachedoriszenmegoujianshujuzhongtaibashucangg)
- [基于Apache-doris怎么构建数据中台(五)-数据质量](https://www.oomspot.com/post/jiyuapachedoriszenmegoujianshujuzhongtaiwushujuzhi)
- [基于Apache doris怎么构建数据中台(二)-数据中台建设内容](https://www.oomspot.com/post/jiyuapachedoriszenmegoujianshujuzhongtaiershujuzho)
- [基于Apache doris怎么构建数据中台(九)-数据安全](https://www.oomspot.com/post/jiyuapachedoriszenmegoujianshujuzhongtaijiushujuan)
- [基于Apache doris怎么构建数据中台(三)-数据资产管理](https://www.oomspot.com/post/jiyuapachedoriszenmegoujianshujuzhongtaisanshujuzi)
- [基于Apache doris怎么构建数据中台(一)-什么是数据中台](https://www.oomspot.com/post/jiyuapachedoriszenmegoujianshujuzhongtaiyishenmesh)
- [基于Apache Doris怎么构建数据中台(七)-数据指标管理](https://www.oomspot.com/post/jiyuapachedoriszenmegoujianshujuzhongtaiqishujuzhi)
- [参与开源两年来的感悟](https://www.oomspot.com/post/canyukaiyuanliangnianlaideganwu)
- [元数据管理系统](https://www.oomspot.com/post/yuanshujuguanlixitong)
- [使用supervisor实现Apache Doris进程自动拉起](https://www.oomspot.com/post/shiyongsupervisorshixianapachedorisjinchengzidongl)
- [使用Grafana监控Apache Doris](https://www.oomspot.com/post/shiyonggrafanajiankongapachedoris)
- [link 使用 SQL 读取 Kafka 利用Doris Flink Connector写入到Doris表中](https://www.oomspot.com/post/linkshiyongsqlduqukafkaliyongdorisflinkconnectorxi)
- [[Doris 社区的访谈]一个人可能走得更快,但一群人会走得更远](https://www.oomspot.com/post/dorisshequdefangtanyigerenkenengzoudegengkuaidanyi)
- [Doris Grafana监控指标介绍](https://www.oomspot.com/post/dorisgrafanajiankongzhibiaojieshao)
- [Apache doris架构及组件介绍](https://www.oomspot.com/post/apachedorisjiagoujizujianjieshao)
- [Apache doris 错误代码说明](https://www.oomspot.com/post/apachedoriscuowudaimashuoming)
- [Apache doris 使用过程中常见问题汇总](https://www.oomspot.com/post/apachedorisshiyongguochengzhongchangjianwentihuizo)
- [Apache doris ODBC外表使用方式](https://www.oomspot.com/post/apachedorisodbcwaibiaoshiyongfangshi)
- [Apache doris ODBC mysql外表注意事项](https://www.oomspot.com/post/apachedorisodbcmysqlwaibiaozhuyishixiang)
- [Apache doris FE使用ProxySQL实现负载均衡](https://www.oomspot.com/post/apachedorisfeshiyongproxysqlshixianfuzaijunheng)
- [Apache doris Datax DorisWriter扩展使用方法](https://www.oomspot.com/post/apachedorisdataxdoriswriterkuozhanshiyongfangfa)
- [Apache doris BE配置参数说明](https://www.oomspot.com/post/apachedorisbepeizhicanshushuoming)
- [Apache Doris数据模型](https://www.oomspot.com/post/apachedorisshujumoxing)
- [Apache Doris数据备份及恢复](https://www.oomspot.com/post/apachedorisshujubeifenjihuifu)
- [Apache Doris常见问题答疑(二)](https://www.oomspot.com/post/apachedorischangjianwentidayier)
- [Apache Doris常见问题答疑(一)](https://www.oomspot.com/post/apachedorischangjianwentidayiyi)
- [Apache Doris安装部署](https://www.oomspot.com/post/apachedorisanzhuangbushu)
- [Apache Doris在蜀海供应链数仓建设中的实践](https://www.oomspot.com/post/apachedoriszaishuhaigongyinglianshucangjianshezhon)
- [Apache Doris关系模型与数据划分](https://www.oomspot.com/post/apachedorisguanximoxingyushujuhuafen)
- [Apache Doris 环境安装部署](https://www.oomspot.com/post/apachedorishuanjinganzhuangbushu)
- [Apache Doris 物化视图介绍](https://www.oomspot.com/post/apachedoriswuhuashitujieshao)
- [Apache Doris 数据更新操作](https://www.oomspot.com/post/apachedorisshujugengxincaozuo)
- [Apache Doris 数据导出](https://www.oomspot.com/post/apachedorisshujudaochu)
- [Apache Doris 数据导入总览](https://www.oomspot.com/post/apachedorisshujudaoruzonglan)
- [Apache Doris 数据导入之INSERT](https://www.oomspot.com/post/apachedorisshujudaoruzhiinsert)
- [Apache Doris 排序键及ShortKey Index ](https://www.oomspot.com/post/apachedorispaixujianjishortkeyindex)
- [Apache Doris 实战指南](https://www.oomspot.com/post/apachedorisshizhanzhinan)
- [Apache Doris 升级手册](https://www.oomspot.com/post/apachedorisshengjishouce)
- [Apache Doris 动态分区介绍及使用方法](https://www.oomspot.com/post/apachedorisdongtaifenqujieshaojishiyongfangfa)
- [Apache Doris 删除数据恢复](https://www.oomspot.com/post/apachedorisshanchushujuhuifu)
- [Apache Doris 元数据恢复](https://www.oomspot.com/post/apachedorisyuanshujuhuifu)
- [Apache Doris sequence介绍及使用方法](https://www.oomspot.com/post/apachedorissequencejieshaojishiyongfangfa)
- [Apache Doris fe配置参数说明](https://www.oomspot.com/post/apachedorisfepeizhicanshushuoming)
- [Apache Doris Windows下fe开发环境搭建](https://www.oomspot.com/post/apachedoriswindowsxiafekaifahuanjingdajian)
- [Apache Doris Stream Load数据导入](https://www.oomspot.com/post/apachedorisstreamloadshujudaoru)
- [Apache Doris Stream Load使用示例](https://www.oomspot.com/post/apachedorisstreamloadshiyongshili)
- [Apache Doris Spark Connector设计方案](https://www.oomspot.com/post/apachedorissparkconnectorshejifangan)
- [Apache Doris SQL日志审计](https://www.oomspot.com/post/apachedorissqlrizhishenji)
- [Apache Doris RuntimeFilter 原理及使用](https://www.oomspot.com/post/apachedorisruntimefilteryuanlijishiyong)
- [Apache Doris Routine Load数据导入使用方法](https://www.oomspot.com/post/apachedorisroutineloadshujudaorushiyongfangfa)
- [Apache Doris On ElasticSearche](https://www.oomspot.com/post/apachedorisonelasticsearche)
- [Apache Doris Flink Connector设计方案](https://www.oomspot.com/post/apachedorisflinkconnectorshejifangan)
- [Apache Doris FE 元数据故障运维](https://www.oomspot.com/post/apachedorisfeyuanshujuguzhangyunwei)
- [Apache Doris Colocate Join 原理及使用](https://www.oomspot.com/post/apachedoriscolocatejoinyuanlijishiyong)
- [Apache Doris Bucket Shuffle Join 原理及使用](https://www.oomspot.com/post/apachedorisbucketshufflejoinyuanlijishiyong)
- [Apache Doris Broker数据导入](https://www.oomspot.com/post/apachedorisbrokershujudaoru)
- [Apache Doris Binlog load使用方法](https://www.oomspot.com/post/apachedorisbinlogloadshiyongfangfa)
- [Apache Doris BE 开发环境搭建](https://www.oomspot.com/post/apachedorisbekaifahuanjingdajian)
- [Apache DORIS安装使用测试报告](https://www.oomspot.com/post/apachedorisanzhuangshiyongceshibaogao)

更多推荐

更多
  • Pulsar消息队列-一套高可用实时消息系统实现 实时消息【即时通信】系统,有群聊和单聊两种方式,其形态异于消息队列:1 大量的 group 信息变动,群聊形式的即时通信系统在正常服务形态下,瞬时可能有大量用户登入登出。2 ...
  • Pulsar消息队列-Pulsar对比Kafka笔记 很多人查看 Pulsar 之前可能对 Kafka 很熟悉,参照上图可见二者内部结构的区别,Pulsar 和 Kafka 都是以 Topic 描述一个基本的数据集合,Topic 数据又分为若干 Partition,即对数据进行逻辑上的 ...
  • Pulsar消息队列-对 2017 年一套 IM 系统的反思 信系统的开发,前前后后参与或者主导了六七个 IM 系统的研发。上一次开发的 IM 系统的时间点还是 2018 年,关于该系统的详细描述见 [一套高可用实时消息系统实现][1] ...
  • Apache APISIX文档-快速入门指南-如何构建 Apache APISIX 如何构建 Apache APISIX,步骤1:安装 Apache APISIX,步骤2:安装 etcd,步骤3:管理 Apache APISIX 服务,步骤4:运行测试案例,步骤5:修改 Admin API key,步骤6:为 Apac
  • Apache APISIX文档-快速入门指南-快速入门指南 快速入门指南,概述,前提条件,第一步:安装 Apache APISIX,第二步:创建路由,第三步:验证,进阶操作,工作原理,创建上游服务Upstream,绑定路由与上游服务,添加身份验证,为路由添加前缀,APISIX Dashboard
  • Apache APISIX文档-架构设计-APISIX APISIX,软件架构,插件加载流程,插件内部结构,配置 APISIX,插件加载流程,比如指定 APISIX 默认监听端口为 8000,并且设置 etcd 地址为 http://foo:2379, 其他配置保持默认。在 ...
  • Apache APISIX文档-架构设计-Service Service 是某类 API 的抽象(也可以理解为一组 Route 的抽象)。它通常与上游服务抽象是一一对应的,Route 与 Service 之间,通常是 N:1 的关系,参看下图。不同 Route 规则同时绑定到一个 Service ...
  • Apache APISIX文档-架构设计-Plugin Config 如果你想要复用一组通用的插件配置,你可以把它们提取成一个 Plugin config,并绑定到对应的路由上。举个例子,你可以这么做:创建 Plugin config,如果这个路由已经配置了 plugins,那么 Plugin config ...
  • Apache APISIX文档-架构设计-Debug Mode 注意:在 APISIX 2.10 之前,开启基本调试模式曾经是设置 conf/config.yaml 中的 apisix.enable_debug 为 true。设置 conf/debug.yaml 中的选项,开启高级调试模式。由于 ...
  • Apache APISIX文档-架构设计-Consumer 如上图所示,作为 API 网关,需要知道 API Consumer(消费方)具体是谁,这样就可以对不同 API Consumer 配置不同规则。授权认证:比如有 [key-auth] 等。获取 consumer_...
  • 近期文章

    更多
    文章目录

      推荐作者

      更多