工做中redis合库以及aof踩坑记

概述

    此文是第一次搞redis主从小白犯的错,大神能够忽略。记录为了让看到本博文的小白前车可鉴redis

软件资源

            centOs:6.5服务器

            redis:2.8.10session

 背景  

            公司现有架构均是单机模式,本文仅先介绍redis单机踩的坑-- 即生产应用redis均是单一实例,一旦实例挂掉功能就会不可用。现公司业务使用了一台实例(业务实例),一台session共享实例(session实例)。架构

            现须要对现有架构升级(后续会出整个架构升级的相关博客),先从最简单的redis开始开刀,采用主从复制,启用哨兵监听进行主从切换(后续会有相关详细博客)。spa

基本问题

  •  线上redis仅启用了rdb持久化,须要启用AOF
  • 线上业务实例和session实例 keys<1W,能够把业务实例和session实例合并节约资源

踩坑记

    AOF挖坑

      已经搭建了主从模式,建立了多个key验证没问题, 很开心ing, 发现须要启用AOF,查看官方文档认为so easy, 因而乎 改改改配置,重启服务,在主节点添加了一个key,主从验证经过, 很是开心ing。资源

    【敲黑板,开始挖坑了哈】 此时模拟极端故障,把主从节点都停掉了,开始依次开启服务,发现仅有开启AOF后添加的一个key,泪崩ing。。。。文档

    AOF填坑

    通过屡次尝试,终于找到问题博客

    问题解析:redis运行一段时间后 再开启AOF,AOF持久化文件是个空文件,它只会追加开启AOF后的操做记录,开启AOF以前的操做均不会记录,因此我挖坑过程当中,开启AOF后没有对那些旧key作过任何操做,致使没有记录到旧key的操做,全部再次启动时,仅仅恢复了开启AOF后操做的keyio

    解决方案:运行了一段时间的redis,才开启AOF必定要记得先对实例进行一次AOF持久化,即持久化一下开启AOF持久化以前的数据软件

    合库挖坑

    由于要把session实例和业务实例作一次数据合并,太懒,不想写脚本作redis数据迁移。。想到了AOF持久化文件,将两个实例的AOF文件作一次合并,而后重启服务不就能够作合库操做了吗?

    【敲黑板,开始挖坑了哈】

    业务实例的AOF文件内容以下

    session实例的AOF文件内容以下:

把session实例AOF文件内容复制到业务实例AOF中,内容以下:

 

此处文件自己最后还有一个25行的空行, 本人洁癖,很开心的删掉了。

把文件放到服务器替换AOF文件,重启redis服务

报出了AOF损坏的错误

   合库填坑

    根据提示执行了修复命令,查看修复后的文件和我合并文件,发现最后一条命令自行修复删除了,推断是最后一条命令有问题

    问题解析:因为本人把最后的空行删除了,致使AOF检验失败,查看AOF文件格式,推断出那个空行是redis的标识行,专门用来对新命令作追加操做。

    解决方案:加上最后一行换行符,实践证实,手--贱是要付出代价的!!!手--贱是要付出代价的!!!手--贱是要付出代价的!!!

相关文章
相关标签/搜索