數據安全與性能——《Redis實戰》

持久化

  • 快照(rdb):保存某個時間點內存中全部數據的副本。(BGSAVE/SAVE)
缺點:存在數據丟失:下一次快照建立過程當中,若發生崩潰,會丟失上次快照後的全部數據。
  • AOF:保存寫命令到AOF文件末尾,記錄數據變化。(相似Mysql的binlog)
缺點:保存的文件可能會比較龐大,佔用不少硬盤空間。

圖片.png
二者既能夠單獨使用,也能夠協同使用。redis

RDB

圖片.png
BGSAVE會建立子進程來進行儲存,會與主進程競爭資源;而SAVE則直接阻塞客戶端請求,轉而去備份。sql

對於佔用幾十個GB內存的Redis服務器,BGSAVE建立進程要花費15秒,備份完須要15~20分鐘。
而SAVE僅須要3~5分鐘。因此經常使用作法是,寫一個腳本,在半夜去手動SAVE。

AOF

圖片.png

謹慎使用appendfsync:always。尤爲是固態,通常推薦使用everysec。

bgrewriteaof命令:相似bgsave,新建子線程,用於精簡AOF文件,刪除冗餘命令,重寫AOF文件。可經過auto-aof-rewrite-min-sizeauto-aof-rewrite-percentage來自動執行重寫。服務器

複製

主從同步

主用於寫,從用於讀。master的rdb文件先交給slave去寫入本身內存,再將同步期間master收到的寫命令放入緩衝區,rdb恢復完後,會再次接收master緩衝區傳來的寫命令。然後master都將aof按期交給slave完成同步。客戶端寫入master,讀取訪問slave。
相關配置:app

  • 主:dirdbfilename必須配好。
  • 從:slaveof host port這個爲必須的。

圖片.png

便可在conf配置文件設置salveof來選定從服務器,也可經過slaveof命令來設置。
slave同步前會清空以前的全部數據。
redis不支持主-主複製。(互相設成對方的slave,不支持!)
缺點:若是主掛了,那就沒有寫服務器了。
(主從連,sentinel模式能夠改善這一缺點)

主從連

從服務器能夠擁有本身的從服務器。
圖片.png
主從複製與從從複製的惟一區別:在主服務器A,從服務器X有一個從服務器Y的模式下,在X與A同步時X寫入rdb至內存時,會與Y斷開鏈接,致使Y從新同步。(與主同步時,斷開本身從的鏈接)spa

適用場景:讀的需求一臺從服務器不能知足,須要更多的讀服務器。
注:檢查是否已所有寫入硬盤:info中 aof-pending-bio-fsync屬性是否爲0

更換主服務器

在主服務器A,從服務器B,A掛了的場景下。線程


法一:另尋新主。提高C爲主服務器。
做法:B進行一次SAVE,而後將快照交給C,C啓動redis,而後B改設爲C的從。
圖片.png
法二:本身做主。B本身做爲主服務器,再建立新的從服務器C。(redis sentinel就是監聽故障,提高從爲主)code

相關文章
相關標籤/搜索