在线恢复
在线恢复(Online Recovery)是一种数据恢复技术,用于在分布式文件系统中修复不一致或损坏的数据副本。与传统的离线恢复方法不同,在线恢复可以在数据节点持续写入数据的过程中进行,而不会中断或影响正常的数据处理操作。DolphinDB Online Recovery 技术仅复制副本之间差异的数据,从而减少分区数据恢复的时间。
在线恢复分异步恢复和同步恢复两个阶段进行。在异步恢复阶段,源节点仍可以正常进行读写任务。等待恢复的数据量小于 dfsSyncRecoveryChunkRowSize 配置值时,开始同步恢复。同步恢复会阻塞源节点写入,但因剩余待恢复数据量很小,在短时间内可以完成拷贝,所以对源节点的写入影响也比较小。
DolphinDB 在线恢复的完整流程如下:
-
当某个数据节点从故障中恢复重启后,会向控制节点汇报自己的分区信息。
-
控制节点收到数据节点的汇报后,判断需要进行 Recovery,会将需要 Recovery 的分区放入待 Recovery 队列。
-
Recovery 线程从待 Recovery 队列中取出 Recovery 任务,根据收到的汇报来确定 Recovery 的源节点(数据拷贝的来源)和目标节点,并向源节点发起 Recovery 任务。
-
源节点收到任务后,开始一次拷贝,即从自身拷贝数据到目标节点,并接收目标节点返回的拷贝结果(数据拷贝成功或失败)。此过程异步执行,不影响数据库的正常读写。
-
重复步骤4,直至两个副本之间的差异小于10W行,或者拷贝次数大于5次时,源节点向控制节点发起转换为同步阶段的请求。
-
控制节点收到请求后,将分区状态设置为 RECOVERING,阻塞写入。由于同步节点需要拷贝的数据量比较少,因此耗时很短,对数据库的影响也很小。
-
源节点收到转同步成功的回复后,继续拷贝差异的数据。直到数据完全一致,源节点向控制节点汇报 Recovery 任务结束。
-
控制节点收到 Recovery 任务结束的报告后,更新副本状态为 COMPLETE。此时允许数据写入。
Online Recovery 只复制增量部分数据,能够有效提高恢复性能,且恢复过程不影响生产数据的写入。
以包含一个控制节点和三个数据节点的集群为例。该集群副本数为2,Datanode1 从故障中恢复。通过图示展示 Online Recovery 的过程:
为提高在线恢复的性能,DolphinDB 提供配置项 dfsRecoveryConcurrency设置恢复任务执行的并发度,同时提供配置项
recoveryWorkers设置同步恢复 Chunk 的工作线程数量(也可通过函数
resetRecoveryWorkerNum
进行动态设置)。
在在线恢复过程中,用户可通过getRecoveryTaskStatus
获取恢复任务的状态;也可通过
suspendRecovery
暂停恢复任务;通过 resumeRecovery
重启恢复任务;通过
cancelRecoveryTask
取消恢复任务。