云数据库 Redis 支持全球复制的功能,解决跨地域数据同步一致性的问题。
为什么需要全球复制?
Redis 原生代码在跨地域复制的场景中,当本端实例写入量过大或者长时间断开复制时,Master 节点的 backlog 复制日志可能无法满足断点复制日志的续传,导致远端实例只能进行全量复制,而全量复制同步数据将使得远端实例访问受阻,严重影响远端实例的正常业务。具体信息,请参见 Redis 官方文档的复制方案 。
同时,Redis 原生的复制方案在 backlog 复制日志中没有标记写入节点,当本端与远端需进行双向复制时,容易引起复制环路,造成数据错乱。
实现机制
全球复制是腾讯云在开源社区版本的内核中新增的功能,完全兼容 Redis 4.0 和 Redis 5.0 的命令。基于原有的主从复制方案,新增了一个日志文件进行远端复制,保证复制组内任意地域实例数据的最终一致。
在远端节点未复制日志文件之前,本端节点将保留日志文件,保证远端复制的连续性。
日志文件包含 ServerID,标识日志文件写入节点 ID,支持远端与本端双向复制,避免复制环路。
日志文件包含命令执行时间戳和操作 KEY 的版本号,用于解决命令冲突的问题。


应用场景
只读/灾备场景
Redis 全球复制方案,在复制组中配置一个主实例,在多地部署只读实例,不同地域的只读实例从主实例进行数据复制。数据的版本以主实例为准,数据的一致性级别为最终数据一致。用户便可以在本地进行数据访问,改善数据访问的响应速度,提升用户体验,提高数据可用性,增强数据安全性。n

多活方案
在用户跨地域漫游、多地数据合并等场景,您需要将一份数据分发到多个地域,需在任意地域进行数据读取和更新,或者需要将多个地域的数据合并为一份。此时,数据库需要具备多地写入能力。全球复制组中可以配置多主架构,数据可以在任何一个主实例写入,复制组内的其他地域的主实例将同步数据。n

注意
Redis 主实例对应用写入的数据和复制组中其他主实例写入的数据,不做版本检测和写入时间检查,按照接收到命令的时间依次执行。若相同的数据在同一时间的不同主实例中进行了更新,全球复制的数据可能出现数据错乱,无法保证数据的完全一致。n因此,多主场景中,需避免对相同的数据在同一时间在不同的主实例中进行更新。多主架构存在数据一致性风险,请您仔细评估您的业务场景是否适用该功能。