搜尋
首頁資料庫RedisRedis如何實現主從複製

Redis如何實現主從複製

May 30, 2023 am 08:01 AM
redis

  前面介紹Redis,我們都在一台伺服器上進行操作的,也就是說讀和寫入以及備份操作都是在一台Redis伺服器上進行的,那麼隨著專案存取量的增加,對Redis伺服器的操作也越頻繁,雖然Redis讀寫速度都很快,但是一定程度上也會造成一定的延時,那麼為了解決訪問量大的問題,通常會採取的一種方式是主從架構Master/ Slave,Master 以寫為主,Slave 以讀為主,Master 主節點更新後根據配置,自動同步到從機Slave 節點。

  接下來我們就來介紹如何進行主從架構的建構。

  ps:這裡我是在一台機器上模擬多個Redis伺服器,與實際生產環境中相比,基本配置都是一樣,只是IP位址和連接埠號碼變化。

  Redis如何實現主從複製

1、修改設定檔

  先將redis.conf 設定檔複製三份,透過修改埠分別模擬三台Redis伺服器。

  Redis如何實現主從複製

  然後我們分別對這三個redis.conf 檔案進行修改。

  ①、修改 daemonize yes

  Redis如何實現主從複製

  表示指定Redis以守護程式的方式啟動(背景啟動)

##  表示指定Redis以守護程式的方式啟動(背景啟動)

  ②、配置PID檔案路徑pidfile

Redis如何實現主從複製  

  表示當redis作為守護程式運行的時候,它會把pid 預設寫到/var/redis /run/redis_6379.pid 檔案裡面

  ③、設定埠port

Redis如何實現主從複製  

#  ④、設定log 檔案名稱

Redis如何實現主從複製#  

④、設定log 檔案名字

##  

④、設定log 檔案名字

Redis如何實現主從複製

##  

④、設定log 檔案名字

##  

Redis如何實現主從複製

##  

  Redis如何實現主從複製⑤、配置rdb文件名

    依次將6380redis.conf 、 6381redis.conf 配置一次,則配置完畢。 3

  接下來我們分別啟動這三個服務。

  

  透過指令查看Redis是否啟動:
  

  接下來透過以下指令分別進入到這三個Redis客戶客戶端:

12

###### redis-cli -p 6379############redis-cli -p 6380############redis-cli -p 6381######## ##########

2、設置主從關係

  ①、通過  info replication 命令查看節點角色

  Redis如何實現主從複製    Redis如何實現主從複製

  Redis如何實現主從複製

  我們發現這三個節點都是扮演的Master 角色。如何將節點6380和6381轉換為從節點角色?

  ②、選擇6380端口和6381端口,執行命令:SLAVEOF 127.0.0.1 6379

  Redis如何實現主從複製    Redis如何實現主從複製

  

    

#節點Redis如何實現主從複製##  我們資訊6399 再看

#  

一旦重新啟動服務,先前透過指令設定的主從關係將會失效。透過配置redis.conf檔案可以實現永久保存這種關係。

3、測試主從關係  

①、增量複製

  主節點執行set k1 v1 指令,從節點get k1 能取得嗎? Redis如何實現主從複製

  

Redis如何實現主從複製

  

Redis如何實現主從複製

#  

  由上圖可知是可以取得的。   

②、全量複製

  透過執行 SLAVEOF 127.0.0.1 6379,如果主節點6379 以前還存在一些key,那麼執行指令之後,從節點會以前的資訊也都複製過來嗎?

  答案也是肯定的,這裡我就不貼測試結果了。   

③、主從讀寫分離

  主節點能夠執行寫入指令,從節點能夠執行寫入指令嗎? Redis如何實現主從複製

  

  這裡的原因是在配置文件6381redis.conf 中對於slave-read-only 的配置Redis如何實現主從複製

  

  如果我們將其修改為no 之後,執行寫入命令是可以的。 Redis如何實現主從複製

  

  但是從節點寫指令的資料從節點或主節點都不能取得的。   

④、主節點宕機

  主節點 Maste 掛掉,兩個從節點角色會改變嗎? Redis如何實現主從複製

  

Redis如何實現主從複製

  

#  上圖可知主節點 Master 掛掉之後,從節點角色還是不會改變的。   

⑤、主節點宕機後恢復

  主節點Master掛掉之後,馬上啟動主機Maste,主節點扮演的角色還是 Master 嗎? Redis如何實現主從複製

  

  也就是說主節點掛掉之後重啟,又恢復了主節點的角色。

4、哨兵模式

  透過前面的配置,主節點Master 只有一個,一旦主節點掛掉之後,從節點沒辦法擔起主節點的任務,那麼整個系統也無法運行。哨兵模式由此誕生,因為從節點能夠自動接手主節點的職責,解決了主節點宕機的問題。

  哨兵模式就是不時地監控redis是否按照預期良好地運作(至少是保證主節點是存在的),若一台主機出現問題時,哨兵會自動將該主機下的某一個從機設定為新的主機,並讓其他從機和新主機建立主從關係。 Redis如何實現主從複製

  

  哨兵模式建構步驟:

  ①、在設定檔目錄下新建sentinel.conf 文件,名字絕不能錯,然後設定對應內容Redis如何實現主從複製

   

###1###

sentinel monitor 被監控機器的名字(自己取名字) ip位址埠號得票數

Redis如何實現主從複製

  分別配置被監控的名字,ip位址,連接埠號,以及得票數。當主機宕機時,從機需要投票決定誰接替成為主機,得票數達到1時不足以成為主機,必須超過1才可成為主機  ②、啟動哨兵

#  

##### ###########1###############redis-sentinel /etc/redis/sentinel.conf############ ######

  啟動介面:

  Redis如何實現主從複製

  接下來,我們幹掉主機 6379,然後看從節點有啥變化。

  Redis如何實現主從複製

  幹掉主節點之後,我們查看後台列印日誌,發現 6381投票變成主節點了。

  Redis如何實現主從複製

  這時候我們查看從節點 6381的節點資訊:

  Redis如何實現主從複製

#  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中文網其他相關文章!

陳述
本文轉載於:亿速云。如有侵權,請聯絡admin@php.cn刪除
了解NOSQL:Redis的關鍵特徵了解NOSQL:Redis的關鍵特徵Apr 13, 2025 am 12:17 AM

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

REDIS:確定其主要功能REDIS:確定其主要功能Apr 12, 2025 am 12:01 AM

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

REDIS:流行數據結構指南REDIS:流行數據結構指南Apr 11, 2025 am 12:04 AM

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

redis計數器怎麼實現redis計數器怎麼實現Apr 10, 2025 pm 10:21 PM

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

redis命令行怎麼用redis命令行怎麼用Apr 10, 2025 pm 10:18 PM

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

redis集群模式怎麼搭建redis集群模式怎麼搭建Apr 10, 2025 pm 10:15 PM

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

redis怎麼讀取隊列redis怎麼讀取隊列Apr 10, 2025 pm 10:12 PM

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

redis集群zset怎麼使用redis集群zset怎麼使用Apr 10, 2025 pm 10:09 PM

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

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
3 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
3 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
3 週前By尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解鎖Myrise中的所有內容
4 週前By尊渡假赌尊渡假赌尊渡假赌

熱工具

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

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

MantisBT

MantisBT

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

Safe Exam Browser

Safe Exam Browser

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

SublimeText3 Mac版

SublimeText3 Mac版

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

Dreamweaver Mac版

Dreamweaver Mac版

視覺化網頁開發工具