博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
线上redis迁移思路
阅读量:7144 次
发布时间:2019-06-29

本文共 1738 字,大约阅读时间需要 5 分钟。

[TOC]

线上redis迁移思路

背景

实际应用中,我们的系统在上线后,总会遇到一些问题,需要对redis进行迁移,或者说切实例。但是由于是线上系统,一个是要谨慎,一个是要保证服务可用,在不停服的情况进行处理。

比如,我们的redis实例的机器宕机、或者机器磁盘只读、或者redis服务异常;或者需要rename一些高危命令;或者业务底层redis存储机制更改。当我们遇到诸如此类的场景,那么就需要考虑切redis实例了,下面就一些常用场景来一一举例说明

一个大的前提是,业务访问资源,建议都是通过域名来访问,而不是ip来访问。

迁移方案

迁移从库

背景

如果redis实例所在机器异常,需要迁移,并且这个redis实例,是业务的从库,业务这边做了读写分离,写主库、读从库的话,切从库是最容易实现的,基本就是DBA切个DNS,当前,前提是业务访问是通过域名访问而不是直接通过ip访问

具体方案

假如主库是7526

  1. 先从主库上搭建新的从库

  2. 7526 挂载新的实例host 并下掉老的实例Host

  3. 确定老的从库的连接数,要保证老的从库没有连接,

    • 可以通过info查看client, 也可以client list 查看
    • DBA 可以通过监控查看, 也可以通过登录redis主机查看
  4. 如果老的从库没有连接了,并且新的从库有连接,就说明切从库实例ok

一般,通过DNS来解析的话,业务如果采用连接池等方式,那可能迁移的过程,业务需要重启,才能保证马上断开连接,实际中就发现虽然ping 从库域名已经是新的ip地址了,但是时间上,程序里面连接的还是老的ip,这个时候需要重启一下服务

迁移主库

背景

如果redis实例所在机器异常,或者其他需要迁移,并且这个redis实例,是业务的主库,那么迁移主库的流程,相对从库的流程就稍微麻烦一点。

具体方案

前提如下:

m7614.xxx.redis.com 对应的IP是 192.168.xxx.93

s7614.xxx.redis.com 对应的ip是 192.168.xxx.94

思路:

提升从实例为主实例,然后把主从域名都指向从实例去,然后再搭建新的从库

迁移流程是:
  1. 把192.168.xxx.94 slave_readonly 设置为no,并设置 slaveof no one(配置文件删slaveof 192.168.xxx.93 7614)
  2. 然后要注意192.168.xxx.94要同步完原主库的数据,等数据同步完后,再把m7614.xxx.redis.com 解析改到 192.168.xxx.94,然后业务确定域名是否解析正常
  3. 业务这边如果有长连接进程的话重启相关进程 ,重启老的主库实例进程(程序端),确保老库没有连接
  4. 重新搭建从实例。
  5. 新从库建好后,再重新搞一下从库的域名并挂载到新从库上

双写+迁移

背景

在某些场景下,如果直接切主库、切从库都不合适,可能会导致数据不一致或者数据丢失;或者需要停服或者短暂停写的情况下,我们就要考虑双写+迁移策略,双写+迁移策略是万能的,不仅仅针对redis,其他资源如mysql等也是好使的。

这个方案稍微繁琐一点,但是有个好处就是一定保证不停服,不影响用户,并且能够回滚,保证数据一致性。缺点就是需要业务方在修改代码,并且再代码里面增加开关配置,好的做法是通过配置文件就能够打开双写、读写新库等

具体方案

  1. 业务方修改代码,增加双写配置开关,然后更新上线
  2. 再在代码里面开启双写,也就是新库老库都写
  3. 后台进程或者脚本进行数据同步,把老库的数据同步到新库中,并要做check,确保数据一定是一致的
  4. 同步完成后,通过代码配置文件来控制停止双写,读写新库。
  5. 确保读写新库ok后,再清掉老库的某个迁移出去的db。

这个方案的两个关键点在于:

  1. 代码里面增加的双写开关配置,要做到抽象,确保通过配置,就能打开双写配置、停止双写、读写新库
  2. 后台脚本校验程序要做好,确保数据的一致性

总结

以上几种情况都是xxx项目在这一年多来遇到的,并且都是和运维、DBA一起做过迁移,算是一点点小经验。 另外一点就是开发人员要能够分析排查问题,遇到线上问题后,要能够通过各种手段定位到原因,再给出合适的解决方案

转载地址:http://fiwgl.baihongyu.com/

你可能感兴趣的文章
jsp里面实现asp.net的Global文件内容。
查看>>
Oracle ROWID
查看>>
WCF服务通信测试
查看>>
dos命令dir查找文件的用法及实例
查看>>
Hadoop守护进程【简--】
查看>>
uboot中gd的定义和使用
查看>>
Tcpdump MySQL Query
查看>>
mac jdbc连接mysql
查看>>
Activity生命周期的学习以及Logcat的使用
查看>>
Environment 常用方法
查看>>
【TYVJ】1338 QQ农场(最大流+最大权闭合图)
查看>>
一个睡五分钟等于六个钟头的方法
查看>>
Material Designer的低版本兼容实现(五)—— ActivityOptionsCompat
查看>>
Mysql监控工具小集合
查看>>
POJ 1654 Area 计算几何
查看>>
Linux下Nginx+Tomcat整合的安装与配置
查看>>
Python的安装和详细配置(转)
查看>>
FloatingActionButton
查看>>
[再寄小读者之数学篇](2014-11-24 Abel 定理)
查看>>
iText导出pdf、word、图片
查看>>