数据迁移工具 Redis-shake
文章插图
图片
有时候,我们需要在不同的实例间迁移数据 。目前,比较常用的一个数据迁移工具是 Redis-shake,这是阿里云 Redis 和 MongoDB 团队开发的一个用于 Redis 数据同步的工具 。
Redis-shake 地址:https://github.com/tAIr-opensource/RedisShakeRedis-shake 的基本运行原理,是先启动 Redis-shake 进程,这个进程模拟了一个 Redis 实例 。然后,Redis-shake 进程和数据迁出的源实例进行数据的全量同步 。
这个过程和 Redis 主从实例的全量同步是类似的 。
源实例相当于主库,Redis-shake 相当于从库,源实例先把 RDB 文件传输给 Redis-shake,Redis-shake 会把 RDB 文件发送给目的实例 。接着 , 源实例会再把增量命令发送给 Redis-shake , Redis-shake 负责把这些增量命令再同步给目的实例 。
下面这张图展示了 Redis-shake 进行数据迁移的过程:
文章插图
图片
Redis-shake 的一大优势,就是支持多种类型的迁移 。
首先,它既支持单个实例间的数据迁移,也支持集群到集群间的数据迁移 。
其次,有的 Redis 切片集群(例如 Codis)会使用 proxy 接收请求操作 , Redis-shake 也同样支持和 proxy 进行数据迁移 。
另外,因为 Redis-shake 是阿里云团队开发的,所以 , 除了支持开源的 Redis 版本以外,Redis-shake 还支持云下的 Redis 实例和云上的 Redis 实例进行迁移,可以帮助我们实现 Redis 服务上云的目标 。
【工作中Redis有哪些好用的运维工具】在数据迁移后,我们通常需要对比源实例和目的实例中的数据是否一致 。如果有不一致的数据,我们需要把它们找出来,从目的实例中剔除,或者是再次迁移这些不一致的数据 。
这里,我就要再给你介绍一个数据一致性比对的工具了,就是阿里云团队开发的 Redis-full-check 。
Redis-full-check 的工作原理很简单 , 就是对源实例和目的实例中的数据进行全量比对,从而完成数据校验 。不过,为了降低数据校验的比对开销,Redis-full-check 采用了多轮比较的方法 。
在第一轮校验时,Redis-full-check 会找出在源实例上的所有 key,然后从源实例和目的实例中把相应的值也都查找出来,进行比对 。第一次比对后 , redis-full-check 会把目的实例中和源实例不一致的数据,记录到 sqlite 数据库中 。
从第二轮校验开始,Redis-full-check 只比较上一轮结束后记录在数据库中的不一致的数据 。
为了避免对实例的正常请求处理造成影响,Redis-full-check 在每一轮比对结束后,会暂停一段时间 。随着 Redis-shake 增量同步的进行,源实例和目的实例中的不一致数据也会逐步减少,所以,我们校验比对的轮数不用很多 。
我们可以自己设置比对的轮数 。具体的方法是,在运行 redis-full-check 命令时,把参数 comparetimes 的值设置为我们想要比对的轮数 。
等到所有轮数都比对完成后,数据库中记录的数据就是源实例和目的实例最终的差异结果了 。
这里有个地方需要注意下,Redis-full-check 提供了三种比对模式,我们可以通过 comparemode 参数进行设置 。
comparemode 参数有三种取值,含义如下:
- KeyOutline,只对比 key 值是否相等;
- ValueOutline,只对比 value 值的长度是否相等;
- FullValue,对比 key 值、value 长度、value 值是否相等 。
好了 , 最后,我再向你介绍一个用于 Redis 集群运维管理的工具 CacheCloud 。
集群管理工具 CacheCloud
文章插图
图片
CacheCloud 是搜狐开发的一个面向 Redis 运维管理的云平台 , 它实现了主从集群、哨兵集群和 Redis Cluster 的自动部署和管理,用户可以直接在平台的管理界面上进行操作 。
CacheCloud 地址:https://github.com/sohutv/cachecloud针对常见的集群运维需求,CacheCloud 提供了 5 个运维操作 。