redis 数据迁移

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

1.1 停服务器,搬迁数据

  1. 首先在原服务器上执行redis-cli shutdown命令,该命令会触发保证写RDB文件以及将AOF文件写入磁盘,不会丢失数据。 如果是kill -9 pid就会丢失数据。
  2. 然后将RDB文件和AOF文件都拷贝到新服务器上,注意需要与redis.conf文件中指定RDB文件名和AOF文件名匹配。
  3. 最后在新服务器上启动redis服务器。

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

1.2 主从同步转移

  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 "10.0.3.234:6380"|wc -l

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

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

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

tcpdump  -i ens160 -vv -nn host  10.0.3.234 and  port 6380

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

  1. 在命令行查看 info master_link_status:up,则表示同步完成了。
  2. 日志文件也可以看

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值