Redis複製

壹頁書發表於2014-06-18

Redis 支援簡單且易用的主從複製(master-slave replication)功能, 該功能可以讓從伺服器(slave server)成為主伺服器(master server)的精確複製品。

 

以下是關於 Redis 複製功能的幾個重要方面:

Redis 使用非同步複製。 從 Redis 2.8 開始, 從伺服器會以每秒一次的頻率向主伺服器報告複製流(replication stream)的處理進度。

 

一個主伺服器可以有多個從伺服器。

 

不僅主伺服器可以有從伺服器, 從伺服器也可以有自己的從伺服器, 多個從伺服器之間可以構成一個圖狀結構。

 

複製功能不會阻塞主伺服器: 即使有一個或多個從伺服器正在進行初次同步, 主伺服器也可以繼續處理命令請求。

 

複製功能也不會阻塞從伺服器: 只要在 redis.conf 檔案中進行了相應的設定, 即使從伺服器正在進行初次同步, 伺服器也可以使用舊版本的資料集來處理命令查詢。

 

不過, 在從伺服器刪除舊版本資料集並載入新版本資料集的那段時間內, 連線請求會被阻塞。

 

你還可以配置從伺服器, 讓它在與主伺服器之間的連線斷開時, 向客戶端傳送一個錯誤。

 

複製功能可以單純地用於資料冗餘(data redundancy), 也可以透過讓多個從伺服器處理只讀命令請求來提升擴充套件性(scalability): 比如說, 繁重的 SORT 命令可以交給附屬節點去執行。

 

可以透過複製功能來讓主伺服器免於執行持久化操作: 只要關閉主伺服器的持久化功能, 然後由從伺服器去執行持久化操作即可。

複製的原理

無論是初次連線還是重新連線, 當建立一個從伺服器時, 從伺服器都將向主伺服器傳送一個 SYNC 命令。

 

接到 SYNC 命令的主伺服器將開始執行 BGSAVE , 並在儲存操作執行期間, 將所有新執行的寫入命令都儲存到一個緩衝區裡面。

 

BGSAVE 執行完畢後, 主伺服器將執行儲存操作所得的 .rdb 檔案傳送給從伺服器, 從伺服器接收這個 .rdb 檔案, 並將檔案中的資料載入到記憶體中。

 

之後主伺服器會以 Redis 命令協議的格式, 將寫命令緩衝區中積累的所有內容都傳送給從伺服器。

 

你可以透過 telnet 命令來親自驗證這個同步過程: 首先連上一個正在處理命令請求的 Redis 伺服器, 然後向它傳送 SYNC 命令, 過一陣子, 你將看到 telnet 會話(session)接收到伺服器發來的大段資料(.rdb 檔案), 之後還會看到, 所有在伺服器執行過的寫命令, 都會重新傳送到 telnet 會話來。

 

即使有多個從伺服器同時向主伺服器傳送 SYNC , 主伺服器也只需執行一次 BGSAVE 命令, 就可以處理所有這些從伺服器的同步請求。

 

從伺服器可以在主從伺服器之間的連線斷開時進行自動重連, 在 Redis 2.8 版本之前, 斷線之後重連的從伺服器總要執行一次完整重同步(full resynchronization)操作, 但是從 Redis 2.8 版本開始, 從伺服器可以根據主伺服器的情況來選擇執行完整重同步還是部分重同步(partial resynchronization)。


複製的配置


Redis複製的配置非常簡單。

登陸Slave Redis,輸入命令slaveof MasterIP MasterPort即可。

Slave伺服器預設是隻讀模式,

可以由 redis.conf 檔案中的 slave-read-only 選項控制

也可以透過 CONFIG SET 命令來開啟或關閉這個模式。


轉載自:


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29254281/viewspace-1188514/,如需轉載,請註明出處,否則將追究法律責任。

相關文章