1、 redis的主從模式
在之前的文件中,我們介紹了redis的集群主要有兩種模式:哨兵模式和分片模式。而哨兵模式又是對主從模式的加強版,所以在分析哨兵模式前需要先分析主從模式。而主從模式最關鍵的地方在於將主伺服器的資料同步到從伺服器,保證集群內部資料的一致性。而資料同步又分為兩部分:伺服器中已經存在的資料和未來會執行產生的增量資料。對於已經存在的資料,redis為了保證資料的可靠性,會對其進行持久化操作。同步這部分資料只需要將持久化檔案傳給從伺服器便可,所以在(3)到(10)中,分析了redis的持久化方式,並詳細介紹了rdb和aof的相關**。
在了解了redis的持久化之後,再看主從伺服器間的資料同步就非常簡單了。只需要兩步:首先在開始的時候主伺服器更新乙個持久化檔案,然後將檔案傳送給從伺服器,最後在執行新的命令的時候將命令同步給從伺服器便可。示意如圖:
上述這種方法,可以實現主從伺服器的資料同步,但是存在乙個問題。當從伺服器因為故障造成主從資料不一致的時候,從伺服器需要再進行一次資料同步,讓主伺服器再更新乙個持久化檔案再進行傳播更新。在之前的持久化檔案的分析過程中我們了解到持久化是比較耗時的,若從伺服器故障的時間較短,兩者之間的資料差別較小的時候,再進行這種操作就會很浪費伺服器效能。
為了解決上述問題,redis引入了乙個複製偏移量、複製緩衝區和伺服器id。
複製偏移量
主伺服器在向從伺服器傳播命令的時候,會記錄乙個偏移量。這個偏移量實際是執行的命令的位元組數的累加和,例如,在最開始的時候偏移量為0,然後伺服器執行了一條命令,這條命令的位元組長度為11,那麼在傳播命令的時候更新的複製偏移量為0+11=11,然後又有一條長度為12的命令,那麼複製偏移量為11+12=23。從伺服器在接收到命令的時候同樣會記錄乙個偏移量,記錄方式相同。若主從伺服器的偏移量相同則代表了其資料一致。
複製緩衝區
主伺服器在傳播命令的時候,還會將命令記錄在乙個緩衝區中。這個緩衝區是乙個固定長度的先進先出的佇列。當主從資料不一致的時候,主伺服器會先根據從伺服器的複製偏移量在緩衝區中尋找資料,若有則直接傳送給從伺服器,若沒有再執行最初的那種同步流程。
伺服器id
從伺服器在複製主伺服器資料的時候會記錄主伺服器的伺服器id,當再次從主伺服器複製資料的時候會檢查伺服器id,若id不同則會直接執行最初的那種同步流程。這個在哨兵模式下比較重要。
這種新的資料同步模式入下圖所示:
從伺服器在同步資料的時候,主伺服器會先根據其偏移量在複製緩衝區中尋找資料,若存在需要的資料則直接將其傳送給從伺服器,若不存在則更新乙個持久化檔案,並將持久化檔案傳送給從伺服器。
Redis集群原理分析
redis集群的原理主要是圍繞著 槽 的概念展開的,先來理解集群中 槽 的概念。reids集群是通過將所有的key進行分割槽來實現的,redis集群最多有16384個分割槽 也可以稱作 槽 英文 slot 然後在集群節點中指定分割槽範圍來實現。例如 集群中的節點a負責0 10000,節點b負責 10...
Redis集群分析(36)
1 自動分割槽 在文件 23 到文件 35 中,我們分析了redis的哨兵模式,詳細介紹的該模式下的各個功能與原始碼。接下來我們繼續分析redis的自動分割槽,即cluster模式。cluster模式 如同之前文件所分析的那樣。哨兵模式主要是對主從模式的擴充套件,而主從模式主要解決的是單點壓力,單點...
redis搭建集群(偽集群)
1 建立6個資料夾 2 複製redis.conf檔案,並修改redis.conf 配置檔案 3 建立集群 4 連線客戶端 5 檢視狀態 建立 6個資料夾來存放redis.conf,因為redis集群最小需要的是,三組三從,每個資料夾代表一台伺服器,6007跟6008可忽略 先複製乙個到6001資料夾...