Redis哨兵主备切换的数据丢失及Redis数据持久化
一 兩種數(shù)據(jù)丟失的情況
異步復(fù)制導(dǎo)致數(shù)據(jù)丟失
master->slave復(fù)制數(shù)據(jù)是異步的,可能有部分?jǐn)?shù)據(jù)還沒(méi)復(fù)制到slave,master就宕機(jī)了,此時(shí)導(dǎo)致數(shù)據(jù)丟失
集群腦裂導(dǎo)致數(shù)據(jù)丟失
master突然脫離正常網(wǎng)絡(luò),跟其他slave機(jī)器不能正常連接,但master還在運(yùn)行,此時(shí)哨兵認(rèn)為master宕機(jī)了開(kāi)始選舉,slave切換成master。此時(shí)集群中就會(huì)出現(xiàn)兩個(gè)master,這就是所謂的腦裂。此時(shí)某個(gè)slave被切換成master,client還沒(méi)切換到新的master還繼續(xù)向舊的master寫(xiě)數(shù)據(jù),造成這部分?jǐn)?shù)據(jù)丟失。因舊的master再次恢復(fù)時(shí)會(huì)作為一個(gè)slave掛在到新的master,自己的數(shù)據(jù)會(huì)被清空,從新的master復(fù)制一份數(shù)據(jù)
解決異步復(fù)制和腦裂數(shù)據(jù)丟失情況
min-slaves-to-write 1
min-slaves-max-lag 10
至少有一個(gè)slave同步和復(fù)制數(shù)據(jù)延遲不超過(guò)10s,一旦所有的slave同步和復(fù)制數(shù)據(jù)延遲超過(guò)10s,master將不會(huì)接受任何請(qǐng)求
- 減少異步復(fù)制數(shù)據(jù)丟失
min-slaves-max-lag 這個(gè)配置,一旦ack和slave延遲過(guò)長(zhǎng),就認(rèn)為master當(dāng)即損失太多,那么就拒絕寫(xiě)入請(qǐng)求,這樣master位同步到slave丟失數(shù)據(jù)在一個(gè)可控的范圍內(nèi) - 腦裂導(dǎo)致數(shù)據(jù)丟失
如果一個(gè)master出現(xiàn)了腦裂,如果不繼續(xù),指定數(shù)量的slave發(fā)送數(shù)據(jù),而且slave超過(guò)10s沒(méi)有給ack發(fā)送數(shù)據(jù),那么客戶端就拒絕給客戶端寫(xiě)請(qǐng)求
二 Redis數(shù)據(jù)持久化RDB和AOF
(1).RDB、AOF兩種持久化機(jī)制介紹
1.1 RDB核心規(guī)則配置(重點(diǎn))
save
#save “”
save 900 1
save 300 10
save 60 10000
解說(shuō):save <指定時(shí)間間隔> <執(zhí)行指定次數(shù)更新操作>,滿足條件就將內(nèi)存中的數(shù)據(jù)同步到硬盤(pán)中。官方出廠配置默認(rèn)是 900秒內(nèi)有1個(gè)更改,300秒內(nèi)有10個(gè)更改以及60秒內(nèi)有10000個(gè)更改,則將內(nèi)存中的數(shù)據(jù)快照寫(xiě)入磁盤(pán)。
若不想用RDB方案,可以把 save “” 的注釋打開(kāi),上面三個(gè)注釋。
1.2 指定本地?cái)?shù)據(jù)庫(kù)文件名,一般采用默認(rèn)的 dump.rdb
1.3 指定本地?cái)?shù)據(jù)庫(kù)存放目錄,一般也用默認(rèn)配置 dir ./
1.4 默認(rèn)開(kāi)啟數(shù)據(jù)壓縮,rdbcompression yes
解說(shuō):配置存儲(chǔ)至本地?cái)?shù)據(jù)庫(kù)時(shí)是否壓縮數(shù)據(jù),默認(rèn)為yes。Redis采用LZF壓縮方式,但占用了一點(diǎn)CPU的時(shí)間。若關(guān)閉該選項(xiàng),但會(huì)導(dǎo)致數(shù)據(jù)庫(kù)文件變的巨大。建議開(kāi)啟。
(2).RDB持久化機(jī)制的優(yōu)點(diǎn)
5. RDB會(huì)生成多個(gè)數(shù)據(jù)文件,每個(gè)數(shù)據(jù)代表了某個(gè)時(shí)刻redis中的數(shù)據(jù),這種多數(shù)據(jù)文件的方式非常適合做冷備,這種數(shù)據(jù)文件可以放到一些安全云存儲(chǔ)上類(lèi)如阿里云ODPS分布式存儲(chǔ)
6. RDB對(duì)redis提供的對(duì)外讀寫(xiě)服務(wù)影響非常小,可以使redis保持高性能,redis主進(jìn)程只需要一個(gè)fork子進(jìn)程執(zhí)行IO操作使RDB持久化
(3).相對(duì)于AOF來(lái)說(shuō),基于RDB重啟和恢復(fù)redis進(jìn)程更加快速
總結(jié)
以上是生活随笔為你收集整理的Redis哨兵主备切换的数据丢失及Redis数据持久化的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: redis主从复制原理、断点续传、无磁盘
- 下一篇: encryption数据库配置信息用户名