工做中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的標識行,專門用來對新命令作追加操做。

    解決方案:加上最後一行換行符,實踐證實,手--賤是要付出代價的!!!手--賤是要付出代價的!!!手--賤是要付出代價的!!!

相關文章
相關標籤/搜索