1. 程式人生 > >Redis 資料備份還原與主從複製

Redis 資料備份還原與主從複製

Redis作為一個記憶體資料庫,在資料安全以及叢集部署方面都提供了一系列工具可供使用。

一. Redis資料庫資料備份與恢復

Redis是記憶體型資料庫,但是為了資料安全,就需要有“資料持久化“(就是將資料儲存在磁碟上)的機制,在備份方面提供了兩種工具,分別為RDB和AOF。

1.RDB備份與恢復

RDB是利用快照來實現資料持久化的,當符合特定條件時,redis將會自動的將記憶體中的資料儲存在硬碟上,當redis啟動時,會自動的將磁碟上的資料載入到記憶體中以實現資料環境的恢復。

(1)Redis條件進行RDB備份,步驟如下:
A.修改配置檔案redis.conf:

save 900
1 # 900秒內有至少1個鍵被更改則進行快照 save 300 10 # 300秒內有至少10個鍵被更改則進行快照 save 60 10000 # 60秒內有至少10000個鍵被更改則進行快照 dir path #path為redis執行環境時操作的路徑 dbfilename rdbname #rdb資料備份檔名(如dump.rdb)

B.重啟Redis

注:這種方式的實現是Redis的主執行緒在條件觸發後,fork子程序後,在子程序中完成資料持久化的。

(2)Redis強制進行RDB備份,步驟如下:
在redis-cli中,使用如下命令:

redis-cli>SAVE  #在主程序強制阻塞進行快照備份
或者 redis-cli>BGSAVE #主程序fork子程序進行快照備份

2.AOF備份與恢復

AOF(append only file)就是通過“將redis執行的每一條指令儲存在磁碟檔案中“ 以實現資料持久化。

(1)開啟AOF功能
預設情況下,Redis是不開啟AOF的,要想使用該功能,則在redis.conf中配置:

appendonly yes

AOF檔案存放的位置和RDB相同,可以這樣設定AOF檔案:

dir path #檔案儲存路徑
appendfilename appendonly.aof #aof檔案拓展名為aof

AOF的重寫配置:

auto
-aof-rewrite-percentage 100 # 當目前的AOF檔案大小超過上一次重寫時的AOF檔案大小的百分之多少時會再次進行重寫,如果之前沒有重寫過,則以啟動時的AOF檔案大小為依據 auto-aof-rewrite-min-size 64mb # 允許重寫的最小AOF檔案大小

注意:“重寫”並不是對原有aof檔案進行重新寫入或其它操作,而是對原有指令進行簡化,如曾經對list進行三個push:

lpush li_key 1
lpush li_key 2
lpush li_key 3

然後重寫的結果就是:

lpush li_key 1 2 3

同理,對HASH table、SET、SORTED SET也是同樣的處理方式。
通過重寫,就實現了aof檔案的壓縮;

當然,細心的朋友會發現一個問題,對AOF重寫時會影響redis的請求訪問的,那麼redis是怎麼解決的呢?
A. Redis通過fork子程序來完成重寫;
B. 重寫時在記憶體中先建立AOF快取,在重寫的同時,將新指令同時寫入舊的AOF檔案中和AOF快取中;
C. 重寫完成後,將AOF快取的內容寫入磁碟,替換舊的AOF檔案

(2)主動強制進行AOF備份

redis-cli> BGREWRITEAOF

二.資料遷移和主從複製

1.直接備份檔案資料遷移

Redis的資料遷移比較簡單,步驟如下:
(1)關閉目標Redis服務;
(2)將相應的RDB檔案或者AOF檔案複製過去;
(3)設定REDIS的DIR或者開啟AOF功能;
(4)啟動目標REDIS服務;

2.主從複製

主伺服器配置redis.conf:

bind 127.0.0.1 192.168.1.158 #後面的IP地址為從伺服器能訪問的主機的ip

從伺服器配置redis.conf:

slaveof <masterip> <masterport> #masterip為192.168.1.158 masterport預設是6379

啟動主伺服器和從伺服器

另外:利用主從複製還能夠實現資料遷移,將目標redis服務設定成從服務,然後進行資料同步,完成後,就取消主從關係,就完成了資料遷移了。