1.主從複製
#主從複製原理:
從伺服器連接主伺服器,發送SYNC指令;
主伺服器接收到SYNC命名後,開始執行BGSAVE指令產生RDB檔案並使用緩衝區記錄此後執行的所有寫入指令;
主伺服器BGSAVE執行完後,向所有從伺服器發送快照文件,並在發送期間繼續記錄被執行的寫命令;
從伺服器收到快照檔案後丟棄所有舊數據,載入收到的快照;
#主伺服器快照發送完畢後開始向從伺服器發送緩衝區中的寫入命令;
從伺服器完成對快照的載入,開始接收命令請求,並執行來自主伺服器緩衝區的寫入命令;(從伺服器初始化完成)
主伺服器每執行一個寫入命令就會向從伺服器發送相同的寫入命令,從伺服器接收並執行收到的寫入命令(從伺服器初始化完成後的運算)
主從複製優缺點:
哨兵模式# 當主伺服器中斷服務後,可以將一個從伺服器升級為主伺服器,以便繼續提供服務,但是這個過程需要人工手動來操作。 為此,Redis 2.8中提供了哨兵工具來實現自動化的系統監控和故障復原功能。 哨兵的功能就是監控Redis系統的運作狀況。它的功能包括以下兩個。 (1)監控主伺服器和從伺服器是否正常運作。 哨兵的工作方式: 每個Sentinel(哨兵)程序以每秒鐘一次的頻率向整個集群中的Master主伺服器,Slave從伺服器以及其他Sentinel(哨兵)程序發送一個PING 指令。 如果一個實例(instance)距離最後一次有效回覆PING 指令的時間超過down-after-milliseconds 選項所指定的值, 則這個實例會被Sentinel(哨兵)進程標記為主觀下線(SDOWN) 如果一個Master主伺服器被標記為主觀下線(SDOWN),則正在監視這個Master主伺服器的所有Sentinel(哨兵)程序要以每秒一次的頻率確認Master主伺服器的確進入了主觀下線狀態 當有足夠數量的Sentinel(哨兵)進程(大於等於設定檔指定的值)在指定的時間範圍內確認Master主伺服器進入了主觀下線狀態(SDOWN), 則Master主伺服器會被標記為客觀下線(ODOWN) 在一般情況下,每個Sentinel(哨兵)程序會以每10 秒一次的頻率向叢集中的所有Master主伺服器、Slave從伺服器發送INFO 指令。 當Master主伺服器被Sentinel(哨兵)程序標記為客觀離線(ODOWN)時,Sentinel(哨兵)程序向下線的Master主伺服器的所有Slave從伺服器發送INFO 指令的頻率會從10 秒一次改為每秒一次。 若沒有足夠數量的 Sentinel(哨兵)程序同意 Master主伺服器下線, Master主伺服器的客觀下線狀態就會被移除。若 Master主伺服器重新向 Sentinel(哨兵)程序發送 PING 指令返回有效回复,Master主伺服器的主觀下線狀態就會移除。 哨兵模式的優缺點 #優點: 缺點: 3.Redis-Cluster叢集 #redis的哨兵模式基本上已經可以實現高可用,讀寫分離,但在這種模式下每台redis伺服器都儲存相同的數據,很浪費內存,所以在redis3.0上加入了cluster模式,實現的redis的分散式存儲,也就是說每台redis節點上存儲不同的內容。 Redis-Cluster採用無中心結構,它的特性如下: 所有的redis節點彼此互聯(PING-PONG機制),內部使用二進位協定優化傳輸速度和頻寬。 節點的fail是透過叢集中超過半數的節點偵測失效時才生效。 客戶端與redis節點直連,不需要中間代理層.客戶端不需要連接叢集所有節點,連接叢集中任何一個可用節點即可。 運作方式: 在redis的每一個節點上,都有這麼兩個東西,一個是插槽(slot),它的值範圍為:0-16383。還有一個就是cluster,可以理解為是一個叢集管理的插件。當我們的訪問的key到達的時候,redis會根據crc16的演算法得出一個結果,然後把結果對16384 求餘數,這樣每個key 都會對應一個編號在0-16383 之間的哈希槽,通過這個值,去找到對應的插槽所對應的節點,然後直接自動跳到這個對應的節點上進行訪問操作。 為了確保高可用,redis-cluster叢集引入了主從模式,一個主節點對應一個或多個從節點,當主節點宕機的時候,就會啟用從節點。當其它主節點ping一個主節點A時,如果半數以上的主節點與A通訊超時,那麼就認為主節點A宕機了。如果主節點A和它的從節點A1都宕機了,那麼該叢集就無法再提供服務了。 更多Redis相關技術文章,請造訪Redis教學欄位學習!
(2)主伺服器發生故障時自動將從伺服器轉換為主伺服器。
以上是redis怎麼實現集群的詳細內容。更多資訊請關注PHP中文網其他相關文章!