【redis数据同步】redis-shake数据同步全量+增量

redis-shake数据同步

在这里插入图片描述
在这里插入图片描述

redis-shake是基于redis-port基础上进行改进的一款产品。它支持解析、恢复、备份、同步四个功能。以下主要介绍同步sync。

  • 恢复restore:将RDB文件恢复到目的redis数据库。
  • 备份dump:将源redis的全量数据通过RDB文件备份起来。
  • 解析decode:对RDB文件进行读取,并以json格式解析存储。
  • 同步sync:支持源redis和目的redis的数据同步,支持全量和增量数据的迁移,支持从云下到阿里云云- 上的同步,也支持云下到云下不同环境的同步,支持单节点、主从版、集群版之间的互相同步。需要注意- 的是,如果源端是集群版,可以启动一个RedisShake,从不同的db结点进行拉取,同时源端不能开启- move slot功能;对于目的端,如果是集群版,写入可以是1个或者多个db结点。
  • 同步rump:支持源redis和目的redis的数据同步,仅支持全量的迁移。采用scan和restore命令进行迁移,支持不同云厂商不同redis版本的迁移。

基本原理

redis-shake 的基本原理就是模拟一个从节点加入源redis集群,首先进行全量拉取并回放,然后进行增量的拉取(通过psync命令)。

注意事项

  • 如果目标库的数据逐出策略(maxmemory-policy)配置为noeviction以外的值,可能导致目标库的数据与源库不一致。关于数据逐出策略详情,请参见Redis数据逐出策略介绍。

  • 如果源库中的某些Key使用了过期(expire)机制,由于可能存在Key已过期但未被及时删除的情形,所以在目标库中查看(如通过info命令)到的Key数量会比源库的Key数量少。

  • 不要在同一个目录运行两个 RedisShake 进程,因为运行时产生的临时文件可能会被覆盖,导致异常行为。

  • 不要降低 Redis 版本,比如从 6.0 降到 5.0,因为 RedisShake 每个大版本都会引入一些新的命令和新的编码方式,如果降低版本,可能会导致不兼容。

说明:源和目标库中,未设置过期机制或未过期的Key数量是一致的。

安装 redis-shake

wget https://github.com/alibaba/RedisShake/releases/download/v3.1.2/redis-shake.tar.gz
mkdir redis-shake
tar xf redis-shake.tar.gz -C redis-shake

创建迁移配置文件

注意:需要找一个磁盘空间大的目录进行迁移

cat >redis-shake.toml<<'EOF'
type = "sync"
[source]
address = "10.10.8.203:6379" # 来源实例的ip及端口
username = "" # 如果不使用ACL,请保持为空
password = "Passw0rd" # 如果不需要密码,请保持为空
tls = false
elasticache_psync = "" # using when source is ElastiCache. ref: https://github.com/alibaba/RedisShake/issues/373
[target]
type = "standalone"  #  单机或哨兵写:"standalone",集群写:"cluster" 
address = "10.10.8.204:6379"  # 新实例的ip及端口
username = "" # 如果不使用ACL,请保持为空
password = "Passw0rd" # 如果不需要密码,请保持为空
tls = false
[advanced]
dir = "data"
ncpu = 4
pprof_port = 0
metrics_port = 0
log_file = "redis-shake.log"
log_level = "info" # debug, info or warn
log_interval = 5 # in seconds
rdb_restore_command_behavior = "rewrite" # panic, rewrite or skip
pipeline_count_limit = 1024
target_redis_client_max_querybuf_len = 1024_000_000
target_redis_proto_max_bulk_len = 512_000_000
EOF

**注意非单机请参阅官方文档进行配置:**https://github.com/alibaba/RedisShake/wiki/%E5%BF%AB%E9%80%9F%E5%BC%80%E5%A7%8B%EF%BC%9A%E6%95%B0%E6%8D%AE%E8%BF%81%E7%A7%BB

执行redis数据库迁移

nohup  ./redis-shake-linux-amd64 redis-shake.toml  &

同步完成后停止写入

# 单实例开启只读模式
slaveof 127.0.0.1 6379# 单实例关闭只读模式
slaveof no one

对比数据

127.0.0.1:6379> select 0
127.0.0.1:6379> DBSIZE
127.0.0.1:6379> select 1
127.0.0.1:6379> DBSIZE
127.0.0.1:6379> select 2
······
127.0.0.1:6379> select 16
127.0.0.1:6379> DBSIZE

切换应用即可

过滤同步

结束运行

单库同步

将0库的数据同步到其他实例的15库
单库同步只需要修改db_id == 0(0代表0库) 和 return 0, 15(15代表15库,这里的0不要修改)即可。

vim /root/redis-shake/filters/swap_db.lua
function filter(id, is_base, group, cmd_name, keys, slots, db_id, timestamp_ms)if db_id == 0 thenreturn 0, 15elsereturn 1, db_idend
end

多库同步

将0库同步到14库,将1库同步到15库
多库同步只是在后面加 elseif 条件就可以了,具体操作同单库。

vim /root/redis-shake/filters/swap_db.lua
function filter(id, is_base, group, cmd_name, keys, slots, db_id, timestamp_ms)if db_id == 0 thenreturn 0, 14elseif db_id == 1 thenreturn 0, 15elsereturn 1, db_idend
end

运行

./redis-shake-linux-amd64 redis-shake.toml /root/redis-shake/filters/swap_db.lua

迁移 redis 流程:

  • 开启同步
  • 验证同步数据
  • 停止应用
  • 确认数据一致性
  • 应用修改 redis 连接信息
  • 开启应用
  • 完成迁移

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/600511.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用aspose相关包将excel转成pdf 并导出

SpringBoot 项目 基于aspose相关jar包 将excel 转换成pdf 导出 1、依赖的jar包 &#xff0c; jar获取链接 aspose相关三方jar &#xff0c;下载解压后,在项目路径下建一个libs包&#xff0c;然后将下图两个jar 拷贝至刚新建的libs目录中 2、pom.xml中加入maven引入 <depend…

【二分查找】Leetcode 搜索插入位置

题目解析 35. 搜索插入位置 这道题就是寻找target的目标位置&#xff0c;如果nums中包含target直接返回索引&#xff1b;如果不包含&#xff0c;需要返回target存放的合适位置 注意这道题有一个细节地方需要注意&#xff1a;如果现在target没有在nums中出现&#xff0c;并且目…

【java面试题-Redis篇-2024】

##java面试题大全 详细面试题-持续更新中-点击跳转 点赞、收藏、加关注 java基础面试题 ##java面试题大全1、什么是 Redis2、Redis 的数据结构类型3、Redis 为什么快4、什么是跳跃表5、什么是 I/O 多路复用6、什么是缓存击穿、缓存穿透、缓存雪崩7、什么是布隆过滤器8、热…

VSCode输入花括号{}}会多一个解决方案

打开设置 搜索Closing Brackets 选择BeforeWhitespace 选完后重启下VSCode即可

中颖51芯片学习3. 定时器

中颖51芯片学习3. 定时器 一、SH79F9476定时器简介1. 简介2. 定时器运行模式 二、定时器21. 说明&#xff08;1&#xff09;时钟&#xff08;2&#xff09;工作模式 2. 寄存器&#xff08;1&#xff09;控制寄存器 T2CON&#xff08;2&#xff09;定时器2模式控制寄存器 T2MOD …

Netty学习——源码篇13 命中缓存的分配 备份

上一篇分析了DirectArena内存分配大小的大概流程(Netty池化内存管理机制),知道了其先命中缓冲&#xff0c;如果没有命中&#xff0c;再去分配一款连续内存。现在分析命中缓存的相关逻辑。前面说到PoolThreadCache中维护了三个缓存数组(实际上是6个&#xff0c;这里仅以Direct为…

【微服务-链路跟踪】Spring Cloud Sleuth核心技术(上)

在前面几篇文章中&#xff0c;我们主要介绍了基于 Sentinel 如何对微服务架构提供限流、熔断保护。从本篇开始&#xff0c;我们继续完善微服务架构&#xff0c;通过介绍链路跟踪原理和基于SpringCloud Sleuth实现链路跟踪。 一、微服务链路跟踪原理 我们先看一个图&#xff0…

基于RTThread的学习(三):正点原子潘多拉 QSPI 通信 W25Q128 实验

1、基于芯片创建工程 2、QSPI配置 2.1、RTThing_setting 设置组件 2.2、配置board.h 文件 2.3、cubemx生成QSPI的硬件初始化代码&#xff1b;HAL_QSPI_MapInit; 这里注意&#xff1a;你所买的开发板对应的qspi 连接的是否是cubemx 上边显示的&#xff0c;如果不是你需要将引脚…

计算机服务器中了rmallox勒索病毒怎么办?Rmallox勒索病毒解密流程步骤

网络为企业的生产运营提供便利的同时&#xff0c;也为企业的数据安全带来严重威胁。随着互联网技术的不断应用与发展&#xff0c;企业的生产运营离不开网络&#xff0c;利用网络可以开展各项工作业务&#xff0c;极大地方便了企业生产运营&#xff0c;大大提升了企业生产效率&a…

MySQL学习笔记------事务

事务 事务是一组操作的集合&#xff0c;他是一个不可分割的单位&#xff0c;事务会把所有的操作作为一个整体一起向系统提交或撤销操作请求&#xff0c;即这些操作要么同时成功&#xff0c;要么同时失败 事务操作 create table account(id int comment ID,name varchar(10) …

前端| 富文本显示不全的解决方法

背景 前置条件&#xff1a;编辑器wangEditor vue项目 在pc端进行了富文本操作&#xff0c; 将word内容复制到编辑器中&#xff0c; 进行发布&#xff0c; pc端正常&#xff0c; 在手机端展示的时候 显示不全 分析 根据h5端编辑器内容的数据展示&#xff0c; 看到有一些样式造…

基于RKNN的YOLOv5安卓Demo

1.简介 基于RKNPU2 SDK 1.6.0版的安卓YOLOv5演示应用程序&#xff0c;选择图片进行对象检测并显示识别结果。 GitHub源码地址&#xff1a;https://github.com/shiyinghan/rknn-android-yolov5 2.实现过程 参考RKNN官方库RKNN Model Zoo提供的YOLOv5对象检测demo&#xff0c…