Redis的主從架構淺談

儘管Redis的性能很好,但是有時候依舊滿足不了應用的需要,比如過多的用戶進入主頁,導致Redis被頻繁訪問,此時就存在大量的讀操作。所以在更多的時候我們更希望可以讀/寫分離,讀/寫分離的前提是讀操作遠遠比寫操作頻繁得多,如果把數據都存放在多臺服務器上那麼就可以從多臺服務器中讀取數據,從而消除了單臺服務器的壓力,讀/寫分離的技術已經廣泛用於數據庫中了。

互聯網系統一般是以主從架構的基礎的,所謂主從架構設計的思路大概是:

  • 在多臺服務器中,只有一臺主服務器,而主服務器只負責寫入數據,不負責讓外部程序讀取數據。
  • 存在多臺從服務器,從服務器不寫入數據,只負責同步主服務器的數據,並讓外部程序讀取數據。
  • 主服務器在寫入數據後,即可將寫入數據的命令發送給從服務器,從而使得主從數據同步。
  • 應用程序可以隨機讀取某一臺從服務器的數據,這樣就分攤了讀數據的壓力。
  • 當從服務器不能工作的時候,整個系統將不受影響;當主服務器不能工作的時候,可以方便地從從服務器中選舉一臺來當主服務器。

主從同步機制如下圖所示:
在這裏插入圖片描述
這個時候讀數據就可以隨機從從服務器上讀取,當從服務器是多臺的時候,那麼單臺服務器的壓力就大大的降低了,這十分有利於系統性能的提高,當主服務器出現不能工作的情況時,也可以切換爲其中一臺從服務器繼續讓系統穩定運行,所以也有利於系統運行的安全性。

Redis主從同步配置

對Redis進行主從同步的配置分爲主機和從機,主機是一臺,而從機可以是多臺。
首先,明確主機。當你確定哪臺機子是主機的時候,關機的兩個配置是dir和dbfilename選項,當然必須保證這兩個文件是可寫的。對於Redis的默認配置而言,dir的默認值爲“./”,而對於dbfilename的默認值爲“dump.rbd"。換句話說,默認採用Redis當前目錄的dump.rbd文件進行同步。

其次,再明確了從機之後,進行進一步配置所要關注的只有slaveof這個配置選項,它的配置格式是:

slaveof server port

其中,server代表主機,port代表端口。當從機Redis服務重啓時,就會同步對應主機的數據了。

Redis主從同步的過程

Redis主從同步的過程如圖所示:
在這裏插入圖片描述

這裏有必要進行更深層次的描述:

  1. 無論如何先保證主服務器的開啓,開啓主服務器後,從服務器通過命令或者重啓配置項可以同步到主服務器。
  2. 當從服務器啓動時,讀取同步的配置,根據配置決定是否使用當前數據響應客戶端,然後發送SYNC命令。當主服務器接收到同步命令的時候,就會執行bgsave命令備份數據,但是主服務器並不會拒絕客戶端的讀/寫。,而是將來自客戶端的寫命令寫入緩衝區,從服務器未收到主服務器未收到備份的快照文件的時候,會根據其配置決定使用現有數據響應客戶端或拒絕。
  3. 當bgsave命令被主服務器執行完後,開始向從服務器發送備份文件,這個時候從服務器就會丟棄所有現有的數據,開始載入發送的快照文件。
  4. 當主服務器發送完備份文件後,從服務器就會執行這些寫入命令。此時就會把bgsave執行之後的緩存區內的寫命令也發送給從服務器,從服務器完成備份文件解析,就開始像往常一樣,接受命令,等待命令寫入。
  5. 緩衝區的命令發送完成後,當主服務器執行一條寫命令後,就同時往從服務器發送同步寫入命令,從服務器就和主服務器保持一致了。而此時當從服務器完成主服務器發送的緩衝區命令後,就開始等待主服務器的命令了。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章