Skip to main content

Redis 数据源之间的双向数据复制

NineData 数据复制功能支持为两个或多个 Redis 数据源之间执行任意方向的数据实时同步。

功能说明

NineData Redis 双向复制用于在两个 Redis 实例之间建立持续、实时的双向数据同步通道,使两个实例在逻辑上形成一个对等的数据体系。在该体系下,任一实例均可同时承担读写流量,NineData 负责保证数据最终一致性、冲突可控和同步链路稳定运行。

前提条件

  • 源和目标数据源均为 Redis,建议参与双向复制的 Redis 数据源版本保持一致。

  • Redis 的架构为:单机版、主从版、读写分离版、集群版

步骤一:为参与复制的所有数据源添加多活标记

为防止发生数据循环复制,您需要为参与复制任务的所有数据源添加多活标记。

  1. 登录 NineData 控制台

  2. 在左侧导航栏,单击数据源管理>数据源

  3. 单击目标数据源 ID,打开数据源详情页面。

  4. 在数据源详情区域(即包含数据源名称、ID、创建人、创建时间等信息的区域),单击更多

  5. 找到多活标记,单击其右侧的edit图标。

  6. 输入多活标记,单击确定

    tip
    • 多活标记可包含 1~64 个字符。
    • 多活标记需为全局唯一,不可和其他多活标记重复。

步骤二:配置双向复制任务

步骤三:查看双向复制结果

双向任务创建完成后,NineData 将自动为当前任务启动一条反向的复制任务,用于将目标中的增量数据复制回源端,以保证两端数据的完全一致。

  1. 登录 NineData 控制台

  2. 在左侧导航栏单击数据复制 > 数据复制

  3. 数据复制页面单击目标同步任务的任务 ID,页面说明如下。

    redis_bidirectional_result

    序号
    功能
    说明
    1同步延迟源数据源和目标数据源之间的实时同步延迟,0 表示当前两端暂无延迟。
    2配置告警配置告警后,系统会在任务失败时通过您选择的方式通知您。
    3更多
    • 暂停:暂停任务,仅状态为运行中的任务可选。
    • 终止:结束未完成或监听中(即增量同步中)的任务,终止任务后无法重启,请谨慎操作。
    • 删除:删除任务,删除后无法恢复,请谨慎操作。
    4全量复制展示全量复制的进度和详细信息。
    • 单击页面右侧的监控:查看全量复制过程中的各监控指标。全量复制过程中,还可以单击监控指标页面右侧的限流设置,限制复制吞吐量(MB/S)。
    • 单击页面右侧的日志:查看全量复制的执行日志。
    • 单击页面右侧的refresh:查看最新的信息。
    5增量复制展示增量复制的各项监控指标。
    • 单击页面右侧的限流设置:限制每秒写入到目标数据源的行数(Row/S)。
    • 单击页面右侧的日志:查看增量复制的执行日志。
    • 单击页面右侧的refresh:查看最新的信息。
    6反向复制展示目标数据源到源数据源方向的复制状态和执行信息。
    7数据对比展示源数据源和目标数据源之间数据对比的结果。如果您未开启数据对比,请单击页面中的开启数据对比
    • 单击页面右侧的重新对比:对当前源和目标两端数据重新发起对比。
    • 单击页面右侧的日志:查看一致性对比的执行日志。
    • 单击页面右侧的监控:查看对比 RPS(每秒对比的记录数)的走势图。单击详情可以查看更早之前的记录。
    • 在对比列表右侧操作列单击details(不一致情况下显示):查看源端和目标端的对比详情。
    • 在对比列表右侧操作列单击sql(不一致情况下显示):生成变更命令,您可以直接复制到目标数据源执行,修正不一致内容。
    8查看反向单击可查看目标数据源到源数据源的复制详情。
    9更多展示当前复制任务的详细信息。

附录 1:增量复制支持的命令

在增量复制过程中,只有 NineData 数据复制功能支持的 Redis 数据变更命令才会在源端执行后实时同步到目标端。本章节介绍 NineData 数据复制功能所支持的 Redis 数据类型和数据变更命令。

支持的数据类型
支持的命令
StringsAPPEND、DECR、DECRBY、GETDEL(6.2.0 版本以上)、GETEX(6.2.0 版本以上)、GETSET、INCR、INCRBY、INCRBYFLOAT、MSET、MSETNX、PSETEX、SET、SETEX、SETNX、SETRANGE
ListsBLMOVE、BLMPOP、BLPOP、BRPOP、BRPOPLPUSH、LINSERT、LMOVE、LMPOP、LPOP、LPUSH、LPUSHX、LREM、LSET、RPOP、RPOPLPUSH、RPUSH、RPUSHX
SetsSADD、SDIFFSTORE、SINTERSTORE、SMOVE、SPOP、SREM、SUNIONSTORE
HashesHDEL、HINCRBY、HINCRBYFLOAT、HMSET、HSET、HSETNX、
Sorted SetsBZMPOP、BZPOPMAX、BZPOPMIN、ZADD、ZDIFFSTORE、ZINCRBY、ZINTERSTORE、ZMPOP、ZPOPMAX、ZPOPMIN、ZRANGESTORE、ZREM、ZREMRANGEBYLEX、ZREMRANGEBYSCORE、ZUNIONSTORE
StreamsXADD、XTRIM、XGROUP、 XAUTOCLAIM、XDELXREADGROUP
GeospacialGEOADD、GEOSEARCHSTORE
HyperLogLogPFADD
BitmapsSETBIT、BITFIELD、BITOP

附录 2:预检查项一览表

检查项检查内容
源数据源连接检查检查源数据源网关状态、实例是否可达、用户名及密码准确性
目标数据源连接检查检查目标数据源网关状态、实例是否可达、用户名及密码准确性
源库权限检查检查源数据库的账号权限是否满足要求
源对象存在性检查检查目标端中存在的表,当前在源端是否存在
双向复制多活单元标记检查检查多活单元标记是否存在
目标库数据存在性检查检查待复制对象在目标数据库中是否已存在数据
循环链路检查检查环路是否存在
源实例 Log Buffer 大小检查检查源实例参数 repl-backlog-size 的大小配置
检查源实例 Client Output Buffer 大小检查源实例参数 client-output-buffer-limit replica 的大小配置