前面介紹Redis,我們都在一台伺服器上進行操作的,也就是說讀和寫入以及備份操作都是在一台Redis伺服器上進行的,那麼隨著專案存取量的增加,對Redis伺服器的操作也越頻繁,雖然Redis讀寫速度都很快,但是一定程度上也會造成一定的延時,那麼為了解決訪問量大的問題,通常會採取的一種方式是主從架構Master/ Slave,Master 以寫為主,Slave 以讀為主,Master 主節點更新後根據配置,自動同步到從機Slave 節點。
接下來我們就來介紹如何進行主從架構的建構。
ps:這裡我是在一台機器上模擬多個Redis伺服器,與實際生產環境中相比,基本配置都是一樣,只是IP位址和連接埠號碼變化。
1、修改設定檔
先將redis.conf 設定檔複製三份,透過修改埠分別模擬三台Redis伺服器。
然後我們分別對這三個redis.conf 檔案進行修改。
①、修改 daemonize yes
表示指定Redis以守護程式的方式啟動(背景啟動)
## 表示指定Redis以守護程式的方式啟動(背景啟動)②、配置PID檔案路徑pidfile
③、設定埠port
# ④、設定log 檔案名稱
#
##
④、設定log 檔案名字④、設定log 檔案名字
##
⑤、配置rdb文件名
接下來我們分別啟動這三個服務。 透過指令查看Redis是否啟動: |
1 | 3
2、設置主從關係
①、通過 info replication 命令查看節點角色
我們發現這三個節點都是扮演的Master 角色。如何將節點6380和6381轉換為從節點角色?
②、選擇6380端口和6381端口,執行命令:SLAVEOF 127.0.0.1 6379
#節點## 我們資訊6399 再看
一旦重新啟動服務,先前透過指令設定的主從關係將會失效。透過配置redis.conf檔案可以實現永久保存這種關係。
3、測試主從關係
①、增量複製 主節點執行set k1 v1 指令,從節點get k1 能取得嗎?
由上圖可知是可以取得的。
②、全量複製透過執行 SLAVEOF 127.0.0.1 6379,如果主節點6379 以前還存在一些key,那麼執行指令之後,從節點會以前的資訊也都複製過來嗎?
答案也是肯定的,這裡我就不貼測試結果了。
③、主從讀寫分離 主節點能夠執行寫入指令,從節點能夠執行寫入指令嗎?
這裡的原因是在配置文件6381redis.conf 中對於slave-read-only 的配置
如果我們將其修改為no 之後,執行寫入命令是可以的。
但是從節點寫指令的資料從節點或主節點都不能取得的。
④、主節點宕機 主節點 Maste 掛掉,兩個從節點角色會改變嗎?
# 上圖可知主節點 Master 掛掉之後,從節點角色還是不會改變的。
⑤、主節點宕機後恢復 主節點Master掛掉之後,馬上啟動主機Maste,主節點扮演的角色還是 Master 嗎?
也就是說主節點掛掉之後重啟,又恢復了主節點的角色。
4、哨兵模式
透過前面的配置,主節點Master 只有一個,一旦主節點掛掉之後,從節點沒辦法擔起主節點的任務,那麼整個系統也無法運行。哨兵模式由此誕生,因為從節點能夠自動接手主節點的職責,解決了主節點宕機的問題。
哨兵模式就是不時地監控redis是否按照預期良好地運作(至少是保證主節點是存在的),若一台主機出現問題時,哨兵會自動將該主機下的某一個從機設定為新的主機,並讓其他從機和新主機建立主從關係。
哨兵模式建構步驟:
①、在設定檔目錄下新建sentinel.conf 文件,名字絕不能錯,然後設定對應內容
###1### |
|
| 分別配置被監控的名字,ip位址,連接埠號,以及得票數。當主機宕機時,從機需要投票決定誰接替成為主機,得票數達到1時不足以成為主機,必須超過1才可成為主機
啟動介面:
接下來,我們幹掉主機 6379,然後看從節點有啥變化。
幹掉主節點之後,我們查看後台列印日誌,發現 6381投票變成主節點了。
這時候我們查看從節點 6381的節點資訊:
# 6381 節點自動變成主節點了。
PS:哨兵模式也存在單點故障問題,如果哨兵機器掛了,那麼就無法進行監控了,解決辦法是哨兵也建立集群,Redis哨兵模式是支援集群的。
5、主從複製原理
Redis的複製功能包括同步(sync)和命令傳播(command propagate)兩種操作。
①、舊版同步
當從節點發出 SLAVEOF 指令,要求從伺服器複製主伺服器時,從伺服器透過向主伺服器發送 SYNC 指令來完成。此指令執行步驟:
1、從伺服器向主伺服器發送SYNC 指令
2、收到SYNC 指令的主伺服器執行BGSAVE 指令,在後台產生一個RDB 文件,並使用一個緩衝區記錄從開始執行的所有寫入指令
3、當主伺服器的BGSAVE 指令執行完畢時,主伺服器會將BGSAVE 指令產生的RDB 檔案傳送給從伺服器,從伺服器接收此RDB 文件,並將伺服器狀態更新為RDB檔案記錄的狀態。
4、主伺服器將緩衝區的所有寫入命令也傳送給從伺服器,從伺服器執行對應命令。
②、命令傳播
當同步操作完成之後,主伺服器會進行對應的修改命令,這時候從伺服器和主伺服器狀態就會不一致。
為了讓主伺服器和從伺服器保持狀態一致,主伺服器需要對從伺服器執行指令傳播操作,主伺服器會將自己的寫入指令傳送給從伺服器執行。從伺服器執行相應的命令之後,主從伺服器狀態繼續保持一致。
總結:透過同步操作以及指令傳播功能,能夠很好的保證了主從一致的特性。
但是我們考慮一個問題,如果從伺服器在同步主伺服器期間,突然斷開了連接,而這時候主伺服器進行了一些寫入操作,這時候從伺服器恢復連接,如果我們在進行同步,那麼就必須將主伺服器從新生成一個RDB文件,然後給從伺服器加載,這樣雖然能夠保證一致性,但是其實斷開連接之前主從伺服器狀態是保持一致的,不一致的是從伺服器斷開連接,而主伺服器執行了一些寫入指令,那麼從伺服器恢復連線後能不能只要斷線的哪些寫指令,而不是整個RDB快照呢?
同步操作其實是一個非常耗時的操作,主伺服器需要先透過BGSAVE 指令來產生一個RDB 文件,然後需要將該檔案傳送給從伺服器,從伺服器接收該檔案之後,接著載入該文件,並且在載入期間,從伺服器是無法處理其他命令的。
為了解決這個問題,Redis從2.8版本之後,使用了新的同步指令 PSYNC 來取代 SYNC 指令。此指令的部分重同步功能用於處理斷線後重複製的效率問題。也就是說當從伺服器在斷線後重新連接主伺服器時,主伺服器只將斷開連接後執行的寫入命令傳送給從伺服器,從伺服器只需要接收並執行這些寫入命令即可保持主從一致。
6、主從複製的缺點
主從複製雖然解決了主節點的單點故障問題,但是由於所有的寫入操作都是在Master 節點上操作,然後同步到Slave 節點,那麼同步就會有一定的延時,當系統很繁忙的時候,延時問題就會更加嚴重,而且會隨著從節點slave的增加而愈加嚴重。
以上是Redis如何實現主從複製的詳細內容。更多資訊請關注PHP中文網其他相關文章!

Redis的關鍵特性包括速度、靈活性和豐富的數據結構支持。 1)速度:Redis作為內存數據庫,讀寫操作幾乎瞬時,適用於緩存和會話管理。 2)靈活性:支持多種數據結構,如字符串、列表、集合等,適用於復雜數據處理。 3)數據結構支持:提供字符串、列表、集合、哈希表等,適合不同業務需求。

Redis的核心功能是高性能的內存數據存儲和處理系統。 1)高速數據訪問:Redis將數據存儲在內存中,提供微秒級別的讀寫速度。 2)豐富的數據結構:支持字符串、列表、集合等,適應多種應用場景。 3)持久化:通過RDB和AOF方式將數據持久化到磁盤。 4)發布訂閱:可用於消息隊列或實時通信系統。

Redis支持多種數據結構,具體包括:1.字符串(String),適合存儲單一值數據;2.列表(List),適用於隊列和棧;3.集合(Set),用於存儲不重複數據;4.有序集合(SortedSet),適用於排行榜和優先級隊列;5.哈希表(Hash),適合存儲對像或結構化數據。

Redis計數器是一種使用Redis鍵值對存儲來實現計數操作的機制,包含以下步驟:創建計數器鍵、增加計數、減少計數、重置計數和獲取計數。 Redis計數器的優勢包括速度快、高並發、持久性和簡單易用。它可用於用戶訪問計數、實時指標跟踪、遊戲分數和排名以及訂單處理計數等場景。

使用 Redis 命令行工具 (redis-cli) 可通過以下步驟管理和操作 Redis:連接到服務器,指定地址和端口。使用命令名稱和參數向服務器發送命令。使用 HELP 命令查看特定命令的幫助信息。使用 QUIT 命令退出命令行工具。

Redis集群模式通過分片將Redis實例部署到多個服務器,提高可擴展性和可用性。搭建步驟如下:創建奇數個Redis實例,端口不同;創建3個sentinel實例,監控Redis實例並進行故障轉移;配置sentinel配置文件,添加監控Redis實例信息和故障轉移設置;配置Redis實例配置文件,啟用集群模式並指定集群信息文件路徑;創建nodes.conf文件,包含各Redis實例的信息;啟動集群,執行create命令創建集群並指定副本數量;登錄集群執行CLUSTER INFO命令驗證集群狀態;使

要從 Redis 讀取隊列,需要獲取隊列名稱、使用 LPOP 命令讀取元素,並處理空隊列。具體步驟如下:獲取隊列名稱:以 "queue:" 前綴命名,如 "queue:my-queue"。使用 LPOP 命令:從隊列頭部彈出元素並返回其值,如 LPOP queue:my-queue。處理空隊列:如果隊列為空,LPOP 返回 nil,可先檢查隊列是否存在再讀取元素。

Redis 集群中使用 zset:zset 是一種有序集合,將元素與評分關聯。分片策略: a. 哈希分片:根據 zset 鍵的哈希值分佈。 b. 範圍分片:根據元素評分劃分為範圍,並將每個範圍分配給不同的節點。讀寫操作: a. 讀操作:如果 zset 鍵屬於當前節點的分片,則在本地處理;否則,路由到相應的分片。 b. 寫入操作:始終路由到持有 zset 鍵的分片。


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

MinGW - Minimalist GNU for Windows
這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。

MantisBT
Mantis是一個易於部署的基於Web的缺陷追蹤工具,用於幫助產品缺陷追蹤。它需要PHP、MySQL和一個Web伺服器。請查看我們的演示和託管服務。

Safe Exam Browser
Safe Exam Browser是一個安全的瀏覽器環境,安全地進行線上考試。該軟體將任何電腦變成一個安全的工作站。它控制對任何實用工具的訪問,並防止學生使用未經授權的資源。

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

Dreamweaver Mac版
視覺化網頁開發工具