redis數(shù)據(jù)遷移

前期準備

在進行數(shù)據(jù)遷移之前,一定要做好遷移前的準備。

  • 環(huán)境調研,源和目標數(shù)據(jù)庫環(huán)境、版本、數(shù)據(jù)量大小、業(yè)務場景、操作系統(tǒng)版本等
  • 方案準備,盡量詳細、遷移失敗導致源數(shù)據(jù)庫掛了是否有數(shù)據(jù)備份回退方案
  • 人員角色到齊,數(shù)據(jù)遷移放在晚上,最好是A/B角色一起參與。
  • 對業(yè)務影響范圍充分了解,對源數(shù)據(jù)用monitor命令查看有哪些ip進行了操作(過慮掉ping、info、slowlog的ip),host轉為域名
  • 停機窗口、這段時間要是出現(xiàn)問題怎么處理

檢查

  • 對比源和目標的環(huán)境(info、uname -a命令)
  • 了解業(yè)務的影響范圍(monitor、wak、sort等命令,有哪些對源進行了crud)
  • 人員備齊(開發(fā)、運維)
  • 源數(shù)據(jù)的備份,萬一遷移的時候源掛了
  • 數(shù)據(jù)雙寫,在寫源的時候,寫一份到目標機器,采用先雙寫后面增量或者全量補充歷史數(shù)據(jù)的方式。

平滑遷移-雙寫法方案

  • 主要分為四個步驟。

  • 步驟一:服務進行升級,對“對舊庫上的數(shù)據(jù)修改”(這里的修改,為數(shù)據(jù)的insert, delete, update),在新庫上進行相同的修改操作,這就是所謂的“雙寫”,主要修改操作包括:

    1. 舊庫與新庫的同時insert
    2. 舊庫與新庫的同時delete
    3. 舊庫與新庫的同時update
  • 由于新庫中此時是沒有數(shù)據(jù)的,所以雙寫舊庫與新庫中的affect rows可能不一樣,不過這完全不影響業(yè)務功能,只要不切庫,依然是舊庫提供業(yè)務服務。

  • 這個服務升級風險較小:

    1. 寫接口是少數(shù)接口,改動點較少
    2. 新庫的寫操作執(zhí)行成功與否,對業(yè)務功能沒有任何影響

  • 步驟二:研發(fā)一個數(shù)據(jù)遷移工具,進行數(shù)據(jù)遷移,把舊庫中的數(shù)據(jù)轉移到新庫中來。

  • 這個小工具的風險較小:

    1. 整個過程依然是舊庫對線上提供服務
    2. 小工具的復雜度較低
    3. 任何時間發(fā)現(xiàn)問題,都可以把新庫中的數(shù)據(jù)干掉重來
    4. 可以限速慢慢遷移,技術同學沒有時間壓力
  • 數(shù)據(jù)遷移完成之后,就能夠切到新庫提供服務了么?

    • 答案是肯定的,因為前置步驟進行了雙寫,所以理論上數(shù)據(jù)遷移完之后,新庫與舊庫的數(shù)據(jù)應該完全一致。
  • 在一種非常非常非常極限的情況下:

    1. date-migrate-tool剛好從舊庫中將某一條數(shù)據(jù)X取出
    2. 在X插入到新庫中之前,舊庫與新庫中剛好對X進行了雙delete操作
    3. date-migrate-tool再將X插入到新庫中
  • 這樣,會出現(xiàn)新庫比舊庫多出一條數(shù)據(jù)X。

  • 但無論如何,為了保證數(shù)據(jù)的一致性,切庫之前,還是需要進行數(shù)據(jù)校驗的


  • 步驟三:在數(shù)據(jù)遷移完成之后,需要使用數(shù)據(jù)校驗的小工具,將舊庫和新庫中的數(shù)據(jù)進行比對,完全一致則符合預期,如果出現(xiàn)步驟二中的極限不一致情況,則以舊庫中的數(shù)據(jù)為準。

  • 這個小工具的風險依舊很?。?/p>

    1. 整個過程依然是舊庫對線上提供服務
    2. 小工具的復雜度較低
    3. 任何時間發(fā)現(xiàn)問題,大不了從步驟二開始重來
    4. 可以限速慢慢比對數(shù)據(jù),技術同學沒有時間壓力

  • 步驟四:數(shù)據(jù)完全一致之后,將流量切到新庫,完成平滑數(shù)據(jù)遷移。
  • 至此,升級完畢,整個過程能夠持續(xù)對線上提供服務,不影響服務的可用性。

總結

針對互聯(lián)網(wǎng)很多“數(shù)據(jù)量較大,并發(fā)量較大,業(yè)務復雜度較高”的業(yè)務場景,在

  1. 底層表結構變更
  2. 分庫個數(shù)變換
  3. 底層存儲介質變換

的眾多需求下,需要進行數(shù)據(jù)遷移,完成“平滑遷移數(shù)據(jù),遷移過程不停機,保證系統(tǒng)持續(xù)服務”的解決方案。

  • 雙寫法,四個步驟:
  1. 服務進行升級,記錄“對舊庫上的數(shù)據(jù)修改”進行新庫的雙寫
  2. 研發(fā)一個數(shù)據(jù)遷移小工具,進行數(shù)據(jù)遷移
  3. 研發(fā)一個數(shù)據(jù)比對小工具,校驗數(shù)據(jù)一致性
  4. 流量切到新庫,完成平滑遷移
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容