处理方法:

情况1:单个 FE (Follower)情况

如果是单个FE,直接在conf/fe.conf 中加入

metadata_failure_recovery=true

在访问正常之后,将上面元数据恢复模式设置成false,或者将这个配置项注释掉

最后重启 FE

情况2:如果有observer的情况下

  1. 停掉所有的observer(正常情况下follower出现问题,observer也会挂掉)
  2. 在conf/fe.conf 中加入 metadata_failure_recovery=true 配置,重启fe。启动成功后,验证结果,连接doris集群是否可正常查询。正常后重启fe。
  3. 连接fe follower(master)将observer节点从集群中删除
ALTER SYSTEM DROP OBSERVER "OBSERVER_IP:PORT";

OBSERVER_IP:你要删除的Observer 节点IP

PORT:fe.conf 中的 edit_log_port,默认9010

  1. 删除observer后,到observer节点上将observer元数据目录清空,再已以下命令启动。
sh bin/start_fe.sh --helper master_fe_ip:port --daemon

master_fe_ip:你要Master FE 节点IP,如果是单个Follower就是你的这个Follower节点IP

port:fe.conf 中的 edit_log_port,默认9010

  1. 连接follower (master)节点将启动的observer添加至集群。
ALTER SYSTEM ADD OBSERVER "OBSERVER_IP:PORT";

这里是你刚才启动Observer节点加入到集群中那个

OBSERVER_IP:你要加入的Observer 节点IP

PORT:fe.conf 中的 edit_log_port,默认9010

  1. 查看FE运行状态
show fontends;

查看observer节点日志是否正常

情况3:多个FE(follower)的情况

通常情况下,Master FE 的元数据是最新的。可以查看 meta_dir/image 目录下,image.xxxx 文件的后缀,数字越大,则表示元数据越新。

Doris FE(follower)故障的处理方法_网络

通过比较所有 FOLLOWER FE 的 image 文件,找出最新的元数据即可。之后,我们要使用这个拥有最新元数据的 FE 节点,进行恢复。

  1. 在conf 中添加配置:metadata_failure_recovery=true。执行 sh bin/start_fe.sh 启动这个 FE。如果正常,这个 FE 会以 MASTER 的角色启动,类似于前面 启动单节点 FE 一节中的描述。在 fe.log 应该会看到 transfer from XXXX to MASTER 等字样。
  2. 启动完成后,先连接到这个 FE,执行一些查询导入,检查是否能够正常访问。如果不正常,有可能是操作有误,建议仔细阅读以上步骤,用之前备份的元数据再试一次。
  3. 通过 show frontends; 命令,应该可以看到之前所添加的所有 FE,并且当前 FE 是 master。
  4. 将conf 中的 metadata_failure_recovery=true 配置项删除,或者设置为 false,然后重启这个 FE(重要)。
  5. 查看FE运行状态
show fontends;

如果是observer节点元数据是最新的话,按照以下步骤:

将meta_dir/image/ROLE 文件中的 role=OBSERVER 改为 role=FOLLOWER。

Doris FE(follower)故障的处理方法_服务器_02

按照上面的步骤启动操作即可。

按照上面的步骤启动成功后,会发现当前这个 FE 的角色为 OBSERVER,但是 IsMaster 显示为 true。因为,这里看到的 “OBSERVER” 是记录在 Doris 的元数据中的,而是否是 master,是记录在 bdbje 的元数据中的。因为我们是从一个 OBSERVER 节点恢复的,所以这里出现了不一致。

先把除了这个 “OBSERVER” 以外的所有 FE 节点 DROP 掉。

ALTER SYSTEM DROP OBSERVER "FE_ip:PORT";

OBSERVER_IP:你要删除的FE 节点IP

PORT:fe.conf 中的 edit_log_port,默认9010

通过 ADD FOLLOWER 命令,添加一个新的 FOLLOWER FE,假设在 hostA 上。在 hostA 上启动一个全新的 FE,通过 --helper 的方式加入集群。

##添加至集群 ALTER SYSTEM ADD OBSERVER “FE_IP:PORT”;

启动

sh bin/start_fe.sh --helper master_fe_ip:port --daemon

这里是你刚才启动follower节点加入到集群中那个

FE_IP:你要加入的follower节点IP

PORT:fe.conf 中的 edit_log_port,默认9010

master_fe_ip:port master节点为刚才的observer节点。

启动成功后,通过 show frontends; 语句,你应该能看到两个 FE,一个是之前的 OBSERVER,一个是新添加的 FOLLOWER,并且 OBSERVER 是 master。

确认这个新的 FOLLOWER 是可以正常工作之后,用这个新的 FOLLOWER 的元数据,重新执行一遍故障恢复操作。

以上这些步骤的目的,其实就是人为的制造出一个 FOLLOWER 节点的元数据,然后用这个元数据,重新开始故障恢复。这样就避免了从 OBSERVER 恢复元数据所遇到的不一致的问题。