事情起因
redis master 所在物理機(jī)A, 物理內(nèi)存16G, aof rewrite 被觸發(fā)時(shí), aof文件已達(dá)12G, redis的默認(rèn)配置觸發(fā)了后臺(tái)
的rewrite進(jìn)程, 內(nèi)存占用達(dá)到了50%, 已嚴(yán)重影響到redis的正常訪問. 而此時(shí)距離會(huì)對(duì)該redis master進(jìn)行寫操作
的業(yè)務(wù)進(jìn)程開始運(yùn)行只剩1小時(shí).
處理過程
跟組里幾名同事一起理清楚問題現(xiàn)狀
- redis slave的數(shù)據(jù)是完整的, 1小時(shí)內(nèi)不會(huì)有寫入請求
- aof rewrite進(jìn)程已運(yùn)行2小時(shí), 是否能在1小時(shí)內(nèi)運(yùn)行完畢不可控
- aof rewrite進(jìn)程, 即使在1小時(shí)內(nèi)運(yùn)行完, 不確認(rèn)是否會(huì)馬上觸發(fā)第2次rewrite
整理方案如下:
- 將物理機(jī)B的redis slave切換為master, 使其跟現(xiàn)有物理機(jī)A的redis脫離master-slave關(guān)系
- 對(duì)生產(chǎn)環(huán)境的相關(guān)進(jìn)程進(jìn)行配置, 使其連接到新的redis master
- 測試, 驗(yàn)證服務(wù)正常
- stop原來物理機(jī)A上的舊master進(jìn)行, 暫時(shí)保留現(xiàn)場不動(dòng)
- 第2天, 在執(zhí)行寫操作的業(yè)務(wù)進(jìn)程停止寫入后, 清理redis中的歷史數(shù)據(jù)
周末進(jìn)一步處理
- 備份和準(zhǔn)備好必要的數(shù)據(jù)(這步很重要, 對(duì)生產(chǎn)環(huán)境的任何變更, 一定要做好備份)
- 將物理機(jī)A的redis配置為物理機(jī)B新master的slave
- 重命名該redis配置路徑的aof文件
- 重啟該redis, 使該redis從0開始從物理機(jī)A的redis master進(jìn)行數(shù)據(jù)同步
- 手動(dòng)觸發(fā)物理機(jī)B的redis master的aof rewrite, 此過程完成后, aof文件從10G變?yōu)?.5G
補(bǔ)齊定期刪除歷史數(shù)據(jù)的server邏輯
|