緩存架構之03:在項目中部署redis企業(yè)級數(shù)據(jù)備份方案以及各種踩坑的數(shù)據(jù)恢復容災演練

到這里為止榔昔,其實還是停留在簡單學習知識的程度聘殖,學會了redis的持久化的原理和操作,但是在企業(yè)中续挟,持久化到底是怎么去用得呢紧卒?

企業(yè)級的數(shù)據(jù)備份和各種災難下的數(shù)據(jù)恢復,是怎么做得呢诗祸?

1常侦、企業(yè)級的持久化的配置策略

在企業(yè)中,RDB的生成策略贬媒,用默認的也差不多

save 60 10000:如果你希望盡可能確保說,RDB最多丟1分鐘的數(shù)據(jù)肘习,那么盡量就是每隔1分鐘都生成一個快照际乘,低峰期,數(shù)據(jù)量很少漂佩,也沒必要

10000->生成RDB脖含,1000->RDB,這個根據(jù)你自己的應用和業(yè)務的數(shù)據(jù)量投蝉,你自己去決定

AOF一定要打開养葵,fsync,everysec

auto-aof-rewrite-percentage 100: 就是當前AOF大小膨脹到超過上次100%瘩缆,上次的兩倍

auto-aof-rewrite-min-size 64mb: 根據(jù)你的數(shù)據(jù)量來定关拒,16mb,32mb

2庸娱、企業(yè)級的數(shù)據(jù)備份方案

RDB非常適合做冷備着绊,每次生成之后,就不會再有修改了

數(shù)據(jù)備份方案

(1)寫crontab定時調(diào)度腳本去做數(shù)據(jù)備份

(2)每小時都copy一份rdb的備份熟尉,到一個目錄中去归露,僅僅保留最近48小時的備份

(3)每天都保留一份當日的rdb的備份,到一個目錄中去斤儿,僅僅保留最近1個月的備份

(4)每次copy備份的時候剧包,都把太舊的備份給刪了

(5)每天晚上將當前服務器上所有的數(shù)據(jù)備份,發(fā)送一份到遠程的云服務上去

/usr/local/redis

每小時copy一次備份往果,刪除48小時前的數(shù)據(jù)

crontab -e

0 * * * * sh /usr/local/redis/copy/redis_rdb_copy_hourly.sh

redis_rdb_copy_hourly.sh

#!/bin/sh

cur_date=`date +%Y%m%d%k`

rm -rf /usr/local/redis/snapshotting/$cur_date

mkdir /usr/local/redis/snapshotting/$cur_date

cp /var/redis/6379/dump.rdb /usr/local/redis/snapshotting/$cur_date

del_date=`date -d -48hour +%Y%m%d%k`

rm -rf /usr/local/redis/snapshotting/$del_date

每天copy一次備份

crontab -e

0 0 * * * sh /usr/local/redis/copy/redis_rdb_copy_daily.sh

redis_rdb_copy_daily.sh

#!/bin/sh

cur_date=`date +%Y%m%d`

rm -rf /usr/local/redis/snapshotting/$cur_date

mkdir /usr/local/redis/snapshotting/$cur_date

cp /var/redis/6379/dump.rdb /usr/local/redis/snapshotting/$cur_date

del_date=`date -d -1month +%Y%m%d`

rm -rf /usr/local/redis/snapshotting/$del_date

每天一次將所有數(shù)據(jù)上傳一次到遠程的云服務器上去

3疆液、數(shù)據(jù)恢復方案

(1)如果是redis進程掛掉,那么重啟redis進程即可棚放,直接基于AOF日志文件恢復數(shù)據(jù)

不演示了枚粘,在AOF數(shù)據(jù)恢復那一塊,演示了飘蚯,fsync everysec馍迄,最多就丟一秒的數(shù)

(2)如果是redis進程所在機器掛掉福也,那么重啟機器后,嘗試重啟redis進程攀圈,嘗試直接基于AOF日志文件進行數(shù)據(jù)恢復

AOF沒有破損暴凑,也是可以直接基于AOF恢復的

AOF append-only,順序?qū)懭胱咐矗绻鸄OF文件破損现喳,那么用redis-check-aof fix

(3)如果redis當前最新的AOF和RDB文件出現(xiàn)了丟失/損壞,那么可以嘗試基于該機器上當前的某個最新的RDB數(shù)據(jù)副本進行數(shù)據(jù)恢復

當前最新的AOF和RDB文件都出現(xiàn)了丟失/損壞到無法恢復犬辰,一般不是機器的故障嗦篱,人為

大數(shù)據(jù)系統(tǒng),hadoop幌缝,有人不小心就把hadoop中存儲的大量的數(shù)據(jù)文件對應的目錄灸促,rm -rf一下,我朋友的一個小公司涵卵,運維不太靠譜浴栽,權限也弄的不太好

/var/redis/6379下的文件給刪除了

找到RDB最新的一份備份,小時級的備份可以了轿偎,小時級的肯定是最新的典鸡,copy到redis里面去,就可以恢復到某一個小時的數(shù)據(jù)

容災演練

我跟大家解釋一下坏晦,我其實上課萝玷,為什么大量的講師可能講課就是純PPT,或者是各種復制粘貼英遭,都不是現(xiàn)場講解和寫代碼演示的

很容易出錯间护,為了避免出錯,一般就會那樣玩兒

吐槽挖诸,念PPT汁尺,效果很差

真實的,備課多律,講課不可避免痴突,會出現(xiàn)一些問題,但是我覺得還好狼荞,真實

appendonly.aof + dump.rdb辽装,優(yōu)先用appendonly.aof去恢復數(shù)據(jù),但是我們發(fā)現(xiàn)redis自動生成的appendonly.aof是沒有數(shù)據(jù)的

然后我們自己的dump.rdb是有數(shù)據(jù)的相味,但是明顯沒用我們的數(shù)據(jù)

redis啟動的時候拾积,自動重新基于內(nèi)存的數(shù)據(jù),生成了一份最新的rdb快照,直接用空的數(shù)據(jù)拓巧,覆蓋掉了我們有數(shù)據(jù)的斯碌,拷貝過去的那份dump.rdb

你停止redis之后,其實應該先刪除appendonly.aof肛度,然后將我們的dump.rdb拷貝過去傻唾,然后再重啟redis

很簡單,就是雖然你刪除了appendonly.aof承耿,但是因為打開了aof持久化冠骄,redis就一定會優(yōu)先基于aof去恢復,即使文件不在加袋,那就創(chuàng)建一個新的空的aof文件

停止redis凛辣,暫時在配置中關閉aof,然后拷貝一份rdb過來职烧,再重啟redis蟀给,數(shù)據(jù)能不能恢復過來,可以恢復過來

腦子一熱阳堕,再關掉redis,手動修改配置文件择克,打開aof恬总,再重啟redis,數(shù)據(jù)又沒了肚邢,空的aof文件壹堰,所有數(shù)據(jù)又沒了

在數(shù)據(jù)安全丟失的情況下,基于rdb冷備骡湖,如何完美的恢復數(shù)據(jù)贱纠,同時還保持aof和rdb的雙開

停止redis,關閉aof响蕴,拷貝rdb備份谆焊,重啟redis,確認數(shù)據(jù)恢復浦夷,直接在命令行熱修改redis配置辖试,打開aof,這個redis就會將內(nèi)存中的數(shù)據(jù)對應的日志劈狐,寫入aof文件中

此時aof和rdb兩份數(shù)據(jù)文件的數(shù)據(jù)就同步了

redis config set熱修改配置參數(shù)罐孝,可能配置文件中的實際的參數(shù)沒有被持久化的修改,再次停止redis肥缔,手動修改配置文件莲兢,打開aof的命令,再次重啟redis

(4)如果當前機器上的所有RDB文件全部損壞,那么從遠程的云服務上拉取最新的RDB快照回來恢復數(shù)據(jù)

(5)如果是發(fā)現(xiàn)有重大的數(shù)據(jù)錯誤改艇,比如某個小時上線的程序一下子將數(shù)據(jù)全部污染了收班,數(shù)據(jù)全錯了,那么可以選擇某個更早的時間點遣耍,對數(shù)據(jù)進行恢復

舉個例子闺阱,12點上線了代碼,發(fā)現(xiàn)代碼有bug舵变,導致代碼生成的所有的緩存數(shù)據(jù)酣溃,寫入redis,全部錯了

找到一份11點的rdb的冷備纪隙,然后按照上面的步驟赊豌,去恢復到11點的數(shù)據(jù),不就可以了嗎

?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末绵咱,一起剝皮案震驚了整個濱河市碘饼,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌悲伶,老刑警劉巖艾恼,帶你破解...
    沈念sama閱讀 222,627評論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異麸锉,居然都是意外死亡钠绍,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,180評論 3 399
  • 文/潘曉璐 我一進店門花沉,熙熙樓的掌柜王于貴愁眉苦臉地迎上來柳爽,“玉大人,你說我怎么就攤上這事碱屁×赘” “怎么了?”我有些...
    開封第一講書人閱讀 169,346評論 0 362
  • 文/不壞的土叔 我叫張陵娩脾,是天一觀的道長赵誓。 經(jīng)常有香客問我,道長柿赊,這世上最難降的妖魔是什么架曹? 我笑而不...
    開封第一講書人閱讀 60,097評論 1 300
  • 正文 為了忘掉前任,我火速辦了婚禮闹瞧,結果婚禮上绑雄,老公的妹妹穿的比我還像新娘。我一直安慰自己奥邮,他們只是感情好万牺,可當我...
    茶點故事閱讀 69,100評論 6 398
  • 文/花漫 我一把揭開白布罗珍。 她就那樣靜靜地躺著,像睡著了一般脚粟。 火紅的嫁衣襯著肌膚如雪覆旱。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,696評論 1 312
  • 那天核无,我揣著相機與錄音扣唱,去河邊找鬼。 笑死团南,一個胖子當著我的面吹牛噪沙,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播吐根,決...
    沈念sama閱讀 41,165評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼正歼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了拷橘?” 一聲冷哼從身側響起局义,我...
    開封第一講書人閱讀 40,108評論 0 277
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎冗疮,沒想到半個月后萄唇,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,646評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡术幔,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,709評論 3 342
  • 正文 我和宋清朗相戀三年穷绵,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片特愿。...
    茶點故事閱讀 40,861評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖勾缭,靈堂內(nèi)的尸體忽然破棺而出揍障,到底是詐尸還是另有隱情,我是刑警寧澤俩由,帶...
    沈念sama閱讀 36,527評論 5 351
  • 正文 年R本政府宣布毒嫡,位于F島的核電站,受9級特大地震影響幻梯,放射性物質(zhì)發(fā)生泄漏兜畸。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 42,196評論 3 336
  • 文/蒙蒙 一碘梢、第九天 我趴在偏房一處隱蔽的房頂上張望咬摇。 院中可真熱鬧,春花似錦煞躬、人聲如沸肛鹏。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,698評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽在扰。三九已至缕减,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間芒珠,已是汗流浹背桥狡。 一陣腳步聲響...
    開封第一講書人閱讀 33,804評論 1 274
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留皱卓,地道東北人裹芝。 一個月前我還...
    沈念sama閱讀 49,287評論 3 379
  • 正文 我出身青樓,卻偏偏與公主長得像好爬,于是被迫代替她去往敵國和親局雄。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,860評論 2 361

推薦閱讀更多精彩內(nèi)容