RedisShake icon indicating copy to clipboard operation
RedisShake copied to clipboard

feat: Support increment sync

Open jjz921024 opened this issue 8 months ago • 3 comments

for issue #722

通过sync_reader同步时,支持增量同步,避免每次都进行不必要的全量同步 以允许在shake短暂中断或重启后,可以从上次同步的offset处继续进行

  1. 在连接源redis实例时,通过info replication命令获取master_replid字段
  2. 修改保存aof的文件名,以接收到的起始offset作为文件名。在重启时可通过 文件名 + 文件大小 的方式得到上次同步的offset
  3. 若能拿到上次同步的offset 且 sync_rdb=false,尝试进行增量同步,替换 PSYNC ? -1

jjz921024 avatar Dec 29 '23 02:12 jjz921024

这里我考虑的一点是将文件名作为 aof offset 的存放位置好像不太合适,我们这里需要一个 metadata 的抽象 @suxb201 WYDT

Zheaoli avatar Jan 02 '24 04:01 Zheaoli

@Zheaoli 是的,现在的 aof file 是我之前随便写的,看 issue 反馈来看貌似有 bug,但我没能复现出来。之前也考虑换个成熟的 disk queue,但是没发现好用的库。

suxb201 avatar Jan 02 '24 06:01 suxb201

@Zheaoli 在这个pr中,原本也实现过在reader目录下增加一个保存元数据的文件。但后面考虑仅就增量同步这个功能,目前需要保存的信息只有repl_idrepl_offset,想着repl_id可以添加到目录上作为区分(目前目录上仅ip和端口作为区分应该不保险);repl_offset记录在aof文件名上(目前aof文件名仅是一个递增的序号,应该没有具体含义?),这种实现有点类似kafka记录msg的方式base_offset + size 能定位到具体某条消息

jjz921024 avatar Jan 03 '24 02:01 jjz921024