redis aof 备份和恢复_Redis 持久化机制的介绍,了解这些流程很重要
我們已經(jīng)知道對(duì)于一個(gè)企業(yè)級(jí)的redis架構(gòu)來(lái)說(shuō),持久化是不可減少的。
企業(yè)級(jí)redis集群架構(gòu):海量數(shù)據(jù)、高并發(fā)、高可用
持久化主要是做災(zāi)難恢復(fù),數(shù)據(jù)恢復(fù),也可以歸類到高可用的一個(gè)環(huán)節(jié)里面去,比如你redis整個(gè)掛了,然后redis就不可用了,你要做的事情是讓redis變得可用,盡快變得可用。此時(shí)你需要重啟redis,盡快讓它對(duì)外提供服務(wù),但是如果你沒(méi)做數(shù)據(jù)備份,這個(gè)時(shí)候redis啟動(dòng)了,里面也是沒(méi)有數(shù)據(jù)的所以一樣也用不了,也沒(méi)辦法向外提供服務(wù)。所以當(dāng)此刻有大量的請(qǐng)求過(guò)來(lái),緩存全部無(wú)法命中,在redis里根本找不到數(shù)據(jù),這個(gè)時(shí)候系統(tǒng),緩存雪崩問(wèn)題,所有請(qǐng)求,沒(méi)有在redis命中,就會(huì)去mysql數(shù)據(jù)庫(kù)這種數(shù)據(jù)源頭中去找,一下子mysql承接高并發(fā),然后就掛了。mysql掛掉,你都沒(méi)法去找數(shù)據(jù)恢復(fù)到redis里面去,redis的數(shù)據(jù)從哪兒來(lái)?從mysql來(lái)。具體的完整的緩存雪崩的場(chǎng)景,還有企業(yè)級(jí)的解決方案,會(huì)在后面的文章中解釋。
如果你把redis的持久化做好,備份和恢復(fù)方案做到企業(yè)級(jí)的程度,那么即使你的redis故障了,也可以通過(guò)備份數(shù)據(jù),快速恢復(fù),一旦恢復(fù)立即對(duì)外提供服務(wù)。
1、RDB和AOF兩種持久化機(jī)制的介紹
redis持久化:RDB,AOF
1)、RDB持久化機(jī)制,對(duì)redis中的數(shù)據(jù)進(jìn)行周期性的持久化。
2)、AOF機(jī)制對(duì)每條寫(xiě)入命令作為日志,以append-only的模式寫(xiě)入一個(gè)日志文件中,在redis重啟的時(shí)候,可以通過(guò)回放AOF日志中的寫(xiě)入指令來(lái)重新構(gòu)建整個(gè)數(shù)據(jù)集。
3)、通過(guò)RDB或AOF,都可以將redis內(nèi)存中的數(shù)據(jù)給持久化到磁盤(pán)上,然后可以將這些數(shù)據(jù)備份到別的地方,比如說(shuō)阿里云,華為云等云服務(wù)。此時(shí)如果redis掛了,服務(wù)器上的內(nèi)存和磁盤(pán)上的數(shù)據(jù)都丟了,可以從云服務(wù)上拷貝回來(lái)之前的數(shù)據(jù),放到指定的目錄中,然后重新啟動(dòng)redis,redis就會(huì)自動(dòng)根據(jù)持久化數(shù)據(jù)文件中的數(shù)據(jù),去恢復(fù)內(nèi)存中的數(shù)據(jù),繼續(xù)對(duì)外提供服務(wù)。
注意 1、:如果同時(shí)使用RDB和AOF兩種持久化機(jī)制,那么在redis重啟的時(shí)候,會(huì)使用AOF來(lái)重新構(gòu)建數(shù)據(jù),因?yàn)锳OF中的數(shù)據(jù)更加完整(優(yōu)先加載)
注意 2、:如果我們想要redis僅僅作為純內(nèi)存的緩存來(lái)用,那么可以禁止RDB和AOF的持久化機(jī)制
2、RDB持久化機(jī)制的優(yōu)點(diǎn)
1)、RDB會(huì)生成多個(gè)數(shù)據(jù)文件,每個(gè)數(shù)據(jù)文件都代表了某一個(gè)時(shí)刻中redis的數(shù)據(jù),這種多個(gè)數(shù)據(jù)文件的方式,非常適合做冷備,可以將這種完整的數(shù)據(jù)文件發(fā)送到一些遠(yuǎn)程的安全存儲(chǔ)上去,比如華為云、阿里云等云存儲(chǔ)上,按照制定好的備份策略來(lái)定期備份redis中的數(shù)據(jù)。
2)、RDB這種持久化機(jī)制對(duì)redis對(duì)外提供的讀寫(xiě)服務(wù),影響非常小,可以讓redis保持高性能,因?yàn)閞edis主進(jìn)程只需要fork一個(gè)子進(jìn)程,讓子進(jìn)程執(zhí)行磁盤(pán)IO操作來(lái)進(jìn)行RDB持久化即可。
3)、相對(duì)于AOF持久化機(jī)制來(lái)說(shuō),直接基于RDB這種持久化機(jī)制生成的數(shù)據(jù)文件來(lái)重啟和恢復(fù)redis進(jìn)程更加快速,因?yàn)椴幌馎OF那樣需要一步一步的回放之前的操作指令之后,再進(jìn)行恢復(fù)。(容易發(fā)生問(wèn)題,難免出錯(cuò))
3、RDB持久化機(jī)制的缺點(diǎn)
1)、如果想要在redis發(fā)生故障時(shí),盡可能少的丟失數(shù)據(jù),那么RDB持久化機(jī)制沒(méi)有AOF持久化機(jī)制好。通常情況下,RDB持久化機(jī)制產(chǎn)生的數(shù)據(jù)快照文件,都是每隔5分鐘,或者更長(zhǎng)時(shí)間生成一次,如果這個(gè)時(shí)候就redis進(jìn)程宕機(jī)的話,那么就難免會(huì)丟失最近5分鐘的數(shù)據(jù)。
2)、RDB這種持久化機(jī)制每次在fork子進(jìn)程來(lái)執(zhí)行RDB快照數(shù)據(jù)文件生成的時(shí)候,如果需要備份的數(shù)據(jù)文件特別大的話,可能會(huì)導(dǎo)致redis對(duì)客戶端提供的服務(wù)暫停數(shù)毫秒,或者甚至數(shù)秒,造成不好的用戶體驗(yàn)。
4、AOF持久化機(jī)制的優(yōu)點(diǎn)
1)、相比RDB的這種持久化機(jī)制來(lái)說(shuō)AOF可以更好的保護(hù)數(shù)據(jù)的完整性,一般AOF持久化機(jī)制會(huì)每隔1秒,通過(guò)一個(gè)后臺(tái)線程執(zhí)行一次fsync操作,所以redis出現(xiàn)問(wèn)題最多會(huì)丟失1秒鐘的數(shù)據(jù)。
2)、AOF持久化機(jī)制生成的日志文件是以append-only模式寫(xiě)入,所以沒(méi)有任何磁盤(pán)尋址的開(kāi)銷(xiāo),寫(xiě)入性能非常高,而且文件不容易破損,即使文件尾部破損,也很容易修復(fù)。
3)、AOF日志文件即使過(guò)大的時(shí)候,出現(xiàn)后臺(tái)重寫(xiě)操作,也不會(huì)影響客戶端的讀寫(xiě)。因?yàn)樵趓ewrite log的時(shí)候,會(huì)對(duì)其中的指令進(jìn)行壓縮,創(chuàng)建出一份需要恢復(fù)數(shù)據(jù)的最小日志出來(lái)。在創(chuàng)建新日志文件的時(shí)候,老的日志文件還是照常寫(xiě)入。當(dāng)新的merge后的日志文件ready的時(shí)候,再交換新老日志文件即可。(就是把當(dāng)前老的日志數(shù)據(jù)壓縮一下,生成新的日志,新來(lái)的數(shù)據(jù)還是繼續(xù)往老的日志文件寫(xiě),之后等新的數(shù)據(jù)壓縮完之后,把老日志中新寫(xiě)入的數(shù)據(jù)寫(xiě)入再新的日志,之后新的日志文件替換掉老的日志文件即可)。
4)、AOF日志文件的命令通過(guò)非常可讀的方式進(jìn)行記錄,這個(gè)特性非常適合做災(zāi)難性的誤刪除的緊急恢復(fù)。比如不小心用flushall命令清空了所有數(shù)據(jù),只要這個(gè)時(shí)候后臺(tái)rewrite還沒(méi)有發(fā)生,那么就可以立即拷貝AOF文件,將最后一條flushall命令給刪了,然后再將該AOF文件放回去,就可以通過(guò)恢復(fù)機(jī)制,自動(dòng)恢復(fù)所有數(shù)據(jù)。
5、AOF持久化機(jī)制的缺點(diǎn)
1)、對(duì)于同一份數(shù)據(jù)來(lái)說(shuō),AOF日志文件通常比RDB數(shù)據(jù)快照文件更大。
2)、當(dāng)AOF開(kāi)啟后,支持的寫(xiě)QPS會(huì)比RDB支持的寫(xiě)QPS低,因?yàn)锳OF一般會(huì)配置成每秒fsync一次日志文件,當(dāng)然,每秒一次fsync,性能也還是很高的。(QPS只每秒支持的訪問(wèn)請(qǐng)求)。
3)、如果AOF發(fā)生bug,就是通過(guò)AOF記錄的日志,進(jìn)行數(shù)據(jù)恢復(fù)的時(shí)候,沒(méi)有恢復(fù)一模一樣的數(shù)據(jù)出來(lái)。所以說(shuō),類似AOF這種較為復(fù)雜的基于命令日志merge回放的方式,比基于RDB每次持久化一份完整的數(shù)據(jù)快照文件的方式,更加脆弱一些,容易出現(xiàn)bug。不過(guò)AOF就是為了避免rewrite過(guò)程導(dǎo)致的bug,因此每次rewrite并不是基于舊的指令日志進(jìn)行merge的,而是基于當(dāng)時(shí)內(nèi)存中的數(shù)據(jù)進(jìn)行指令的重新構(gòu)建,這樣健壯性會(huì)好很多。
6、RDB和AOF到底該如何選擇
1)、不要僅僅使用RDB的持久化機(jī)制,因?yàn)槟菢訒?huì)導(dǎo)致你丟失很多數(shù)據(jù)。
2)、也不要僅僅使用AOF的持久化機(jī)制,因?yàn)槟菢佑袃蓚€(gè)問(wèn)題:
第一、你通過(guò)AOF做冷備,沒(méi)有RDB做冷備來(lái)的恢復(fù)速度更快; 第二、RDB每次簡(jiǎn)單粗暴生成數(shù)據(jù)快照,更加健壯,可以避免AOF這種復(fù)雜的備份和恢復(fù)機(jī)制的bug;3)、綜合使用AOF和RDB兩種持久化機(jī)制:
第一、用AOF來(lái)保證數(shù)據(jù)不丟失(數(shù)據(jù)丟失相對(duì)較少),作為數(shù)據(jù)恢復(fù)的第一選擇; 用RDB來(lái)做不同程度的冷備;第二、在AOF文件都丟失或損壞不可用的時(shí)候,還可以使用RDB來(lái)進(jìn)行快速的數(shù)據(jù)恢復(fù)end:如果你覺(jué)得本文對(duì)你有幫助的話,記得關(guān)注點(diǎn)贊轉(zhuǎn)發(fā),你的支持就是我更新動(dòng)力。
總結(jié)
以上是生活随笔為你收集整理的redis aof 备份和恢复_Redis 持久化机制的介绍,了解这些流程很重要的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: linux-x86_64 error,O
- 下一篇: DG导入mysql依赖包_MySql导入