Redis
Redis故障诊断
慢日志查询
安装、启动与连接
常用命令
常用命令2
主从
高可用(SENTINEL)
持久化(RDB、AOF)
集群(CLUSTER)
集群扩容与收缩
管理Redis
备份与恢复
内存使用情况
客户端
数据迁移
Redis配置
Python使用redis
Redis监控指标
本文档使用MrDoc发布
返回首页
-
+
数据迁移
2020年4月18日 10:40
admin
#单实例数据迁移 >##方式一:主从数据迁移 可参考:http://baodoc.frp.bao-server.club:22080/project/13/221/ >####1.查看源实例数据 redis> info keyspace >![](/media//202004/2020-04-18101036701509.png) >####2.把目标实例设置为源实例的从实例 reids> slaveof 192.168.31.146 6379 redis> info keyspace #等到数据信息跟源实例一致 >####3.同步完成后,把目标实例设置为主实例 redis> slaveof no noe --- >##方式二:RDB、AOF数据迁移 可参考:http://baodoc.frp.bao-server.club:22080/project/13/222/ >###RDB数据迁移: >![](/media//202004/2020-04-16191619918037.png) >####1.源实例进行RDB操作 redis> bgsave >####1.将源的RDB文件复制目标实例的dir指定的位置 scp -r /var/lib/redis/dump_bak/dump.202004161930.rdb 目标实例IP:/var/lib/redis/ >####2.关闭实例 redis> shutdown nosave >####3.将RDB文件重命名为dbfilename定义的名称 mv /var/lib/redis/dump.202004161930.rdb /var/lib/redis/dump.rdb >####4.重启redis --- >###AOF数据迁移: >####1.源实例进行AOF操作 redis> bgrewriteaof >####2.关闭目标实例 redis> shutdown nosave >####3.将源的RDB文件复制目标实例的dir指定的位置 scp -r /var/lib/redis/appendonly.aof 目标实例IP:/var/lib/redis/ >####4.重启redis --- >##RDB、AOF数据迁移: 确保开启了aof-use-rdb-preamble yes 将源实例的RDB和AOF文件一起复制到目标实例的对应目录,重启redis.具体步骤可将上面两种结合一起 --- >##方式三:特定键数据迁移 >####导出指定键 KEYS=$(redis-cli -h 源实例IP -p 源实例端口 --scan --pattern user* | awk '{printf("%s ",$1)}') echo ${KEYS} >![](/media//202004/2020-04-18104720314378.png) >####导入指定键 redis-cli -h 源实例IP -p 源实例端口 migrate 目标实例IP 目标实例端口 "" 0 5000 [copy/replace] keys ${KEYS} --- 参数说明: 0 #数据库 5000 #timeout 参数以毫秒为格式,指定当前实例和目标实例进行沟通的最大间隔时间 copy #不移除源实例上的 key 。 replace #替换目标实例上已存在的 key 。 "" #如果导入的键为多数,则要使用keys参数,故需先设置空,如果导入键只有一个,则此处填写键名,后面的keys ${KEYS}省略即可。 >![](/media//202004/2020-04-18112301561847.png) --- #单实例到集群数据迁移 >##1、创建A集群并转移槽位 >####集群搭建:[传送门](http://baodoc.frp.bao-server.club:22080/project/13/224/ "传送门") >#####将A集群的槽位全部转移到任一节点,这里我们假设转移到127.0.0.1:7001节点,在redis安装的bin目录下执行如下命令: ./redis-cli --cluster reshard 127.0.0.1:7001 >#####执行后,显示如下: >![](/media//202005/2020-05-25205900157821.png) >#####询问你要转移多少节点,由于我们是要从7002和7003节点转移到7001,所以这时我们需要查清楚每个节点总共多少槽位,通过上述cluster nodes知道,7002共有5460个槽位,7003共有5460个槽位。这里我们先转移7002节点。我们输入5460后回车 >![](/media//202005/2020-05-25210002003559.png) >#####询问你哪个节点接收转移的槽位,这里是7001节点,我们输入7001节点的ID即可 >![](/media//202005/2020-05-25210025366230.png) >#####此处是让你输入来源的节点ID,输入完7002的节点ID,再次输入done回车即可。 >![](/media//202005/2020-05-25210057123527.png) >#####后续提示,输入yes即可。至此,7002节点的槽位转移完成。我们可以进入任意节点,查看cluster nodes情况 >![](/media//202005/2020-05-25210156149058.png) >#####可以看到,7002节点的槽位已全部转移到7001节点。 >#####接下来将7003节点的槽位转移到7001节点,操作方法与上述步骤相同。 --- >##2、转移数据 >#####停止业务并把单实例的持久化文件(RDB与AOF),拷贝到A集群的7001节点下。 停止业务:可以用防火墙屏蔽端口 redis-cli -h 127.0.0.1 -p 6379 bgsave cp RDB与AOF 7001节点目录 --- >##3、启动A节点,并重新平衡槽位 ./redis-server ../redis.conf #启动redis redis-cli --cluster rebalance 127.0.0.1:6379 #平衡槽位 --- #集群到集群数据迁移 >##1、转移A集群槽位 >#####将A集群的槽位全部转移到任一节点,这里我们假设转移到127.0.0.1:7001节点,在redis安装的bin目录下执行如下命令: ./redis-cli --cluster reshard 127.0.0.1:7001 >#####执行后,显示如下: >![](/media//202005/2020-05-25205900157821.png) >#####询问你要转移多少节点,由于我们是要从7002和7003节点转移到7001,所以这时我们需要查清楚每个节点总共多少槽位,通过上述cluster nodes知道,7002共有5460个槽位,7003共有5460个槽位。这里我们先转移7002节点。我们输入5460后回车 >![](/media//202005/2020-05-25210002003559.png) >#####询问你哪个节点接收转移的槽位,这里是7001节点,我们输入7001节点的ID即可 >![](/media//202005/2020-05-25210025366230.png) >#####此处是让你输入来源的节点ID,输入完7002的节点ID,再次输入done回车即可。 >![](/media//202005/2020-05-25210057123527.png) >#####后续提示,输入yes即可。至此,7002节点的槽位转移完成。我们可以进入任意节点,查看cluster nodes情况 >![](/media//202005/2020-05-25210156149058.png) >#####可以看到,7002节点的槽位已全部转移到7001节点。 >#####接下来将7003节点的槽位转移到7001节点,操作方法与上述步骤相同。 --- >##2、转移B集群槽位 >#####B集群的槽位也要统一转移到具体某个节点,转移方法同上。 --- >##3、转移数据 >#####槽点转移完毕后,我们可以拷贝A集群的7001节点下的持久化文件,我们这里是rdb文件,如果设置了aof文件,则将aof文件进行拷贝到B集群中的某个节点,此节点是B集群所有槽位集中的节点。 --- >##4、启动B集群 >#####此时集群数据全部集中在某个节点,此时可以将槽位平均分配到各个节点,操作步骤单实例中的平衡槽位
分享到: