Redis復制(replica)主從模式

Redis主從復制

在這里插入圖片描述

在這里插入圖片描述
Redis 的復制(replication)功能允許用戶根據一個 Redis 服務器來創建任意多個該服務器的復制品,其中被復制的服務器為主服務器(master),而通過復制創建出來的服務器復制品則為從服務器(slave)。 只要主從服務器之間的網絡連接正常,主從服務器兩者會具有相同的數據,主服務器就會一直將發生在自己身上的數據更新同步給從服務器,從而一直保證主從服務器的數據相同。
一句話:就是主從復制,master以寫為主,slave以讀為主。當master數據變化的時候,自動將新的數據異步同步到其他slavve數據庫。
主從復制的作用

  • 讀寫分離
  • 容災恢復
  • 數據備份
  • 水平擴容支持高并發

利用docker搭建一主兩從的redis集群

docker-compose.yml的配置信息

version: '3.8'
services:master:image: docker.1ms.run/library/redis:7.0.0container_name: redis-masterports:- "6379:6379"command: redis-server --protected-mode no --requirepass root  # 主節點密碼slave1:image: docker.1ms.run/library/redis:7.0.0container_name: redis-slave1ports:- "6380:6379"command: - redis-server - --protected-mode no - --replicaof redis-master 6379 - --masterauth root   # 從節點連接主節點的密碼- --requirepass root  # 從節點自身的密碼(可選,但建議與主節點一致)slave2:image: docker.1ms.run/library/redis:7.0.0container_name: redis-slave2ports:- "6381:6379"command: - redis-server - --protected-mode no - --replicaof redis-master 6379 - --masterauth root - --requirepass root

其中在每個從節點上需要配置master主節點的密碼,–masterauth 的參數指定。以及–replicaof指定主節點的地址

docker-compose up -d啟動后
在這里插入圖片描述
在master主節點上執行以下命令進入主節點的redis環境

docker exec -it redis-master redis-cli -a root

在redis從節點上執行以下命令進入從節點的redis環境

 docker exec -it redis-slave1 redis-cli -a root

進入redis集群后,可以執行info replication的命令查看節點的狀態信息

info replication

主節點的信息
在這里插入圖片描述
從節點的信息在這里插入圖片描述
主從同步的演示,在主節點上寫入值,從節點可以讀取到相關的值
主節點寫入值:
在這里插入圖片描述
從節點讀取值
在這里插入圖片描述
在這里插入圖片描述
從節點可以執行寫命令么?
從節點不可以寫

(error) READONLY You can't write against a read only replica.

在這里插入圖片描述
第三個節點掛了,前兩個節點還是正常的,再往主機寫入多個值,第三個節點然后再啟動,數據會同步過來么?
第三個節點掛了
在這里插入圖片描述
往第一個節點寫入多個值
在這里插入圖片描述
查看第二個節點的數據,數據正常同步
在這里插入圖片描述
啟動第三個節點
在這里插入圖片描述
查看第三個節點的數據信息,數據正常同步過來
在這里插入圖片描述
主節點shutdown后,從節點是否會上位?

在這里插入圖片描述
讀取從機的值,數據并沒有丟,身份也沒有變
在這里插入圖片描述
在這里插入圖片描述
主機shutdown后,重啟后主從關系還在嗎?從機還能否順利復制?
在這里插入圖片描述
主節點再設置值
在這里插入圖片描述
從節點再去讀取值
在這里插入圖片描述
某臺從機down后,master繼續,從機重啟后他能跟上大部隊么?答:能
除了從配置文件的角度設置持久有效的主從關系外,還可以通過命令salveof 主機ip以及端口號指定主機的掛載,但是臨時有效,當redis重啟中,主從關系將不復存在。
薪火相傳的架構演示
類似于爺爺->爸爸-> 兒子的主從關系
slaveof 新主庫IP 新主庫端口
在這里插入圖片描述
第三個節點選取第二個節點作為master節點
在這里插入圖片描述
第一個爺爺級別的主節點信息變化
在這里插入圖片描述
第二個中間爸爸級別的節點信息變化
在這里插入圖片描述
中間的爸爸節點,僅僅是數據的同步方向的指定,仍然不可以執行寫入操作的
在這里插入圖片描述

上一個slave可以是下一個slave的master,slave同樣可以接收其他slaves的連接和同步請求,那么該slave作為了鏈條中下一個的master,可以有效減輕主master的寫壓力。
中途變更轉向:會清除之前的數據,重新建立拷貝最新的。
反客為主
使用命令: slaveof no one
在這里插入圖片描述
寫入數據
在這里插入圖片描述
主從復制原理和工作流程

  • salve啟動,同步初請(slave啟動成功連接到master會發送一個sync命令,slave首次全新連接master,一次完全同步(全量復制)將被自動執行,slave自身原有數據會被master數據覆蓋清除
  • 首次連接,全量復制(master節點收到sync命令后會開始在后臺保存快照(即RDB持久化,主從復制時會觸發RDB),同時收集所有接收到的用于修改數據集命令緩存起來,master節點執行RDB持久化完成后,master將RDB快照文件和所有緩存的命令發送到所有slave,以完成一次完全同步。而slave服務在接收到數據庫文件后,將其存盤并加載到內存中,從而完成復制初始化)
  • 心跳持續,保持通信(master發出PING包的周期,默認10s。repl-ping-replica-period 10
  • 進入平穩,增量復制(master繼續將新的所有收集到的修改命令自動依次傳遞給slave,完成同步)
  • 從機下線,重連續傳(master會檢查backlog里面的offset,master和slave都會保存一個復制的offset還有一個masterId,offset是保存在backlog中的Master只會把已復制的offset后面的數據復制給slave,類似斷點續傳

主從復制的缺點

  • 復制延時,信號衰減
    在這里插入圖片描述

  • master掛了,如何辦?(默認情況下,不會在slave節點中自動重選一個master,那每次人工選舉?? 無人值守安裝成為剛需 哨兵模式

參考視頻
Redis 集群架構

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

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

相關文章

Adobe Premiere Pro2023配置要求

Windows 系統 最低配置 處理器:Intel 第六代或更新版本的 CPU,或 AMD Ryzen? 1000 系列或更新版本的 CPU,需要支持 Advanced Vector Extensions 2(AVX2)。操作系統:Windows 10(64 位&#xff…

【Kubernets】Deployment 和 StatefulSet 有什么區別?什么時候用 StatefulSet?

Deployment 和 StatefulSet 的區別 在 Kubernetes 中,Deployment 和 StatefulSet 都用于管理 Pod,但它們適用于不同的場景。 1. Deployment:管理無狀態應用 特點: 無狀態:Pod 之間相互獨立,不需要保持順…

R語言零基礎系列教程-03-RStudio界面介紹與關鍵設置

代碼、講義、軟件回復【R語言03】獲取。 設置位置: 菜單欄 - Tools - Blobal Options 設置 通用設置 設置面板左側General選項 版本選擇: 一般只用一個版本即可 默認工作目錄設置: 你希望RStudio打開時是基于哪個目錄進行工作可以不設置, 因為腳本一般都是放置在特定項目路…

車載以太網測試-9【網絡層】-子網劃分的子網掩碼VLAN

目錄 1 摘要2 子網劃分2.1 子網掩碼2.2 VLAN(虛擬局域網)2.2.1 IEEE 802.1Q VLAN標簽2.2.1.1 VLAN標簽的結構2.2.1.2 VLAN標簽的插入2.2.1.3 VLAN標簽的處理2.1.2.4 PVID(Port VLAN Identifier) 和 VID(VLAN Identifie…

微信小程序刷題邏輯實現:技術揭秘與實踐分享

頁面展示: 概述 在當今數字化學習的浪潮中,微信小程序以其便捷性和實用性,成為了眾多學習者刷題備考的得力工具。今天,我們就來深入剖析一個微信小程序刷題功能的實現邏輯,從代碼層面揭開其神秘面紗。 小程序界面布局…

JVM--垃圾回收

垃圾回收的概念 垃圾回收主要針對的是堆中的對象,堆是一個共享的區域,創建的對象和數組都放在這個位置。但是我們不能一直的創建對象,也不是所有的對象能一直存放,如果不進行垃圾回收,內存遲早會耗盡,及時…

【教程】繼承中的訪問控制 C++

目錄 簡介public,protected 和 private繼承中的 public,protected 和 private示例 簡介 在 C 中派生類可以通過 public,protected 和 private 三種修飾符決定基類成員在派生類中的訪問級別 public,protected 和 private 公有成…

【2025】基于python+django的駕校招生培訓管理系統(源碼、萬字文檔、圖文修改、調試答疑)

課題功能結構圖如下: 駕校招生培訓管理系統設計 一、課題背景 隨著機動車保有量的不斷增加,人們對駕駛技能的需求也日益增長。駕校作為駕駛培訓的主要機構,面臨著激烈的市場競爭和學員需求多樣化等挑戰。傳統的駕校管理模式往往依賴于人工操作…

要登錄的設備ip未知時的處理方法

目錄 1 應用場景... 1 2 解決方法:... 1 2.1 wireshark設置... 1 2.2 獲取網口mac地址,wireshark抓包前預過濾掉自身mac地址的影響。... 2 2.3 pc網口和設備對接... 3 2.3.1 情況1:... 3 2.3.2 情…

一.ffmpeg打開麥克風,錄制音頻并重采樣

一.windows windows下使用msys編譯ffmpeg,先編譯libx264和libx265,然后編譯ffmpeg的時候需要添加這兩個庫的路徑才能--enable;為什么ffplay--enable了還是沒有呢,仔細看編譯打印,可能剛有一段報錯提示SDL找不到&#…

go 安裝swagger

1、依賴安裝: # 安裝 swag 命令行工具 go install github.com/swaggo/swag/cmd/swaglatest# 安裝 gin-swagger 和 swagger 文件的依賴 go get -u github.com/swaggo/gin-swagger go get -u github.com/swaggo/files 2、測試 cmd中輸入: swag -v 如果…

網絡安全反滲透 網絡安全攻防滲透

網絡滲透防范主要從兩個方面來進行防范,一方面是從思想意識上進行防范,另一方面就是從技術方面來進行防范。 1.從思想意識上防范滲透 網絡攻擊與網絡安全防御是正反兩個方面,縱觀容易出現網絡安全事故或者事件的公司和個人,在這些…

java泛型通配符?及上下界(extends,super)保證安全性、靈活性、可讀性

在 Java 中,泛型通配符(?)用于表示未知類型,通常用于增強泛型的靈活性。通配符可以與上下限結合使用,以限制泛型的范圍。以下是通配符及上下限的使用示例: 1. 無界通配符 (?) 無界通配符表示可以接受任意…

技術視界|構建理想仿真平臺,加速機器人智能化落地

在近期的 OpenLoong 線下技術分享會 上,松應科技聯合創始人張小波進行了精彩的演講,深入探討了仿真技術在機器人智能化發展中的關鍵作用。他結合行業趨勢,剖析了現有仿真平臺的挑戰,并描繪了未來理想仿真系統的設計理念與實現路徑…

uniapp-x 之useAttrs只讀

數據類型: useAttrs在web端拿到的是obj,app拿到的是map 是否可以修改內部元素: 否,只讀 這意味著你想這樣寫代碼將會無效 let attrsuseAttrs();console.log("attrs",attrs, attrs instanceof Map)//appif(attrs ins…

Python 正則表達式模塊 re

Python 正則表達式模塊 re flyfish 一、正則表達式基礎 1. 什么是正則表達式? 正則表達式(Regular Expression, RE)是一種用于匹配、查找和替換文本模式的工具,由普通字符(如字母、數字)和特殊字符&…

【商城實戰(33)】解鎖版本迭代與更新策略

【商城實戰】專欄重磅來襲!這是一份專為開發者與電商從業者打造的超詳細指南。從項目基礎搭建,運用 uniapp、Element Plus、SpringBoot 搭建商城框架,到用戶、商品、訂單等核心模塊開發,再到性能優化、安全加固、多端適配&#xf…

環境配置 | 5分鐘極簡Git入門:從零上手版本控制

你是否剛接觸Git?別擔心!這篇指南將用最簡單的步驟帶你掌握Git核心操作,快速開啟版本控制之旅!? 1.git在win10上的下載安裝 1.1.下載git 打開官方網站 Git - Downloadshttps://git-scm.com/downloads ? ?? 1.2.git安裝 …

計算機網絡——DNS

一、什么是DNS? DNS(Domain Name System,域名系統) 是互聯網的核心服務,負責將人類可讀的域名(如 www.baidu.com)轉換為機器可識別的 IP地址(如 14.119.104.254)。它像一…

SQLark 實戰 | 如何從Excel、csv、txt等外部文件進行數據導入

數據導入導出是應用開發者在平時開發中最常用的操作之一,SQLark 里提供了方便的圖形化界面來完成導入導出。本文先和大家分享如何從 Excel、csv、txt 等外部文件導入數據到數據庫表中。 👉 前往 SQLark 官網:www.sqlark.com 下載全功能免費版…