Redis主從複製的原理介紹(圖文)
這篇文章帶給大家的內容是關於Redis主從複製的原理介紹(圖文),有一定的參考價值,有需要的朋友可以參考一下,希望對你有幫助。
面臨問題
機器故障。我們部署到一台 Redis 伺服器,當發生機器故障時,需要遷移到另外一台伺服器並且要確保資料是同步的。而數據才是最重要的,如果你不在乎,基本上也就不會使用 Redis 了。
容量瓶頸。當我們有需求需要擴容 Redis 記憶體時,從 16G 的記憶體升到 64G,單機肯定是滿足不了。當然,你可以重新買一台 128G 的新機器。
解決方案
要實現分散式資料庫的更大的儲存容量和承受高並發存取量,我們會將原先集中式資料庫的資料分別儲存到其他多個網路節點上。
Redis 為了解決這個單一節點的問題,也會把資料複製多個副本部署到其他節點上進行複製,實現Redis的高可用,實現對資料的冗餘備份,從而確保資料和服務的高可用。
主從複製
什麼是主從複製
#主從複製,是指將一台Redis伺服器的數據,複製到其他的Redis伺服器。前者稱為主節點(master),後者稱為從節點(slave),資料的複製是單向的,只能由主節點到從節點。
預設情況下,每台Redis伺服器都是主節點;且一個主節點可以有多個從節點(或沒有從節點),但一個從節點只能有一個主節點。
主從複製的作用
資料冗餘:主從複製實現了資料的熱備份,是持久化之外的一種資料冗餘方式。
故障復原:當主節點出現問題時,可以由從節點提供服務,實現快速的故障復原;實際上是一種服務的冗餘。
負載平衡:在主從複製的基礎上,配合讀寫分離,可以由主節點提供寫入服務,由從節點提供讀取服務(即寫Redis資料時應用連接主節點,讀Redis資料時應用連線從節點),分擔伺服器負載;尤其是在寫入少讀多的場景下,透過多個從節點分擔讀取負載,可以大幅提高Redis伺服器的並發量。
讀寫分離:可用於實現讀寫分離,主庫寫、從庫讀,讀寫分離不僅可以提高伺服器的負載能力,同時可根據需求的變化,改變從庫的數量;
高可用基石:除了上述作用以外,主從複製還是哨兵和集群能夠實施的基礎,因此說主從複製是Redis高可用的基礎。
主從複製啟用
從節點開啟主從複製,有3種方式:
設定檔: 在從伺服器的設定檔加入:slaveof
啟動指令: redis-server啟動指令後加入--slaveof
客戶端指令: Redis伺服器啟動後,直接透過客戶端執行指令:slaveof
,則Redis執行個體成為從節點。
透過 info replication 指令可以看到複製的一些訊息
主從複製原理
主從複製過程大體可以分成3個階段:連線建立階段(即準備階段)、資料同步階段、指令傳播階段。
從節點執行slaveof 指令後,複製過程便開始運作,下面圖示大概可以看到,
從圖中可以看出複製過程大致分為6個過程
主從配置之後的日誌記錄也可以看出這個流程
#1)保存主節點(master)資訊。
執行slaveof 後Redis 會列印如下日誌:
2)從節點(slave)內部透過每秒執行的定時任務維護複製相關邏輯,當定時任務發現有新的主節點後,會嘗試與該節點建立網路連線
從節點與主節點建立網路連線
從節點會建立一個socket 套接字,從節點建立了一個連接埠為51234的套接字,專門用於接受主節點發送的複製命令。從節點連線成功後列印如下日誌:
如果從節點無法建立連接,定時任務會無限重試直到連接成功或執行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 回覆或逾時,例如網路逾時或主節點正在阻塞無法回應指令,從節點會斷開複製連接,下次定時任務會發起重連。
從節點發送的ping 命令成功返回,Redis 列印如下日誌,並繼續後續複製流程:
4)權限驗證。如果主節點設定了 requirepass 參數,則需要密碼驗證,從節點必須配置 masterauth 參數保證與主節點相同的密碼才能通過驗證;如果驗證失敗複製將終止,從節點重新發起複製流程。
5)同步資料集。主從複製連線正常通訊後,對於首次建立複製的場景,主節點會把持有的資料全部傳送給從節點,這部分操作是耗時最長的步驟。
6)指令持續複製。當主節點把目前的資料同步給從節點後,便完成了複製的建立流程。接下來主節點會持續地把寫指令傳送給從節點,確保主從資料一致性。
#以上是Redis主從複製的原理介紹(圖文)的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

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

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

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

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

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

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

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

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

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

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

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

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

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

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