社区版Redis是非常受欢迎的内存数据库,具有性能高,数据结构丰富等优点。GeminiDB Redis是兼容Redis生态的持久化数据库,不仅提供优秀的读写性能,还提供数据持久化能力,依托超前的系统架构,以极低的成本保证了数据三副本强一致特性,避免了社区版Redis需要Fork、成本高等问题。
迁移原理
使用自研的迁移工具drs-redis进行源端Redis到目标端GeminiDB Redis的迁移。
迁移过程中,drs-redis伪装成源端Redis的从节点运行,与源端Redis建立连接后,触发Redis的主从同步。源端Redis生成RDB文件,传输给drs-redis完成全量同步。然后发送缓冲区保存的所有写命令到drs-redis完成增量同步。 drs-redis迁移工具接收并解析源端Redis的RDB文件,将解析后的数据通过redis命令的方式发送到GeminiDB Redis,然后以命令传播的方式将增量数据也发送到GeminiDB Redis,完成迁移。
使用须知
drs-redis伪装成源端Redis的从节点,只读取源端的全量数据和增量命令,无数据受损风险。
源端增加对drs-redis写数据的流程,因此性能会有轻微影响。
GeminiDB Redis支持多DB,若源端是单节点Redis,需要保留多DB时,可以在GeminiDB Redis侧开启namespace功能,避免将多DB数据迁移到同一空间,造成数据丢失。
如果之前源端不存在从节点,源端会新增replication-buffer来缓存增量命令。
问题 :redis主从同步的replication-buffer是ring buffer,若写入buffer太快,会覆盖掉未发送给drs-redis的数据,源端Redis为了数据一致性会主动断开连接,造成迁移失败。
建议 :迁移过程中,降低源端Redis写入数据的速率,在低压时间段进行迁移。配置redis的client-output-buffer-limit参数,适量增大replication-buffer的大小。
前提条件
部署迁移工具drs-redis。
保证迁移工具drs-redis、源端Redis和目标端GeminiDB Redis网络互通。
操作步骤
如需进行Redis到GeminiDB Redis的迁移,您可以在管理控制台右上角,选择“工单 > 新建工单”,联系技术支持进行处理。
迁移性能参考
环境:源端单节点Redis和迁移工具drs-redis部署在8U32GB的弹性云服务器上,目标端为4U16GB,3节点GeminiDB Redis实例。
场景一:
-
源端replication buffer采用默认值(slave 268435456 67108864 60),该默认值表示缓存积压数据超过268435456bytes(256MB),或超过67108864bytes(64MB)且持续60s,源端会主动断开与从节点的连接。
-
源端写入速率5MB/s,迁移过程可持续进行,不会产生源端buffer满造成的同步失败。
-
迁移工具读取数据的速率和源端写入速率一致。
场景二:
-
源端replication buffer不做限制(config set "client-output-buffer-limit" "slave 0 0 0")。
-
源端写入速率10MB/s,容量充足的情况下,迁移持续进行。
-
迁移工具读取数据的速率和源端写入速率一致。
结论: 在环境上,使用8U32GB弹性云服务器部署迁移工具,若源端replication buffer采用默认值,迁移可在源端5MB/s的写入速率下进行;若源端对replication buffer不做限制,迁移可在源端10MB/s的写入速率下进行。