redis配置修改以及資料備份
阿新 • • 發佈:2021-01-25
生產環境下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並不能作為生產環境下資料持久化的唯一模式
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)每天晚上將當前伺服器上所有的資料備份,傳送一份到遠端的雲服務上去