[TOC]mysql
实际应用中,咱们的系统在上线后,总会遇到一些问题,须要对redis进行迁移,或者说切实例。可是因为是线上系统,一个是要谨慎,一个是要保证服务可用,在不停服的状况进行处理。redis
好比,咱们的redis实例的机器宕机、或者机器磁盘只读、或者redis服务异常;或者须要rename一些高危命令;或者业务底层redis存储机制更改。当咱们遇到诸如此类的场景,那么就须要考虑切redis实例了,下面就一些经常使用场景来一一举例说明sql
一个大的前提是,业务访问资源,建议都是经过域名来访问,而不是ip来访问。微信
若是redis实例所在机器异常,须要迁移,而且这个redis实例,是业务的从库,业务这边作了读写分离,写主库、读从库的话,切从库是最容易实现的,基本就是DBA切个DNS,当前,前提是业务访问是经过域名访问而不是直接经过ip访问运维
假如主库是7526cdn
先从主库上搭建新的从库进程
7526 挂载新的实例host 并下掉老的实例Hostip
肯定老的从库的链接数,要保证老的从库没有链接,资源
若是老的从库没有链接了,而且新的从库有链接,就说明切从库实例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
提高从实例为主实例,而后把主从域名都指向从实例去,而后再搭建新的从库
在某些场景下,若是直接切主库、切从库都不合适,可能会致使数据不一致或者数据丢失;或者须要停服或者短暂停写的状况下,咱们就要考虑双写+迁移策略,双写+迁移策略是万能的,不只仅针对redis,其余资源如mysql等也是好使的。
这个方案稍微繁琐一点,可是有个好处就是必定保证不停服,不影响用户,而且可以回滚,保证数据一致性。缺点就是须要业务方在修改代码,而且再代码里面增长开关配置,好的作法是经过配置文件就可以打开双写、读写新库等
这个方案的两个关键点在于:
以上几种状况都是xxx项目在这一年多来遇到的,而且都是和运维、DBA一块儿作过迁移,算是一点点小经验。 另一点就是开发人员要可以分析排查问题,遇到线上问题后,要可以经过各类手段定位到缘由,再给出合适的解决方案
【"欢迎关注个人微信公众号:Linux 服务端系统研发,后面会大力经过微信公众号发送优质文章"】