redis持久化 – 兩種方式
redis提供了兩種持久化的方式,分別是RDB(Redis DataBase)和AOF(Append Only File)。
官方建議:兩種方式都打開,同時進行備份。耐久性不高的可以選快照 RDB。
RDB:就是在不同的時間點,將redis存儲的數據生成快照並存儲到磁盤等介質上;
優點:備份文件體積小,恢復速度快,fork子進程不影響父進程io;
缺點:故障時丟失數據會多點,數據集龐大時,因fork進程慢,導致客戶端響應延遲;
配置:save 600 1,默認爲dump.rdb(CONFIG GET save && CONFIG GET dir .....)
AOF:就是將redis執行過的所有寫指令記錄下來,在下次redis重新啓動時,把這些寫指令從前到後再重複執行一遍,就可以實現數據恢復了,類似於mysql的binlog。根據fsync策略查找緩存指令記錄
優點:數據完整型好,體積過大時會自動重寫(將100條寫入變爲1條set),採用redis協議易讀懂;
缺點:文件體積大,恢復較慢,存在fsync策略導致速度較慢;
配置:appendonly yes,默認文件名appendonly.aof (CONFIG GET appendonly);
恢復:比如執行了flushall,將備份文件中此條刪除,重啓即可。
注:重寫,Redis 2.2 需要自己手動執行 BGREWRITEAOF 命令;2.4 則可以自動觸發 AOF 重寫。
AOF文件出錯:(redis重啓時會拒絕載入aof文件)
a、備份現有的aof文件
b、# redis-check-aof --fix 命令行執行對現有aof文件進行修復
c、對比兩個aof文件區別,重啓服務器,載入修復後的aof備份文件
同時使用兩種備份策略,redis重啓情況下,默認aof優先,因爲數據完整性高。
關閉使用兩種備份策略,redis就成內存數據庫了,和memcache一樣。
主從備份:
架構及原理:一主可以多從,從也可以配多從;
1、從連接到主服務器後,發送sync指令;
2、主接到sync指令後,開始執行bgsave,將命令寫入緩衝區;
3、bgsave結束後,主將保存得到的.rdb快照文件發給所有從,期間繼續記錄寫操作,telnet可驗證;
4、從丟棄舊的快照,載入新的快照。完畢後,主繼續發送緩衝區的寫指令,從進行增量備份。
配置:從服務器設置如下(當然也可以在redis內部修改,但建議還是修改配置文件)
port 6380
slaveof 192.168.1.1 6379 //配置主的IP 和端口
masterauth <password> //配置主的密碼
slave-read-only yes //讓從只讀,2.4以後默認就是隻讀
repl-ping-slave-period 10 //設置slave向master發起ping的頻率,每10s發起一次
再詳細的配置,見redis章節。
同步策略:
策略是,首先會嘗試進行增量同步,如不成功,要求從機進行全量同步,之後進行增量同步。
主從切換
1、手動切換
redis-cli -n 6379 shutdown //關掉主
redis-cli -p 6380 slaveof NO ONE //將從設爲主,插入 set ddd aaa測試是否成功
cp -f /redis2/dump.rdb /redis/ //主恢復後,將從的dump拷貝到主下
redis-server /redis/master.conf //啓動主(要確保從的save設置已生效)
redis-cli -p 6380 slaveof 192.168.10.1 6379 //將從再切換爲從,即 ok
2、自動切換 sentinel
暫時先不瞭解,參考http://www.cnblogs.com/Xrinehart/p/3502198.html