老司机的 redis 数据迁移笔记-阿里云开发者社区

开发者社区> 周梦康> 正文

老司机的 redis 数据迁移笔记

简介: 老服务器上内存一直报警,所以要把一部分redis数据迁移到新服务器上去。 迁移的方式有两种,一种是停服务器,搬迁数据;另一种通过主从同步转移。 停服务器,搬迁数据 首先在原服务器上执行redis-cli shutdown命令,该命令会触发保证写RDB文件以及将AOF文件写入磁盘,不会丢失数
+关注继续查看

老服务器上内存一直报警,所以要把一部分redis数据迁移到新服务器上去。

迁移的方式有两种,一种是停服务器,搬迁数据;另一种通过主从同步转移。

停服务器,搬迁数据

  1. 首先在原服务器上执行redis-cli shutdown命令,该命令会触发保证写RDB文件以及将AOF文件写入磁盘,不会丢失数据。 如果是kill -9 pid就会丢失数据。

  2. 然后将RDB文件和AOF文件都拷贝到新服务器上,注意需要与redis.conf文件中指定RDB文件名和AOF文件名匹配。

  3. 最后在新服务器上启动redis服务器。

个人觉得这种方式有点暴力,因为中间将数据保存到磁盘、拷贝数据、启动服务器,将数据从磁盘导入内存,会有很长一段时间。这段时间对线上服务造成不小的影响,所以我也没这么用。

主从同步转移

  1. 首先在新服务器上直接进入redis-cli,执行从库配置slaveof 192.168.1.100 6379,这里假设要将192.168.1.1006379端口的redis服务转移过来。这样就已经开始同步了。通过info可以查看当前服务器是slave

  2. 然后通过info命令查看master_link_status,如果为up,表示同步完成。(在同步过程中,执行查询的时候还是会提示"Redis is loading the dataset in memory",这属于正常情况.把数据从磁盘文件加载到内存中可能会消耗很长的一段时间。)

  3. 最后断开主从关系,在redis-cli命令行下执行slaveof no one提示OK,再通过info查看,该新服务器已经自己变成master了。

善后

确保旧的服务器的服务已经停止服务

上面没有配合说明业务代码对服务器的请求切换,但是我们在切换完服务之后肯定需要转移业务代码的请求吧。那么如何确定服务已经完全转移走了呢?

在旧服务器上通过netstat命令查看是否还有请求过来。

$ netstat -an|grep "100:6379"|wc -l

有时候netstat的结果也不一定准,因为有些请求已经不在,但是socket状态还在,比如CLOSE_WAIT状态最长可持续2小时。同时socket请求太快,也会出现netstat没数据,但是实际网卡有流量的情况。

我们可以通过tcdump监控网卡在该端口上确实已经没有流量。

tcpdump  -i em2 -vv -nn host  192.168.1.100 and  port 6379

注意排除监控系统对该redis实例的请求。

如何判断 redis 已经同步完毕呢?

  1. 在命令行查看 info master_link_status:up,则表示同步完成了。

  2. 日志文件也可以看

    [48864] 12 Jun 11:24:03.549 * The server is now ready to accept connections on port 6310
    [48864] 12 Jun 11:31:52.936 * SLAVE OF 192.168.50.17:8004 enabled (user request)
    [48864] 12 Jun 11:31:53.467 * Connecting to MASTER 192.168.50.17:8004
    [48864] 12 Jun 11:31:53.467 * MASTER <-> SLAVE sync started
    [48864] 12 Jun 11:31:53.470 * Non blocking connect for SYNC fired the event.
    [48864] 12 Jun 11:31:53.470 * Master replied to PING, replication can continue...
    [48864] 12 Jun 11:31:53.470 * Partial resynchronization not possible (no cached master)
    [48864] 12 Jun 11:31:53.470 * Master does not support PSYNC or is in error state (reply: -ERR unknown command 'PSYNC')
    [48864] 12 Jun 11:31:53.470 * Retrying with SYNC...
    [48864] 12 Jun 11:32:13.085 * MASTER <-> SLAVE sync: receiving 484322714 bytes from master
    [48864] 12 Jun 11:32:18.498 * MASTER <-> SLAVE sync: Flushing old data
    [48864] 12 Jun 11:32:18.498 * MASTER <-> SLAVE sync: Loading DB in memory
    [48864] 12 Jun 11:32:32.349 * MASTER <-> SLAVE sync: Finished with succes

RDS是一种稳定可靠、可弹性伸缩的在线数据库服务。支持MySQL、SQL Server、PostgreSQL、高度兼容Oracle。

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
Python零基础学习笔记(四)——数据类型
python数据类型:Number(数字):包括整数/浮点数(小数)/复数String(字符串)Boolean(布尔值)None(空值)list(列表)tuple(元组)dict(字典)set(集合)
1236 0
高可用笔记(3)nginx+tomcat+redis
在《高可用笔记(1)nginx》中已经使用过nginx反向代理tomcat的http服务,本文将介绍如何用nginx+tomcat+redis的组合实现负载均衡。
3369 0
Java笔记——Redis分布式锁解决方案
我们知道分布式锁的特性是排他、避免死锁、高可用。分布式锁的实现可以通过数据库的乐观锁(通过版本号)或者悲观锁(通过for update)、Redis的setnx()命令、Zookeeper(在某个持久节点添加临时有序节点,判断当前节点是否是序列中最小的节点,如果不是则监听比当前节点还要小的节点。
1260 0
redis学习笔记
Window 下安装 下载地址:https://github.com/MSOpenTech/redis/releases Redis 支持 32 位和 64 位。这个需要根据你系统平台的实际情况选择,这里我们下载 Redis-x64-xxx.zip压缩包到 随便哪个盘,解压后,将文件夹重新命名为 redis。
890 0
redis数据结构、持久化、缓存淘汰策略
redis数据结构、持久化、缓存淘汰策略Redis 单线程高性能,它所有的数据都在内存中,所有的运算都是内存级别的运算,而且单线程避免了多线程的切换性能损耗问题。redis利用epoll来实现IO多路复用,将连接信息和事件放到队列中,依次放到文件事件分派器,事件分派器将事件分发给事件处理器。
928 0
iOS开发笔记 7、数据【Preferences、文件、库、Core Data】
程序开发中根据要使用各种各样的数据,如配制、文件系统、数据库等,iOS对这个有很好的支持 Preferences If you’re going to create a program that has built-in preferences, you should do so using the Utility Application template.
817 0
手机淘宝短视频业务「哇哦视频」迁移上 FaaS 笔记公开
在看了那么多“技术原理/顶层设计/平台建设”相关的文章之后,我相信你对 FaaS 肯定产生过跃跃欲试的感觉,但也肯定存在诸多疑惑。关于这些疑惑,经过了这四个月的考验,我想我已经有了自己的答案。接下来我将会向大家分享我这四个月的历程,带大家一起看看,在一名一线业务同学的眼中,FaaS 究竟会给前端同学带来什么?
341 0
Django学习笔记----数据库操作实例
上上篇>Django学习笔记----环境搭建基于Windows 上一篇>Django学习笔记----快速入门 修改settings.py配置 在环境搭建篇, 我们已经安装了mysql-client包 安装好后, 在settings.
1203 0
数据结构学习笔记——最大子列和问题
PTA 中国大学MOOC-陈越、何钦铭-数据结构 01-复杂度1 最大子列和问题(20 分) 给定K个整数组成的序列{ N​1​​ , N​2​​ , ..., N​k},“连续子列”被定义为{ N​i , N​i+1​​ , ..., N​j},其中 1≤i≤j≤K。
1025 0
+关注
周梦康
十年前从 LNMP 开始个人站长 mengkang.net 生涯。 分享各种线上故障复盘笔记,关注我,防止采坑。
116
文章
70
问答
文章排行榜
最热
最新
相关电子书
更多
《2021云上架构与运维峰会演讲合集》
立即下载
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载