【Redis】Redis三種集群模式-主從、哨兵、集群各自架構的優點和缺點對比

文章目錄

  • 前言
  • 1. 單機模式
  • 2. 主從架構
  • 3. 哨兵
  • 4. 集群模式
  • 總結

前言

如果Redis的讀寫請求量很大,那么單個實例很有可能承擔不了這么大的請求量,如何提高Redis的性能呢?你也許已經想到了,可以部署多個副本節點,業務采用讀寫分離的方式,把讀請求分擔到多個副本節點上,提高訪問性能。要實現讀寫分離,就必須部署多個副本,每個副本需要實時同步主節點的數據。

1. 單機模式

Redis 單副本,采用單個 Redis 節點部署架構,沒有備用節點實時同步數據,不提供數據持久化和備份策略,適用于數據可靠性要求不高的純緩存業務場景。

  • 優點:

    • 架構簡單,部署方便。
    • 高性價比:緩存使用時無需備用節點(單實例可用性可以用 supervisor 或 crontab 保證),當然為了滿足業務的高可用性,也可以犧牲一個備用節點,但同時刻只有一個實例對外提供服務。
    • 高性能。
  • 缺點:

    • 不保證數據的可靠性。
    • 在緩存使用,進程重啟后,數據丟失,即使有備用的節點解決高可用性,但是仍然不能解決緩存預熱問題,因此不適用于數據可靠性要求高的業務。
    • 高性能受限于單核 CPU 的處理能力(Redis 是單線程機制),CPU 為主要瓶頸,所以適合操作命令簡單,排序、計算較少的場景。也可以考慮用 Memcached 替代。

2. 主從架構

主(master)和 從(slave)部署在不同的服務器上,當主節點服務器寫入數據時會同步到從節點的服務器上,一般主節點負責寫入數據,從節點負責讀取數據。

從節點設置只讀屬性,而主節點沒有只寫屬性,因此,主節點可讀可以寫

  • 優點:

    • 讀寫分離,提高效率
      主節點負責寫操作,從節點負責讀操作;如果寫少讀多場景,配置多個從節點的話,效率非常高
    • 數據熱備份,提供多個副本。
      從節點宕機,影響較小
  • 缺點:

    • 主節點故障,集群則無法進行工作,可用性比較低,從節點升主節點需要人工手動干預。

      因為只有主節點能進行寫操作,一旦主節點宕機,整個服務就無法使用。當然此時從節點仍可以進行讀操作,但是對于整個服務流程來說,是無法使用的。

    • Master的寫的壓力難以降低。

      如果寫操作比較多,那么只有一個主節點的話,無法分擔壓力。

    • 主節點存儲能力受到單擊限制。

      主節點只能有一個,因此單節點內存大小不會太大,因此存儲數據量受限。

    • 主從數據同步,可能產生部分的性能影響甚至同步風暴。

風暴問題,對于任何集群分布式來說都存在,要合理分布節點。

3. 哨兵

為了解決這兩個問題,在2.8版本之后redis正式提供了sentinel架構。
在這里插入圖片描述

在redis3.0以前的版本要實現集群一般是借助哨兵sentinel工具來監控master節點的狀態。

如果master節點異常,則會做主從切換,將某一臺slave作為master,哨兵的配置略微復雜,并且性能和高可用性等各方面表現一般。

  • 優點:

    • 對節點進行監控,來完成自動的故障發現與轉移
  • 缺點:

    • 特別是在主從切換的瞬間存在訪問瞬斷的情況,等待時間比較長,至少十來秒不可用。
    • 哨兵模式只有一個主節點對外提供服務,沒法支持很高的并發
    • 單個主節點內存也不宜設置得過大,否則會導致持久化文件過大,影響數據恢復或主從同步的效率。

與主從相比,哨兵僅解決了手動切換主從節點問題,至于其他的問題,基本上仍然存在。

哨兵的主要問題還是由于中心架構,僅存在一個master節點引起的,寫的效率太低。

4. 集群模式

Redis Cluster 是 3.0 版后推出的 Redis 分布式集群解決方案,主要解決 Redis 分布式方面的需求,比如,當遇到單機內存,并發和流量等瓶頸的時候,Redis Cluster 能起到很好的負載均衡的目的。

Redis Cluster 集群節點最小配置 6 個節點以上(3 主 3 從),其中主節點提供讀寫操作,從節點作為備用節點,不提供請求,只作為故障轉移使用。Redis Cluster 采用虛擬槽分區,所有的鍵根據哈希函數映射到 0~16383 個整數槽內,每個節點負責維護一部分槽以及槽所印映射的鍵值數據。

注意:集群模式下 從節點不提供讀寫,與主從模式不一樣。 總結一下經驗,分布式
場景下:集群模式一般從節點不參與讀寫,僅作為備用節點。而主從一般都要負責讀或寫,都要參與具體的工作。

  • 優點:

    • 無中心架構。

      即有多個master節點,不像哨兵模式下僅有一個。這樣寫的壓力就可以分散了;并且存儲量也可以擴展了,因為多個主節點都可以存儲一部分數據,總量要遠大于單主節點架構。
      在這里插入圖片描述

    • 數據按照 slot 存儲分布在多個節點,節點間數據共享,可動態調整數據分布。

    • 可擴展性:可線性擴展到 1000 多個節點,節點可動態添加或刪除。

    • 高可用性:部分節點不可用時,集群仍可用。通過增加 Slave 做 standby 數據副本,能夠 實現故障自動 failover,節點之間通過 gossip 協議交換狀態信息,用投票機制完成 Slave 到 Master 的角色提升。

當然,如果某個槽歸屬的小群內都不可用時,整個服務仍然是不可用的!通過cluster-require-full-coverageyes
控制該特性, 默認yes 即需要集群完整,方可對外提供服務,設置為no ,其他的小集群仍然可以對外提供服務。

  • 缺點:

    • 如果主節點A和它的從節點A1都宕機了,那么該集群就無法再提供服務了。

總結

本文主要介紹了 Redis 四種集群模式,以及優缺點,總結一下

  • 主從模式 可以實現讀寫分離,數據備份。但是并不是「高可用」的
  • 哨兵模式 可以看做是主從模式的「高可用」版本,其引入了 Sentinel 對整個 Redis 服務集群進行監控。但是由于只有一個主節點,因此仍然有寫入瓶頸。
  • Cluster 模式 不僅提供了高可用的手段,同時數據是分片保存在各個節點中的,可以支持高并發的寫入與讀取。當然實現也是其中最復雜的。

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

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

相關文章

Android系統-進程-Binder1-概述

目錄 引言: 一次拷貝 Binder一次通信過程 應用啟動中的binder交互 C/S模式: Binder COMMAND BWR數據結構: 引言: Android的binder是從openbinder發展過來的。包括了binder驅動,Native層,Java層。用…

光耦繼電器:實現電氣隔離的卓越選擇

光耦繼電器是一種常用的電子元件,用于實現電氣隔離和信號傳輸。在工業控制、自動化系統和電力電子等領域,光耦繼電器具有獨特的特點和優勢。本文將從可靠性、隔離性、響應速度和適應性等方面對光耦繼電器的特點進行概述。 光耦繼電器是一種典型的固態繼電…

Mysql內儲存JSON字符串,根據條件進行查詢(包含多層級復雜JSON查詢)

1.模糊查詢json類型字段 存儲的數據格式(字段名 people_json): {“name”: “zhangsan”, “age”: “13”, “gender”: “男”} 代碼如下(示例): select * from table_name where people_json->$.n…

部署工業物聯網可以選擇哪些通信方案?

部署工業物聯網有諸多意義,諸如提升生產效率,降低管理成本,保障生產品質穩定,應對長期從業勞動力變化趨勢等。針對不同行業、場景,工業物聯網需要選擇不同的通信方案,以達到成本和效益的最佳平衡。本篇就簡…

安全頭響應頭(三)?X-Content-Type-Options

一 X-Content-Type-Options響應頭 說明:先寫個框架,后續補充 思考:請求類型是 "style" 和 "script" 是什么意思? script標簽 style StyleSheet JavaScript MIME type 文件擴展和Content-Type的映射關系 場景: 一個…

Mybatis 源碼 ∞ :雜七雜八

文章目錄 一、前言二、TypeHandler三、KeyGenerator四、Plugin1 Interceptor2 org.apache.ibatis.plugin.Plugin3. 調用場景 五、Mybatis 嵌套映射 BUG1. 示例2. 原因3. 解決方案 六、discriminator 標簽七、其他1. RowBounds2. ResultHandler3. MapKey 一、前言 Mybatis 官網…

mysql主從復制搭建(一主一從)

提示:文章寫完后,目錄可以自動生成,如何生成可參考右邊的幫助文檔 文章目錄 前言MySQL復制過程分為三部: 一、準備工作二、配置>主庫Master三、配置>從庫SlaveSlave_IO_Running: YesSlave_SQL_Running: Yes 四、測試至此&am…

8 | 美國航班數據分析

"在現代快節奏的生活中,航空旅行已經成為人們出行的重要方式之一。然而,航班的準時性一直以來都是旅客和航空公司關注的焦點。無論是商務出差還是休閑度假,乘客們都希望能夠在既定的時間內安全、準時地到達目的地。而對于航空公司而言,準點運營不僅關乎乘客體驗,還涉…

TCP的相關性質

文章目錄 流量控制擁塞控制擁塞窗口 延遲應答捎帶應答面向字節流粘包問題TCP的異常 流量控制 由于接收端處理數據的速度是有限的,如果發送端發的太快,那么接收端的緩沖區就可能會滿。此時如果發送端還發數據,就會出現丟包現象,并…

輕量級自動化測試框架WebZ

一、什么是WebZ WebZ是我用Python寫的“關鍵字驅動”的自動化測試框架,基于WebDriver。 設計該框架的初衷是:用自動化測試讓測試人員從一些簡單卻重復的測試中解放出來。之所以用“關鍵字驅動”模式是因為我覺得這樣能讓測試人員(測試執行人員…

【Sklearn】基于線性判別法的數據分類預測(Excel可直接替換數據)

【Sklearn】基于線性判別法的數據分類預測(Excel可直接替換數據) 1.模型原理2.模型參數3.文件結構4.Excel數據5.下載地址6.完整代碼7.運行結果1.模型原理 線性判別分析(Linear Discriminant Analysis,簡稱LDA)是一種經典的模式識別和分類方法,它的目標是找到一個投影,將…

Linux系列講解 —— FTP協議的應用

簡單介紹一下FTP文件傳輸協議在linux系統中的應用。 目錄 0. 基本概念1. FTP Server1.1 安裝FTP Server1.2 FTP Server開啟和關閉1.3 查看FTP Server是否開啟1.4 FTP服務器配置 2. FTP Client2.1 lftp2.2 ftp2.3 sftp2.4 文件資源管理器集成的ftp和sftp 3. ftp常用命令 0. 基本…

IDE的下載和使用

IDE 文章目錄 IDEJETBRAIN JETBRAIN 官網下載對應的ide 激活方式 dxm的電腦已經把這個腳本下載下來了,腳本是macjihuo 以后就不用買了

Neo4j之SET基礎

在 Neo4j 中,SET 語句用于更新節點或關系的屬性。它允許你修改節點或關系的屬性值,可以單獨使用,也可以與其他查詢語句(如 MATCH、CREATE、MERGE 等)一起使用。以下是一些使用 SET 語句的常見例子,以及它們…

深入源碼分析kubernetes informer機制(四)DeltaFIFO

[閱讀指南] 這是該系列第四篇 基于kubernetes 1.27 stage版本 為了方便閱讀,后續所有代碼均省略了錯誤處理及與關注邏輯無關的部分。 文章目錄 client-go中的存儲結構DeltaFIFOdelta索引 keyqueue push操作delta push 去重 queue pop操作 總結 client-go中的存儲結構…

設計模式

本文主要介紹設計模式的主要設計原則和常用設計模式。 一、UML畫圖 1.類圖 2.時序圖 二、設計模式原則 1.單一職責原則 就是一個方法、一個類只做一件事; 2.開閉原則 就是軟件的設計應該對拓展開放,對修改關閉,這在java中體現最明顯的就…

什么是A股交易接口_(股票交易c接口)開發原理

A股交易接口是指用于與國內的證券交易所(上海證券交易所和深圳證券交易所)進行股票買賣交易的電子接口或軟件系統。A股交易接口是金融機構、券商以及個人投資者的必備掌握操作技能之一,它提供了實時的股票行情、交易下單、撤單、查詢賬戶信息…

基于Hadoop的表級監管

現狀 大數據平臺中,采用hadoop的方式存儲數據,hdfs本質上是文件系統,而文件系統對數據的監管能力有限,但是數據安全領域問題日漸凸顯,現目前,大數據平臺一般以分層結構進行授權,但是對于一線開發人員而言,是能夠接觸到整個大數據平臺中的所有表的,那么如何實現這樣一…

yum install/update排除特定/某些包方式

1 什么是 yum? yum 代表 “Yellowdog Updater, Modified”。Yum 是用于 rpm 系統的自動更新程序和包安裝/卸載器。 它在安裝包時自動解決依賴關系。 2 什么是 rpm? rpm 代表 “Red Hat Package Manager”,它是一款用于 Red Hat 系統的功能…

PB:庫管理函數

庫管理函數 1、LibraryCreate() 功 能:創建一個空的PowerBuilder應用庫,并可根據需要在創建應用庫的同時添加庫注解。 語 法:LibraryCreate ( libraryname{, comments } ) 參 數:libraryname:string類型,指定要創建應用庫的名稱,可以帶上路徑,不帶路徑時在當前目…