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