关键字:
KingbaseFlySync、KFS、同步程序、replicator、高可用,flysync.ini,KUFL
1.名词解释
KUFL:KingbaseFlySync以统一的数据存储格式存放数据操作信息的中间文件
2.功能描述
KUFL是KingbaseFlySync存放数据的载体,在KFS数据实时同步的流程中起着至关重要的作用:KFS源端解析的增量数据会存放到KUFL中;目标端从源端获取到待同步的数据后,会将相关数据也保存为KUFL;目标端入库时,是从KUFL中获取相关增量数据。同时KFS的断点续传等功能也依赖KUFL中保存的相关标记信息。所以KingbaseFlySync对KUFL的健壮性采取了多方面的保障措施,以保证KFS业务连续性和数据准确性。
3.KUFL健壮性保障措施
- 在KUFL写出时校验正确性
在flysync.ini中增加如下配置:
property=replicator.store.kufl.doChecksum=false
#默认配置是false
#设置true时,表示开启
支持在KUFL写出时,同时写出记录的校验值,这样KFS就可以根据校验值校验KUFL的正确性
- 支持KUFL读取时校验正确性
源端flysync.ini配置:
# stop:默认值,保持现状,异常时停止
#retry:告知上一级线程,清理掉本地KUFL,从新从数据库解析
源端发送线程读取KUFL时,发现KUFL读取失败(文件损坏)时,告知解析线程,清理掉本地的KUFL后重新从源端数据库解析
目标端flysync.ini配置:
# stop:保持现状,异常时停止
#retry:默认值,告知上一级线程,清理掉本地KUFL,从新从源端读取
目标端入库线程读取KUFL时,发现KUFL读取失败(文件损坏)时,告知传输线程,清理掉本地的KUFL后重新从源端读取
- KUFL读取超时自动读取
KUFL读取超时,多发生在:写线程发现当前KUFL的尺寸超过设置值(由replicator.store.kufl.log_file_size控制)时,切换到新的KUFL文件并开始写入文件头时,此时读线程同步开始读取新KUFL文件,由于读写线程同时操作KUFL、且写线程可能并未写入完成,所以可能会导致读线程读取超时。
针对此种场景,KingbaseFlySync采用了如下措施:
A、写角色在写数据时,应当保证文件头写成功(调用flush和sync)
B、读角色在发生文件切换时,首先要保证文件存在,并且文件的尺寸大于文件头大小后才开始读取
- KUFL未被入库前不被清理
KingbaseFlySync默认KUFL会保存7天,通常情况下不会发生KUFL未入库就被清理。但是如果用户因为某种原因将KFS停止运行了,然后隔一段时间再次将KFS开启,此时就有可能会发生未入库KUFL被错误清理的情况。
针对此种场景,采用如下配置可以解决:
源端flysync.ini中配置:
replicator.store.kufl.requireacks=1
#源端需要确认接收到多少个目标端的确认后,才允许清理过期KUFL文件
目标端(无需额外配置):
默认需要当kufl-to-q读取后,才允许删除过期的KUFL文件
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




