Redis集群 (三十九)

提示:文章寫完后,目錄可以自動生成,如何生成可參考右邊的幫助文檔

目錄

前言

一、Redis主從復制

1.1?概念

1.2 作用

1.3?缺點

1.4 流程

1.5 搭建

1.6 驗證

二、Reids哨兵模式

2.1?概念

2.2 作用

2.3 缺點

2.4?結構

2.5 搭建

2.6 驗證

三、Redis集群

3.1?概述

3.2 原理

3.3 架構細節

3.4 選舉過程

3.4 搭建

3.4.1 基礎搭建

3.4.2?構建集群



前言

? ? ? ?Redis集群是Redis數據庫的一個分布式解決方案,它允許將數據分布在多個Redis節點上以提高性能和可靠性。

? ? ? ?Redis集群使用分片的方式將數據分布在多個節點上。每個節點負責存儲和處理一部分數據。當進行數據讀寫操作時,客戶端會根據數據的哈希值找到對應的節點,并將操作發送給該節點進行處理。

? ? ? ?Redis集群還提供了自動的故障轉移和數據遷移功能。當一個節點出現故障時,集群會自動將該節點上的數據遷移到其他正常節點上,以保證數據的可用性。同時,集群還會自動選舉新的主節點來接管失效節點的工作。要使用Redis集群,需要至少3個Redis節點。每個節點都是一個獨立的Redis服務器實例,并且需要通過配置文件指定集群模式和節點的IP地址和端口號。

? ? ? ? Redis集群可以提供高可用性和性能擴展的解決方案,但也需要注意一些限制和注意事項,如無法支持事務、主節點數不能超過16384個等。


提示:以下是本篇文章正文內容,下面案例可供參考

一、Redis主從復制

1.1?概念

? ? ? ? ? ?Redis主從復制是指將一臺Redis服務器的數據,復制到其他的Redis服務器。前者稱為主節點(Master),后者稱為從節點(Slave);數據的復制是單向的,只能由主節點到從節點。

1.2 作用

? ? ? ? 數據冗余:主從復制實現了數據的熱備份,是持久化之外的一種數據冗余方式。
? ? ? ? 故障恢復:當主節點出現問題時,可以由從節點提供服務,實現快速的故障恢復;實際上是一種服務的冗余。
? ? ? ?負載均衡:在主從復制的基礎上,配合讀寫分離,可以由主節點提供寫服務,由從節點提供讀服務(即寫Redis數據時應用連接主節點,讀Redis數據時應用連接從節點),分擔服務器負載;尤其是在寫少讀多的場景下,通過多個從節點分擔讀負載,可以大大提高Redis服務器的并發量。
? ? ? ?高可用:除了上述作用以外,主從復制還是哨兵和集群能夠實施的基礎,因此說主從復制是Redis高可用的基礎。

1.3?缺點

? ? 故障恢復無法自動化;
?? ?寫操作無法負載均衡;
?? ?存儲能力受到單機的限制。

1.4 流程

? ? ?第一步:若啟動一個Slave機器進程,則它會向Master機器發送一個“sync command”命令,請求同步連接。
?? ?第二步:無論是第一次連接還是重新連接,Master機器都會啟動一個后臺進程,將數據快照保存到數據文件中(執行rdb操作),同時Master還會記錄修改數據的所有命令并緩存在數據文件中。?
?? ?第三步:后臺進程完成緩存操作之后,Maste機器就會向Slave機器發送數據文件,Slave端機器將數據文件保存到硬盤上,然后將其加載到內存中,接著Master機器就會將修改數據的所有操作一并發送給Slave端機器。若Slave出現故障導致宕機,則恢復正常后會自動重新連接。
?? ?第四步:Master機器收到Slave端機器的連接后,將其完整的數據文件發送給Slave端機器,如果Mater同時收到多個Slave發來的同步請求,則Master會在后臺啟動一個進程以保存數據文件,然后將其發送給所有的Slave端機器,確保所有的Slave端機器都正常。

1.5 搭建

? ? 主服務器:(IP:192.168.10.130)
?? ??? ?修改配置文件
?? ??? ??? ?bind ?0.0.0.0
?? ??? ??? ?port ?6379
?? ??? ??? ?protected-mode = no
?? ??? ??? ?daemonize = yes

?


?? ?從服務器:
?? ??? ?修改配置文件
?? ??? ??? ?bind ?0.0.0.0
?? ??? ??? ?port ?6380
?? ??? ??? ?protected-mode = no
?? ??? ??? ?daemonize = yes
?? ??? ??? ?slaveof 192.168.10.130 6379?

?

1.6 驗證

? ? 使用redis-cli命令行登錄redis服務器,輸入role指令查看狀態
?? ?在master節點上,錄入數據,在slave節點上查看到對應數據即可

主服務器

?在從服務登錄查看

二、Reids哨兵模式

2.1?概念

? ? ? ? ? Reids哨兵模式是一個分布式系統,用于對主從結構中的每臺服務器進行監控,當出現故障時通過投票機制選擇新的 Master 并將所有 Slave 連接到新的 Master。所以整個運行哨兵的集群的數量不得少于3個節點。
?? ?依托于主從模式

2.2 作用


?? ?監控:哨兵會不斷地檢查主節點和從節點是否運作正常。
?? ? 自動故障轉移:當主節點不能正常工作時,哨兵會開始自動故障轉移操作,它會將失效主節點的其中一個從節點升級為新的主節點,并讓其他從節點改為復制新的主節點。
?? ?通知(提醒):哨兵可以將故障轉移的結果發送給客戶端。

2.3 缺點


?? ?寫操作無法負載均衡
?? ?存儲能力受到單機的限制
?? ?哨兵無法對從節點進行自動故障轉移,在讀寫分離場景下,從節點故障會導致讀服務不可用,需要對從節點做額外的監控、切換操作。

2.4?結構

? ? 哨兵節點:哨兵系統由一個或多個哨兵節點組成,哨兵節點是特殊的redis節點,不存儲數據。
?? ?數據節點:主節點和從節點都是數據節點。

2.5 搭建

關閉保護模式
protected-mode no
Redis哨兵默認的監聽端口
port 26379

指定日志存放路徑
logfile "/var/log/sentinel.log"
指定數據庫存放路徑
dir "/var/lib/redis"
修改 指定該哨兵節點監控192.168.163.10:6379這個主節點,該主節點的名稱是mymaster,最后的2的含義與主節點的故障判定有關:至少需要2個哨兵節點同意,才能判定主節點故障并進行故障轉移
sentinel monitor mymaster 192.168.163.10 6379 2
判定服務器down掉的時間周期,默認30000毫秒(30秒)
sentinel down-after-milliseconds mymaster 30000
故障節點的最大超時時間為180000(180秒)
sentinel failover-timeout mymaster 180000

?? ?bind 0.0.0.0
?? ?port 26379
?? ?daemonize ?yes
?? ?sentinel monitor mymaster 192.168.115.160 6379 2
?? ?啟動
?? ??? ?redis-sentinel ?配置文件路徑

?bind 0.0.0.0
?? ?port 26379? 26380? 26381
?? ?daemonize ?yes
?? ?sentinel monitor mymaster 192.168.10.130?6379 2

2.6 驗證

? ? 可以查看日志文件(/var/log/redis/sentinel.log)

? ? 停止master后,slave會通過選舉產生新的master
?? ?哨兵配置文件會自動修改監聽的master節點地址為新的master節點地址

?以前停掉的master重新啟動不會更改當前哨兵模式選出的master?

?

三、Redis集群

3.1?概述

? ? ? ? Redis3.0版本以上開始支持cluster,采用的是hashslot(hash槽),可以將多個Redis實例整合在一起,形成一個群集,也就是將數據分散到群集的多臺機器上。

3.2 原理


?? ?Redis Cluster是一個無中心的結構,每個節點都保存數據和整個群集的狀態。每個節點都會保存其他節點的信息,知道其他節點所負責的槽,并且會與其他節點定時發送心跳信息,能夠及時感知群集中異常的節點。

? ?(直接執行這個命令;如果鍵所在的槽并沒有指派給當前節點,那么節點會向客戶端返回一個MOVED錯誤,指引客戶端轉向(redirect)正確的節點,并再次發送之前想要執行的命令.
群集角色有Master和Slave.Master之間分配slots,一共16384個slot,Slave向它指定的Master 同步數據,實現備份。當其中的一個Master無法提供服務時,該Master的Slave將提升為Mester,以保證群集間 slot 的完整性,當其中的某一個Master和它的Slave都失效,導致了slot不完整,群集失效,這時就需要人工去處理了。
群集搭建好后,群集中的每個節點都會定期地向其他節點發送PING消息,如果接收PONG消息的節點沒有在規定的時間內返回PONG 消息,那么發送PNG消息的節點就會將其標記為疑似下線(probable fail,PFAL)。各個節點會通過互相發送消息的方式來交換群集中各個節點的狀態信息。如果在一個群集里面,半數以上的主節點都將某個主節點×報告為疑似下線,那么這個主節點×將被標記為已下線(FAL),同時會向群集廣播一條關于主節點×的FAL消息,所有收到這條FAL消息的節點都會立即將主節點×標記為已下線。
當需要減少或者增加群集中的機器時,我們需要將已經指派給某個節點(源節點)的槽改為指派給另一個節點(目標節點),并且將相關槽所屬的鍵值對從源節點移動到目標節點。
Redis群集的重新分片操作是由Redis的群集管理軟件redis—trib負責執行的,不支持自動的分片,而且需要自己計算從哪些節點上遷移多少 Slot。在重新分片的過程中,群集不需要下線,并且源節點和目標節點都可以繼續處理命令請求。)

3.3 架構細節


?? ?(1)所有的redis節點彼此互聯(PING-PONG機制),內部使用二進制協議優化傳輸速度和帶寬。
?? ?(2)節點的失效(fail)在群集中超過半數的主(master)節點檢測失效時才生效。
?? ?(3)客戶端與 redis 節點直連,不需要中間代理(proxy)層,客戶端不需要連接群集所有節點,連接群集中任何一個可用節點即可。
?? ?(4)redis-cluster 把所有的物理節點映射到【0-16383】slot 上,cluster 負責維護 node<->slot<->key。

3.4 選舉過程


?? ?選舉過程是群集中所有master參與,如果半數以上master節點與當前 master 節點通信超時(cluster—node—timeout),認為當前 master 節點掛掉。以下兩種情況為整個群集不可用(cluster_state:fail),當群集不可用時,所有對群集的操作都不可用,收到((error)CLUSTEFDOWN The cluster is down)錯誤。
?? ?如果群集任意 master掛掉,且當前 master 沒有 slave,則群集進入 fail狀態,也可以理解成群集的slot映射【0 ~16383】不完整時進入fail狀態。
?? ?如果群集中超過半數的master掛掉,無論是否有slave,群集都進入 fail狀態。
?? ?默認情況下,每個群集的節點都使用兩個TCP端口.一個是6379,一個是16379;6379服務于客戶端的連接,16379 用于群集總線,即使用二進制協議的節點到節點通信通道。節點使用群集總線進行故障檢測、配置更新、故障轉移授權等。如果開啟了防火墻,需要開放這兩個端口。

3.4 搭建

3.4.1 基礎搭建

準備3臺虛擬機,分別設置IP為 192.168.156.3? ?192.168.156.4? ?192.168.156.5?

1. 安裝epel-release源(三臺都裝)

? ? 安裝 redis

yum install -y epel-release

yum install -y redis

2.關閉防火墻、修改寬容模式

3. 創建目錄、配置文件

4.? 進入配置文件,修改配置項 (兩個)

?vim /etc/redis/redis1_6379.conf

?vim /etc/redis/redis2_6380.conf?5. 創建目錄redis1_6379 和 redis2_6380?

?6.? 啟動?7. 查看是否啟動

此時已經啟動

?其他兩臺同樣的操作................

3.4.2?構建集群

1. 進入配置文件修改配置項(三臺都要改)

?啟動

?2. 構建集群

以下操作需要登錄某個節點的redis數據庫

redis-cli -h 192.168.156.3(進入數據庫)

將其他節點加入集群
?? ? CLUSTER MEET 192.168.156.3?6380
?? ? CLUSTER MEET 192.168.156.4?6379
?? ? CLUSTER MEET 192.168.156.4?6380
?? ? CLUSTER MEET 192.168.156.5?6379
?? ? CLUSTER MEET 192.168.156.5?6380

?查看

?分配slot
?? ?redis-cli -p 6379 cluster addslots {0..5461}
?? ?redis-cli -p 6380?cluster addslots {5462..10922}
?? ?redis-cli -p 6380?cluster addslots {10923..16383}

?建立主從關系
?? ?redis-cli -p 6379?cluster replicate b356143b3ca4f07cceb30634618339ed107f793c
?? ?redis-cli -p 6380cluster replicate 5cca472f9816273103769adb32b3a1b562f42655
?? ?redis-cli -p 6380?cluster replicate 6d7219fd6db32e6014955edbeda26af6b59b9078

?測試

查看命令
?? ?cluster nodes
?? ??? ?查看所有群集節點
?? ?cluster info
?? ??? ?查看群集狀態

重置集群命令(每個節都要重置)
?? ?cluster reset
?? ?數據的key不能相同


???總結

Redis集群具有高可用性、數據分片、擴展性、容錯性、簡化管理、高性能,總的來說,Redis集群通過提供高可用性、水平擴展、容錯性和簡化管理等優勢,成為了一個理想的分布式解決方案,適用于大規模數據存儲和高并發訪問的場景。

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

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

相關文章

confluent-kafka 和kafka-python操作kafka,并封裝成一個類

為了向Kafka集群生產和消費消息&#xff0c;我們可以使用confluent-kafka庫&#xff0c;它是Confluent為Python提供的官方Kafka客戶端。以下是一個簡化的示例&#xff0c;展示如何將Kafka的生產者和消費者操作封裝到一個類中&#xff1a; 首先&#xff0c;確保你已經安裝了所需…

解決nvm安裝后,node生效但npm無效

問題描述 nvm安裝后&#xff0c;node生效但npm無效 清除緩存 C:\Users\cc\AppData\Roaming cc是我的用戶名改成你自己的就行刪除 npm和npm-cache

form表單構造http請求的寫法

from是html的一個標簽&#xff0c;from是html后早http請求的一種方式&#xff0c;它和input標簽密切配合。 from有兩個基本屬性action和method&#xff0c;action就是http請求url中的路徑部分。method就是構造的http請求的方法。 form和input標簽配合構造鍵值對&#xff0c;鍵值…

批量將excel文件合并

要批量合并多個Excel文件&#xff0c;可以按照以下步驟進行操作&#xff1a; 1. 導入所需的Python庫&#xff1a;首先&#xff0c;您需要導入pandas庫來處理Excel文件。 import pandas as pd 2. 定義文件路徑和輸出文件名稱&#xff1a; input_folder "your_input_fo…

如何在Vue中實現模板渲染優化?什么是Vue的雙向數據綁定原理?

1、如何在Vue中實現模板渲染優化&#xff1f; 在Vue中實現模板渲染優化&#xff0c;有以下幾個方法&#xff1a; 使用計算屬性&#xff08;computed properties&#xff09;代替方法&#xff08;methods&#xff09;&#xff1a;計算屬性會在首次渲染時進行計算&#xff0c;并…

數據結構筆記--二叉樹經典高頻題

1--二叉樹的最近公共祖先 主要思路&#xff1a; 最近祖先只有兩種情況&#xff1a;① 自底向上&#xff0c;當兩個目的結點分別在當前結點的左右子樹時&#xff0c;當前結點為兩個目的結點的最近祖先&#xff1b;② 最近祖先與其中一個目的結點相同&#xff0c;則另一個目的結點…

Python-OpenCV中的圖像處理-形態學轉換

Python-OpenCV中的圖像處理-形態學轉換 形態學轉換腐蝕膨脹開運算閉運算形態學梯度禮帽黑帽形態學操作之間的關系 形態學代碼例程 形態學轉換 形態學操作:腐蝕&#xff0c;膨脹&#xff0c;開運算&#xff0c;閉運算&#xff0c;形態學梯度&#xff0c;禮帽&#xff0c;黑帽等…

企業微信 企業內部開發 學習筆記

官方文檔 文檔 術語介紹 引入pom <dependency><groupId>com.github.binarywang</groupId><artifactId>wx-java-cp-spring-boot-starter</artifactId><version>4.5.3.B</version></dependency>核心代碼 推送消息 final WxCp…

面試攻略,Java 基礎面試 100 問(十一)

抽象類&#xff08;abstract class&#xff09;和接口&#xff08;interface&#xff09;有什么異同? 抽象類和接口都不能夠實例化&#xff0c;但可以定義抽象類和接口類型的引用。一個類如果繼承了某個抽象類或者實現了某個接口都需要對其中的抽象方法全部進行實現&#xff…

SpringBoot 后端項目利用 Minio 實現分片上傳、斷點續傳

一、準備工作 安裝 Minio 服務后&#xff0c;在 SpringBoot 項目中添加依賴&#xff1a; <!-- MinIO --><dependency><groupId>io.minio</groupId><artifactId>minio</artifactId><version>8.2.1</version></dependency&g…

【js】日期、時間正則匹配

1、日期的正則表達式 格式&#xff1a;2023-08-11 var reg /^[1-9]\d{3}-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])$/; var regExp new RegExp(reg); if(!regExp.test(value)){alert("日期格式不正確");return; }2、時間的正則表達式 格式&#xff1a;23:00:00…

英碼國產高配邊緣計算盒子上市!搭載TPU處理器BM1684X,適配麒麟系統,支持OTA升級!

隨著人工智能技術不斷深入實際應用場景&#xff0c;加速各行各業場景應用落地&#xff0c;邊緣計算的重要性越發凸顯。相較于傳統的集中式云計算&#xff0c;邊緣計算在距離數據源或用戶更近的地方提供計算能力&#xff0c;不僅滿足了對實時性要求較高的場景應用需求&#xff0…

操作系統結構

操作系統結構 分層法模塊化宏內核微內核微內核的基本概念微內核的基本功能 內核 分層法 分層法是將操作系統分為若干層&#xff0c;最底層為硬件&#xff0c;最高層為用戶接口&#xff0c;每層只能調用緊鄰它的底層的功能和服務&#xff08;單向依賴&#xff09; 分層法的優點…

如何通過CSS選擇器選擇一個元素的子元素?如何選擇第一個子元素和最后一個子元素?

聚沙成塔每天進步一點點 ? 專欄簡介? 選擇一個元素的子元素? 選擇第一個子元素和最后一個子元素? 注意事項? 寫在最后 ? 專欄簡介 前端入門之旅&#xff1a;探索Web開發的奇妙世界 記得點擊上方或者右側鏈接訂閱本專欄哦 幾何帶你啟航前端之旅 歡迎來到前端入門之旅&…

線程池,以及線程池的實現以及面試常問的問題,工廠模式,常見的鎖策略(面試常考,要了解,不行就背)

一、&#x1f49b; 線程池的基本介紹 內存池&#xff0c;進程池&#xff0c;連接池&#xff0c;常量池&#xff0c;這些池子概念上都是一樣的&#xff5e;&#xff5e; 如果我們需要頻繁的創建銷毀線程&#xff0c;此時創建銷毀的成本就不能忽視了&#xff0c;因此就可以使用線…

Java中使用instanceof判斷對象類型

記錄&#xff1a;470 場景&#xff1a;Java中使用instanceof判斷對象類型。例如在解析JSON字符串轉換為指定類型時&#xff0c;先判斷類型&#xff0c;再定向轉換。在List<Object>中遍歷Object時&#xff0c;先判斷類型&#xff0c;再定向轉換。 版本&#xff1a;JDK 1…

Redis系列(一):深入了解Redis數據類型和底層數據結構

Redis有以下幾種常用的數據類型&#xff1a; redis數據是如何組織的 為了實現從鍵到值的快速訪問&#xff0c;Redis 使用了一個哈希表來保存所有鍵值對。 Redis全局哈希表&#xff08;Global Hash Table&#xff09;是指在Redis數據庫內部用于存儲所有鍵值對的主要數據結構。…

安卓13不再支持PPTP怎么辦?新的連接解決方案分享

隨著Android 13的發布&#xff0c;我們迎來了一個令人興奮的新品時刻。然而&#xff0c;對于一些用戶而言&#xff0c;這也意味著必須面對一個重要的問題&#xff1a;Android 13不再支持PPTP協議。如果你是一個習慣使用PPTP協議來連接換地址的用戶&#xff0c;那么你可能需要重…

C++ 泛型編程:函數模板

文章目錄 前言一、什么是泛型編程二、函數模板三、函數模板的使用四、多參數函數模板五&#xff0c;示例代碼&#xff1a;總結 前言 當需要編寫通用的代碼以處理不同類型的數據時&#xff0c;C 中的函數模板是一個很有用的工具。函數模板允許我們編寫一個通用的函數定義&#…

Vue day02 Computed和Watch

1.事件綁定 可以用 v-on 指令監聽DOM 事件&#xff0c;并在觸發時運行一些 JavaScript 代碼。v-on 還可以接收一個需要調用的方法名稱。 <button v-on:click"handler">good</button> methods: { handler: function (event) { if (event) { alert(event.t…