Redis基礎系列-主從復制

Redis基礎系列-主從復制

文章目錄

  • Redis基礎系列-主從復制
    • 1. 什么是 Redis 主從復制?
    • 2. 主從復制有什么好處?
    • 3. 如何配置 Redis 主從復制?
    • 4. 主從復制的驗證
      • 4.1 如何查看主從搭建成功
      • 4.2 主從常見疑問
      • 4.3 主從常見命令
    • 5. 主從復制的原理和工作流程
    • 6. 特殊的主從復制(薪火相傳)
    • 7. 總結
    • 8. 參考和感謝

1. 什么是 Redis 主從復制?

Redis 主從復制是一種數據復制機制,通過該機制,我們可以將 Redis 數據庫的數據從一個主 Redis 實例復制到多個從 Redis 實例,從而實現數據的備份和讀寫分離。主 Redis 實例負責寫入操作,而從 Redis 實例則負責讀取操作,從而提供更好的性能和可擴展性。
下面是經典的主從架構(一主二仆)

2. 主從復制有什么好處?

  1. 讀寫分離
  2. 容災恢復
  3. 數據備份
  4. 水平擴容支撐高并發

3. 如何配置 Redis 主從復制?

  1. 配置主 Redis 實例(示例:redis6379.conf)
# 1. 開啟后臺模式
daemonize yes
# 2.注釋掉回環地址限制
#bind 127.0.0.1@
# 3.關閉保護模式
protected-mode no
# 4.指定端口
port 6379
# 5.指定當前工作目錄(配置文件和快照文件路徑)
dir /myredis
# 6.pid進程文件名字
pidfile /var/run/redis_6379.pid
# 7.log文件名字
logfile "/myredis/6379.log"
# 8.redis密碼
requirepass 123456
# 9.快照文件路徑
dbfilename dump6379.rdb
  1. 配置第一個從 Redis 實例(示例:redis6380.conf)

按照上述redis6379.conf進行配置,需要調整以下配置

# 4.指定端口
port 6380
# 6.pid進程文件名字
pidfile /var/run/redis_6380.pid
# 7.log文件名字
logfile "/myredis/6380.log"

新增加以下配置(這才是主從復制的關鍵配置)

# 1.設置主 Redis 實例的信息
replicaof 192.168.10.110 6379
# 2.設置主 Redis 認證信息
masterauth "123456"
  1. 配置第二個從 Redis 實例(示例:redis6381.conf)

按照上述redis6379.conf進行配置,需要調整以下配置

# 4.指定端口
port 6381
# 6.pid進程文件名字
pidfile /var/run/redis_6381.pid
# 7.log文件名字
logfile "/myredis/6381.log"

新增加以下配置(這才是主從復制的關鍵配置)

# 1.設置主 Redis 實例的信息
replicaof 192.168.10.110 6379
# 2.設置主 Redis 認證信息
masterauth "123456"

從上述配置來看,我們可以清晰的了解到,主從配置的關鍵信息配置在slave上

4. 主從復制的驗證

按照上述步驟配置配置好主從rdis,要求三臺服務器兩兩能互相訪問先啟動主機,然后啟動兩臺從機

4.1 如何查看主從搭建成功

  • 使用命令查看
info replication

主機

從機1

從機2

  • 日志查看

主機日志

從機1日志

從機2日志

4.2 主從常見疑問

  1. 從機可以執行寫命令嗎?

    嚴格的讀寫分離,主機負責寫數據(也可以讀數據),從機負責讀數據

  2. 從機切入點問題

    從機首次啟動,主機的數據覆蓋掉從機的數據,后續主機寫,從機跟著同步寫入

  3. 主機shutdown后,從機會上位嗎?

    從機不動,原地待命,從機數據可以正常使用;等待主機重啟

  4. 主機shutdown后,重啟后主從關系還在嗎?從機還能否順利復制?

    存在,能順利復制(青山依舊在)

  5. 某臺從機down后,master繼續,從機重啟后它能跟上大部隊嗎?

    可以

4.3 主從常見命令

可以查看復制節點的主從關系和配置信息

info replication

從機在運行的狀況下,通過命令設置主機(改換門庭)

slaveof 主機ip 主機port

從機在運行的狀況下,通過命令斷掉與主機的關系(自立為王)

slaveof no one

5. 主從復制的原理和工作流程

  1. slave啟動,同步初請(發送同步的初始化請求)

slave啟動成功連接到master后會發送一個sync命令
slave首次全新連接master,一次完全同步 (全量復制)將被自動執行,slave自身原有數據會被master數據覆蓋清除

  1. 首次連接,全量復制

master節點收到sync命令后會開始在后臺保存快照(即RDB持久化,主從復制時會觸發RDB),同時收集所有接收到的用于修改數據集的命令緩存起來,master節點執行RDB持久化完后,master將rdb快照文件和所有緩存的命令發送到所有slave,以完成一次完全同步
而slave服務在接收到數據庫文件數據后,將其存盤并加載到內存中,從而完成復制初始化

  1. 心跳持續,保持通信
# 10s發送一次心跳
repl-ping-replica-period 10
  1. 進入平穩,增量復制

Master繼續將新的所有收集到的修改命令自動依次傳給slave,完成同步

  1. 從機下線,重連續傳

master會檢查backlog里面的offset,master和slave都會保存一個復制的offset還有一個masterId,offset是保存在backlog中的。Master只會把已經復制的offset后面的數據復制給Slave,類似斷點續傳

在 Redis 主從復制中,backlog(復制積壓緩沖區)是一個用于存儲主節點未能及時傳遞給從節點的寫命令的緩沖區。當主節點生成 RDB 快照或 AOF 日志文件時,或者主從節點之間的網絡連接出現故障時,主節點上新接收到的寫命令將會存儲在 backlog 中,等待后續的傳輸。backlog 的作用是確保在主節點和從節點之間的復制過程中數據的準確性和一致性。當連接恢復時,從節點會獲取 backlog 中的命令,執行它們以補充在復制過程中可能丟失的數據。backlog 的大小是通過 `repl-backlog-size` 參數來配置的,默認情況下是 1MB。如果 backlog 中緩存的命令數量超過了配置的大小,最早的命令將被丟棄。值得注意的是,backlog 只用于短暫的數據流失或網絡中斷情況下的數據恢復,而不是用于持久化的數據備份。因此,當出現較長時間的故障或大量數據丟失時,可能需要使用其他策略或手段進行數據恢復和同步。

6. 特殊的主從復制(薪火相傳)

  • 上一個slave可以是下一個slave的master,slave同樣可以接收其他slaves的連接和同步請求,那么該slave作為了鏈條中下一個的master.可以有效減輕主master的寫壓力
  • 中途變更轉向:會清除之前的數據,重新建立拷貝最新的

7. 總結

主從復制雖然可以實現讀寫分離,很大程度上提高redis的使用性能,但是它的缺點也是顯而易見的:

  1. 由于所有的寫操作都是先在Master上操作,然后同步更新到Slave上,所以從Master同步到Slave機器有一定的延遲,當系統很繁忙的時候,延遲問題會更加嚴重,Slave機器數量的增加也會使這個問題更加嚴重。

  1. master宕機了,從機不會競選master,此時只能讀,不能寫

8. 參考和感謝

尚硅谷Redis零基礎到進階,最強redis7教程,陽哥親自帶練

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/214749.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/214749.shtml
英文地址,請注明出處:http://en.pswp.cn/news/214749.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

掌握1688官方API接口:開啟智能商務合作新篇章

當涉及到與1688官方合作的API接口時,以下是一些建議和指導,以幫助您開始編寫相關的代碼。 了解API接口文檔: 在編寫與1688官方合作的API接口之前,首先需要了解1688官方提供的API接口文檔。您可以在1688開放平臺上找到相關的文檔…

12.11 作業

1, 完善對話框,點擊登錄對話框,如果賬號和密碼匹配,則彈出信息對話框,給出提示”登錄成功“,提供一個Ok按鈕,用戶點擊Ok后,關閉登錄界面,跳轉到其他界面 如果賬號和密碼…

王道數據結構課后代碼題p150 第13——17 (c語言代碼實現)

目錄 13.p 和 q 分別為指向該二叉樹中任意兩個結點的指針,試編寫算法 ANCESTOR(ROOT,P,q,r),找到P和q的最近公共祖先結點 r 14.假設二叉樹采用二叉鏈表存儲結構,設計一個算法,求非空二叉樹 b的寬度(即具有結點數最多的那一層的結點…

Draw.io繪圖操作

使用步驟 以下是使用 draw.io(現在的 diagrams.net)的一些基本操作步驟: 訪問網站: 打開瀏覽器,訪問 https://app.diagrams.net/。 創建新文檔: 在 diagrams.net 主頁,點擊 “New Diagram” 或…

2023最新vue安裝(npm,yarn,國內鏡像,vue安裝,vue導包)全套教程2023年12月最新

第一步(安裝npm) 官網地址:https://nodejs.org/en/download windows安裝yarn 詳細教程_windows yarn-CSDN博客 第二步(yarn下載) windows 下需要下載msi文件 ,下載地址:https://yarnpkg.com/latest.msi npm install -g…

力扣198. 打家劫舍

動態規劃 思路: 尋找狀態轉移方程: 假設有 n 個房間; 如果偷第 n 個房間,那么第 n - 1 個房間不偷,之前的 n - 2 個房間偷竊到了 M(n - 2),總共可以偷竊到 M(n - 2) N(n);如果不偷第 n 個房間…

第11節: Vue3 動態參數

在UniApp中使用Vue3框架使用動態參數&#xff1a; <template> <view> <text>{{ dynamicText }}</text> <button click"changeText">點擊改變文本</button> </view> </template> <script> export de…

SD-WAN解決企業國際互聯組網需求

隨著云計算、移動應用和企業全球化的浪潮&#xff0c;實時應用在不同地點之間的傳輸需求不斷增加&#xff0c;涵蓋異地辦公、視頻會議、遠程桌面、支付交易系統以及遠程醫療等。這些應用的順暢傳輸對于企業至關重要&#xff0c;而SD-WAN&#xff08;軟件定義廣域網&#xff09;…

Spring MVC詳解、靜態資源訪問、攔截器

1. Spring MVC概述 1.1 Spring MVC是什么 SpringMVC是Spring的一個模塊&#xff0c;是一個基于MVC設計模式的web框架。 1.2 Spring MVC執行流程。 1.3 組件分析 前端控制器&#xff08;默認配置&#xff09;Dispatcher Servlet 作用&#xff1a;只負責分發請求。可以很好的對…

這樣的軟件測試面試題,誰面試遇到誰淘汰!!!

88 11.6 自動化測試用例的來源 手工編寫測試用例 把原來手工的測試用例&#xff0c;當成自動化測試用例 11.7 自動化測試的優點與缺點 優點: 1、對程序的回歸測試更方便 2、可以運行更多更繁瑣的測試 3、提高測試效率和準確性&#xff0c;節約時間成本 4、可以執行一些手工測試…

【源碼解析】從ReentrantLock角度聊聊AQS原理

AQS結構 //頭節點 當前持有鎖的線程private transient volatile Node head;/*** Tail of the wait queue, lazily initialized. Modified only via* method enq to add new wait node.*///每個進來的線程都插入到最后private transient volatile Node tail;/*** The synchroni…

MLIR筆記(6)

5. 方言與操作 5.1. 方言的概念 在MLIR里&#xff0c;通過Dialect類來抽象方言。具體的每種方言都需要從這個基類派生一個類型&#xff0c;并實現重載自己所需的虛函數。 MLIR文檔里這樣描述方言&#xff08; MLIR Language Reference - MLIR&#xff09;&#xff1a; 方言…

手把手教你玩轉ESP8266(原理+驅動)

在嵌入式開發中&#xff0c;無線通信的方式有很多&#xff0c;其中 WIFI 是繞不開的話題。說到 WIFI 通信&#xff0c;就不得不提 ESP8266了。 ESP8266 是一款高性能的 WIFI 串口模塊&#xff0c;實現透明傳輸。只要有一定的串口知識&#xff0c;不需要知道 WIFI 原理就可以上…

作為一個產品經理帶你了解Axure的安裝和基本使用

1.Axure的簡介 Axure是一種強大的原型設計工具&#xff0c;它允許用戶創建交互式的、高保真度的原型&#xff0c;以及進行用戶體驗設計和界面設計。Axure可以幫助設計師和產品經理快速創建和共享原型&#xff0c;以便團隊成員之間進行溝通和反饋。Axure提供了豐富的交互組件和功…

Spring--10--Spring Bean的生命周期

提示&#xff1a;文章寫完后&#xff0c;目錄可以自動生成&#xff0c;如何生成可參考右邊的幫助文檔 文章目錄 1.Spring Bean1.1 什么是 Bean簡而言之&#xff0c;bean 是由 Spring IoC 容器實例化、組裝和管理的對象。 1.2 Spring框架管理Bean對象的優勢 2.Bean的生命周期實例…

西工大網絡空間安全學院計算機系統基礎實驗二(phase_2下——漫漫深夜過后的黎明!!!)

內存地址內存地址中的數注釋指向這塊內存的寄存器0xffffd0e8函數phase_2的棧幀0xffffd0e40xffffd0f4函數phase_2的棧幀0xffffd0e00x5655b7b0函數phase_2的棧幀0xffffd0dc0x565566ca函數read_six_numbers的返回地址&#xff0c;函數phase_2的棧幀0xffffd0d80x5655af64舊%ebx的值…

SpringIOC之ConditionEvaluator

博主介紹:?全網粉絲5W+,全棧開發工程師,從事多年軟件開發,在大廠呆過。持有軟件中級、六級等證書。可提供微服務項目搭建與畢業項目實戰,博主也曾寫過優秀論文,查重率極低,在這方面有豐富的經驗? 博主作品:《Java項目案例》主要基于SpringBoot+MyBatis/MyBatis-plus+…

Netty性能好的原因是什么

Netty性能好的原因 廢話篇Netty性能好的原因是什么1. 非阻塞IO模型高效的Reactor線程模型零拷貝內存池設計無鎖串行化設計高性能序列化協議 廢話篇 相信有同學會經常被問到這樣的問題&#xff0c;不妨下次被面試官問到這種問題&#xff0c;我們可以這樣回答&#xff01; Nett…

簡單實用的firewalld命令

簡單實用的firewalld命令 一、查看防火墻是否打開二、查詢、開放、關閉端口三、查看已監聽端口四、驗證 一、查看防火墻是否打開 systemctl status firewalld ● firewalld.service - firewalld - dynamic firewall daemonLoaded: loaded (/usr/lib/systemd/system/firewalld.…

map.getOrDefault

map.getOrDefault 是 Java 中的一個方法&#xff0c;用于從 Map 中獲取指定鍵的值&#xff0c;如果鍵不存在&#xff0c;則返回指定的默認值。 方法簽名如下&#xff1a; V getOrDefault(Object key, V defaultValue) 其中&#xff0c;key 是要獲取值的鍵&#xff0c;defaul…