Doris 是一个十分优良的 MPP 数据仓库,
在前两天线上呈现一个问题,我三个 FE,呈现了一个 FE 挂掉,而后我重启启动不起来,
我备份这个 FE 元数据后,将这个节点元数据革除掉,应用
– 先删除
ALTER SYSTEM DROP FOLLOWER “FE:9010”
– 在增加
ALTER SYSTEM ADD FOLLOWER “FE:9010”
删除改节点,而后在应用 –helper 形式把该节点作为一个新的 FE 退出到集群中,然而这时候启动会报错,同时会导致 Master FE 挂掉,具体异样信息如下
repImpl=com.sleepycat.je.rep.impl.RepImpl@68fa4d19 props={REFRESH_VLSN=17921230, PORT=9010, HOSTNAME=172.22.197.238, P_NODETYPE1=ELECTABLE, NODE_NAME=172.22.197.238_9010_1611290318143, P_NODETYPE0=SECONDARY, P_NODENAME1=172.22.197.240_9010_1608972313975, P_PORT1=9010, P_NODENAME0=172.22.197.238_9010_1611290318143, P_PORT0=9010, P_HOSTNAME1=172.22.197.240, GROUP_NAME=PALO_JOURNAL_GROUP, P_HOSTNAME0=172.22.197.238, ENV_DIR=/hdd_data01/doris-meta/bdb, P_NUMPROVIDERS=2}
at com.sleepycat.je.rep.InsufficientLogException.wrapSelf(InsufficientLogException.java:315) ~[je-7.3.7.jar:7.3.7]
at com.sleepycat.je.dbi.EnvironmentImpl.checkIfInvalid(EnvironmentImpl.java:1766) ~[je-7.3.7.jar:7.3.7]
起初在社区,缪小姐姐及陈明雨大神的帮助下,进行了各种尝试定位,认为是在启动的时候元数据同步异样,这个异样可能是因为我过后的 load 数据工作在同步批改元数据,造成的,起初在凌晨,生产开货实现当前,停掉所有 load 工作,而后执行删除问题 FE 节点元数据,而后在从新应用 –helper 启动,仍然报错,最初没方法,尝试将 master 节点的 fe 元数据拷贝到问题节点 FE,将问题节点 FE 的元数据目录删除,而后重建,将赋值过去的元数据,拷贝到元数据目录
具体步骤:
进行所有 load 工作
删除元数据目录,并重建目录
从 master 节点拷贝元数据到问题节点 fe(将 fe.conf 中的 metadata_failure_recovery=true 配置项删除,或者设置为 false,这个十分重要),留神要批改 image/VERSION 里的 name, 拷贝过去的是 master 的名称,改成该节点的名称
执行 ALTER SYSTEM DROP FOLLOWER 删除改节点
在问题节点应用 –helper 启动服务
在 mysql 下执行 ALTER SYSTEM ADD FOLLOWER 将 FE 节点从新退出进去
启动失常
留神:
1. 问题节点:将 fe.conf 中的 metadata_failure_recovery=true 配置项删除,或者设置为 false
2.Master 节点启动应用 metadata_failure_recovery=true 启动,进行复原,启动失常当前,将这个配置删除或者设置为 false,停掉 Master fe,而后在重启,启动实现当前,要确认 Master 查问,导入是失常的
上述步骤执行实现当前,而后在问题节点在应用 –helper 形式启动 fe,这个时候失常启动,问题解决
重新启动所有 Load 工作
不过这个还是一个问题,实践上,将问题 FE 节点元数据删除当前,把它当做一个新的 FE 节点,应用 –helper 退出进去,是应该没问题的,启动当前会主动从 master FE 同步元数据,然而呈现了同步失败的状况(这个时候也没有任何 load 工作,对元数据进行批改的状况)