目錄
解決方案
主從複製
什麼是主從複製
主從複製的作用
主從複製啟用
主從複製原理
首頁 後端開發 php教程 Redis主從複製的原理介紹(圖文)

Redis主從複製的原理介紹(圖文)

Feb 25, 2019 am 09:48 AM
php redis

這篇文章帶給大家的內容是關於Redis主從複製的原理介紹(圖文),有一定的參考價值,有需要的朋友可以參考一下,希望對你有幫助。

面臨問題

  1. 機器故障。我們部署到一台 Redis 伺服器,當發生機器故障時,需要遷移到另外一台伺服器並且要確保資料是同步的。而數據才是最重要的,如果你不在乎,基本上也就不會使用 Redis 了。

  2. 容量瓶頸。當我們有需求需要擴容 Redis 記憶體時,從 16G 的記憶體升到 64G,單機肯定是滿足不了。當然,你可以重新買一台 128G 的新機器。

解決方案

要實現分散式資料庫的更大的儲存容量和承受高並發存取量,我們會將原先集中式資料庫的資料分別儲存到其他多個網路節點上。

Redis 為了解決這個單一節點的問題,也會把資料複製多個副本部署到其他節點上進行複製,實現Redis的高可用,實現對資料的冗餘備份,從而確保資料和服務的高可用。

主從複製

什麼是主從複製

Redis主從複製的原理介紹(圖文)

#主從複製,是指將一台Redis伺服器的數據,複製到其他的Redis伺服器。前者稱為主節點(master),後者稱為從節點(slave),資料的複製是單向的,只能由主節點到從節點。

預設情況下,每台Redis伺服器都是主節點;且一個主節點可以有多個從節點(或沒有從節點),但一個從節點只能有一個主節點。

主從複製的作用

  1. 資料冗餘:主從複製實現了資料的熱備份,是持久化之外的一種資料冗餘方式。

  2. 故障復原:當主節點出現問題時,可以由從節點提供服務,實現快速的故障復原;實際上是一種服務的冗餘。

  3. 負載平衡:在主從複製的基礎上,配合讀寫分離,可以由主節點提供寫入服務,由從節點提供讀取服務(即寫Redis資料時應用連接主節點,讀Redis資料時應用連線從節點),分擔伺服器負載;尤其是在寫入少讀多的場景下,透過多個從節點分擔讀取負載,可以大幅提高Redis伺服器的並發量。

  4. 讀寫分離:可用於實現讀寫分離,主庫寫、從庫讀,讀寫分離不僅可以提高伺服器的負載能力,同時可根據需求的變化,改變從庫的數量;

  5. 高可用基石:除了上述作用以外,主從複製還是哨兵和集群能夠實施的基礎,因此說主從複製是Redis高可用的基礎。

主從複製啟用

從節點開啟主從複製,有3種方式:

  1. 設定檔: 在從伺服器的設定檔加入:slaveof

  2. 啟動指令: redis-server啟動指令後加入--slaveof

  3. 客戶端指令: Redis伺服器啟動後,直接透過客戶端執行指令:slaveof
      ,則Redis執行個體成為從節點。

透過 info replication 指令可以看到複製的一些訊息

主從複製原理

主從複製過程大體可以分成3個階段:連線建立階段(即準備階段)、資料同步階段、指令傳播階段。

從節點執行slaveof 指令後,複製過程便開始運作,下面圖示大概可以看到,
從圖中可以看出複製過程大致分為6個過程

Redis主從複製的原理介紹(圖文)

主從配置之後的日誌記錄也可以看出這個流程

#1)保存主節點(master)資訊。
執行slaveof 後Redis 會列印如下日誌:

Redis主從複製的原理介紹(圖文)

2)從節點(slave)內部透過每秒執行的定時任務維護複製相關邏輯,當定時任務發現有新的主節點後,會嘗試與該節點建立網路連線

Redis主從複製的原理介紹(圖文)

從節點與主節點建立網路連線

從節點會建立一個socket 套接字,從節點建立了一個連接埠為51234的套接字,專門用於接受主節點發送的複製命令。從節點連線成功後列印如下日誌:

Redis主從複製的原理介紹(圖文)

如果從節點無法建立連接,定時任務會無限重試直到連接成功或執行slaveof no one 取消複製

關於連接失敗,可以在從節點執行info replication 檢視master_link_down_since_seconds 指標,它會記錄與主節點連線失敗的系統時間。從節點連接主節點失敗時也會每秒列印如下日誌,方便發現問題:

# Error condition on socket for SYNC: {socket_error_reason}
登入後複製

3)發送 ping 指令。
連接建立成功後從節點發送 ping 請求進行首次通信,ping 請求主要目的如下:
·檢測主從之間網路套接字是否可用。
·偵測主節點目前是否可接受處理指令。
如果發送ping 指令後,從節點沒有收到主節點的pong 回覆或逾時,例如網路逾時或主節點正在阻塞無法回應指令,從節點會斷開複製連接,下次定時任務會發起重連。

Redis主從複製的原理介紹(圖文)

Redis主從複製的原理介紹(圖文)

從節點發送的ping 命令成功返回,Redis 列印如下日誌,並繼續後續複製流程:

Redis主從複製的原理介紹(圖文)

4)權限驗證。如果主節點設定了 requirepass 參數,則需要密碼驗證,從節點必須配置 masterauth 參數保證與主節點相同的密碼才能通過驗證;如果驗證失敗複製將終止,從節點重新發起複製流程。

5)同步資料集。主從複製連線正常通訊後,對於首次建立複製的場景,主節點會把持有的資料全部傳送給從節點,這部分操作是耗時最長的步驟。

6)指令持續複製。當主節點把目前的資料同步給從節點後,便完成了複製的建立流程。接下來主節點會持續地把寫指令傳送給從節點,確保主從資料一致性。

#

以上是Redis主從複製的原理介紹(圖文)的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

<🎜>:泡泡膠模擬器無窮大 - 如何獲取和使用皇家鑰匙
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
北端:融合系統,解釋
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
Mandragora:巫婆樹的耳語 - 如何解鎖抓鉤
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

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

熱門話題

Java教學
1666
14
CakePHP 教程
1426
52
Laravel 教程
1328
25
PHP教程
1273
29
C# 教程
1253
24
繼續使用PHP:耐力的原因 繼續使用PHP:耐力的原因 Apr 19, 2025 am 12:23 AM

PHP仍然流行的原因是其易用性、靈活性和強大的生態系統。 1)易用性和簡單語法使其成為初學者的首選。 2)與web開發緊密結合,處理HTTP請求和數據庫交互出色。 3)龐大的生態系統提供了豐富的工具和庫。 4)活躍的社區和開源性質使其適應新需求和技術趨勢。

如何利用Redis緩存方案高效實現產品排行榜列表的需求? 如何利用Redis緩存方案高效實現產品排行榜列表的需求? Apr 19, 2025 pm 11:36 PM

Redis緩存方案如何實現產品排行榜列表的需求?在開發過程中,我們常常需要處理排行榜的需求,例如展示一個�...

REDIS的角色:探索數據存儲和管理功能 REDIS的角色:探索數據存儲和管理功能 Apr 22, 2025 am 12:10 AM

Redis在數據存儲和管理中扮演著關鍵角色,通過其多種數據結構和持久化機製成為現代應用的核心。 1)Redis支持字符串、列表、集合、有序集合和哈希表等數據結構,適用於緩存和復雜業務邏輯。 2)通過RDB和AOF兩種持久化方式,Redis確保數據的可靠存儲和快速恢復。

Spring Boot中OAuth2Authorization對象Redis緩存失敗怎麼辦? Spring Boot中OAuth2Authorization對象Redis緩存失敗怎麼辦? Apr 19, 2025 pm 08:03 PM

SpringBoot中使用Redis緩存OAuth2Authorization對像在SpringBoot應用中,使用SpringSecurityOAuth2AuthorizationServer...

IIS和PHP的兼容性:深度潛水 IIS和PHP的兼容性:深度潛水 Apr 22, 2025 am 12:01 AM

IIS和PHP可以兼容,通過FastCGI實現。 1.IIS通過配置文件將.php文件請求轉發給FastCGI模塊。 2.FastCGI模塊啟動PHP進程處理請求,提高性能和穩定性。 3.實際應用中需注意配置細節、錯誤調試和性能優化。

如果session_start()被多次調用會發生什麼? 如果session_start()被多次調用會發生什麼? Apr 25, 2025 am 12:06 AM

多次調用session_start()會導致警告信息和可能的數據覆蓋。 1)PHP會發出警告,提示session已啟動。 2)可能導致session數據意外覆蓋。 3)使用session_status()檢查session狀態,避免重複調用。

使用RedisTemplate進行批量查詢時,為什麼返回值會為空? 使用RedisTemplate進行批量查詢時,為什麼返回值會為空? Apr 19, 2025 pm 10:15 PM

使用RedisTemplate進行批量查詢時為何返回值為空?在使用RedisTemplate進行批量查詢操作時,可能會遇到返回的結果�...

REDIS:了解其架構和目的 REDIS:了解其架構和目的 Apr 26, 2025 am 12:11 AM

Redis是一种内存数据结构存储系统,主要用作数据库、缓存和消息代理。它的核心特点包括单线程模型、I/O多路复用、持久化机制、复制与集群功能。Redis在实际应用中常用于缓存、会话存储和消息队列,通过选择合适的数据结构、使用管道和事务、以及进行监控和调优,可以显著提升其性能。

See all articles