1. 程式人生 > 其它 >redis配置修改以及資料備份

redis配置修改以及資料備份

生產環境下redis配置以及資料備份方案

redis配置

1.redis做為快取資料庫是把資料放在記憶體中的,記憶體中資料的特點是斷電或者伺服器重啟後資料就丟失了,為了應對資料丟失不能持久化的特點,redis提供了兩種持久化的策略 :
(1) rdb redis預設開啟的持久化策略,將記憶體中的資料以快照的形式備份儲存到磁碟

save 900 1 #900秒內有一個修改儲存一次快照
save 300 10 #300秒內有10次修改儲存一次快照
save 60 10000 #60秒內有10000次修改儲存一次快照

通過rdb的配置可以看出如果資料在沒有觸發快照的情況下寫入並且此時redis出現了故障,那這些資料就丟失了。因此rdb並不能作為生產環境下資料持久化的唯一模式

(2) aof(預設關閉) ,redis每次接收到一條寫命令,就會寫入日誌檔案中,當然是先寫入os cache的,然後每隔一定時間再fsync到磁碟中,在生產環境下應該開啟

appendonly yes #開啟aof策略
appendfsync everysec  # AOF 的fsync 有三種策略 
				 always 每次寫入一條資料,立即將這個資料對應的寫日誌fsync到磁碟上去,效能非常非常差,吞吐量很低;
				 everysec  每秒將os cache中的資料fsync到磁碟,這個最常用的,生產環境一般都這麼配置,效能很高
				 no 僅僅redis負責將資料寫入os cache就不管了,然後後面os自己會時不時有自己的策略將資料刷入磁碟,不可控
auto-aof-rewrite-percentage 100: #當前AOF檔案大小膨脹到超上次的兩倍,觸發AOF rewrite 重寫aof檔案
auto-aof-rewrite-min-size 64mb: 根據資料量來定當aof檔案大於配置最小的檔案才觸發重寫

redis檔案備份

(1)寫crontab定時排程指令碼去做資料備份
(2)每小時都copy一份rdb的備份,到一個目錄中去,僅僅保留最近48小時的備份

crontab -e

0 * * * * sh /usr/local/redis/copy/redis_rdb_copy_hourly.sh

redis_rdb_copy_hourly.sh

#!/bin/sh 

cur_date=`date +%Y%m%d%k`
rm -rf /usr/local/redis/snapshotting/$cur_date
mkdir /usr/local/redis/snapshotting/$cur_date
cp /var/redis/6379/dump.rdb /usr/local/redis/snapshotting/$cur_date

del_date=`date -d -48hour +%Y%m%d%k`
rm -rf /usr/local/redis/snapshotting/$del_date

(3)每天都保留一份當日的rdb的備份,到一個目錄中去,僅僅保留最近1個月的備份

crontab -e

0 0 * * * sh /usr/local/redis/copy/redis_rdb_copy_daily.sh

redis_rdb_copy_daily.sh

#!/bin/sh 

cur_date=`date +%Y%m%d`
rm -rf /usr/local/redis/snapshotting/$cur_date
mkdir /usr/local/redis/snapshotting/$cur_date
cp /var/redis/6379/dump.rdb /usr/local/redis/snapshotting/$cur_date

del_date=`date -d -1month +%Y%m%d`
rm -rf /usr/local/redis/snapshotting/$del_date

(4)每次copy備份的時候,都把太舊的備份給刪了
(5)每天晚上將當前伺服器上所有的資料備份,傳送一份到遠端的雲服務上去