色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
电子发烧友
开通电子发烧友VIP会员 尊享10大特权
海量资料免费下载
精品直播免费看
优质内容免费畅学
课程9折专享价
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

redis三種集群方案詳解

馬哥Linux運維 ? 來源:CSDN技術社區 ? 2025-03-31 10:46 ? 次閱讀

1. redis集群方案有哪些

在Redis中提供的集群方案總共有三種(一般一個redis節點不超過10G內存)

主從復制 / 主從模式 解決高并發問題

哨兵模式 解決高可用問題

分片集群

2. 主從復制(主從數據同步)

2.1 主從復制定義

主從復制,是指將一臺Redis服務器的數據,復制到其他的Redis服務器。

前者稱為主節點(Master),后者稱為從節點(Slave);數據的復制是單向的,只能由主節點到從節點。

默認情況下,每臺Redis服務器都是主節點;且一個主節點可以有多個從節點(或沒有從節點),但一個從節點只能有一個主節點

Redis主從復制服務器架構圖如下:

a3df7a48-0aef-11f0-9310-92fbcf53809c.png

2.2 如何搭建主從架構

主從模式是其中最簡單的模式,這種模式中,Redis被分為主節點(master)和從節點(slave/replica) 。主節點可以進行讀、寫操作,而從節點一般只能進行讀操作,如果在從節點上進行寫操作,Redis會報錯。主節點和從節點會進行數據同步,使節點上的數據保持一致。

a4004bb0-0aef-11f0-9310-92fbcf53809c.png

假設我們現在有3臺計算機A、B、C作為Redis節點,我們要用它們來搭建主從架構,把A作為master(主節點)。

① 基本配置:首先,我們要在這3個節點上都安裝。為保證這3個節點的Redis狀態是一樣的,因此把A的Redis配置文件復制并覆蓋另外兩個節點的Redis配置文件。然后啟動3個節點上的Redis。
② 開啟主從關系:要配置主從可以使用replicaof或者slaveof命令,這兩條命令是一樣的,只是Redis在5.0版本之后把從節點的名字從slave改成了replica。
有兩種方式可以進行配置:臨時和永久。

永久配置:在從節點的Redis配置文件(通常是redis.conf)中添加一行配置:slaveof 。其中,后兩個參數分別是主節點的ip地址和Redis端口號。
臨時配置:使用redis-cli客戶端連接到redis服務,執行slaveof命令(重啟后失效):slaveof

2.3主從復制同步原理

2.3.1 全量同步

a42195f4-0aef-11f0-9310-92fbcf53809c.png

在6步驟中,master節點會進行一次bgsave操作生成RDB文件,再把這個RDB文件發給slave節點。我們知道,在bgsave期間,Redis仍然能進行服務,如果在這段時間內,master執行了寫操作,那么主從節點之間的數據就會產生差異。因此,master節點會把bgsave執行期間的所有命令都記錄到repl_backlog(上圖把名字寫錯了)文件中,然后在發送RDB文件之后,把repl_backlog中的命令發送給從節點(圖中的10操作)。從節點會執行這些命令,從而保證主從間的數據是一致的。

Q:一個問題,master是如何得知slave節點是第一次與它建立連接的呢?
A:關于這個問題,首先我們要了解兩個概念Replication Id和offset:

replid和offset

**Replication Id:**簡稱replid,是數據集的標記,id一致則說明是同一數據集。每一個master都有唯一的replid,slave則會繼承master節點的replid

**offset:**偏移量,隨著記錄在repl_baklog中的數據增多而逐漸增大。slave完成同步時也會記錄當前同步的offset。如果slave的offset小于master的offset,說明slave數據落后于master,需要更新。
slave要進行數據同步時,需要告訴master自己的Replication Id和offset。
由于slave原本也是一個master,因此它也有自己的Replication Id和offset,并且和master的不一樣。

master判斷發現slave發送來的Replication Id與自己的不一致,說明這是一個全新的slave,就知道要做全量同步了。此外,master會將自己的Replication Id和offset都發送給這個slave,因此從,經過第一次全量同步之后,slave的Replication Id就和master的一樣了。

2.3.2 增量同步

通過bgsave生成RDB是一個比較消耗性能的操作。因此除了第一次做全量同步,其它大多數時候slave與master都是做增量同步。
增量同步就是只更新slave與master存在差異的部分數據(與offset有關了)。

a437ca36-0aef-11f0-9310-92fbcf53809c.png

2.4 主從復制優缺點

優點:解決了系統的高并發讀的問題。
缺點:無法保證系統的高可用,所以哨兵[2]模式出現了。

3. 哨兵模式

3.1 哨兵模式的作用

1、監控

2、自動故障恢復

3、通知redis客戶端

Sentinel在本質上是一個獨立的進程。Sentinel的作用如下:

監控:Sentinel 會不斷檢查您的master和slave是否按預期工作。

自動故障恢復:如果master故障,Sentinel會將一個slave提升為master。當故障實例恢復后也以新的master為主。

通知:Sentinel充當Redis客戶端的服務發現來源,當集群發生故障轉移時,會將最新信息推送給 Redis的客戶端。

a4545f48-0aef-11f0-9310-92fbcf53809c.png

3.2 哨兵的監控(心跳機制、選主規則)

3.2.1**Sentinel是如何進行監控的(**心跳機制)

Sentinel基于心跳機制監測服務狀態,每隔1秒向集群的每個實例發送ping命令:

主觀下線:如果某sentinel節點發現某實例未在規定時間響應,則認為該實例主觀下線。

客觀下線:若超過指定數量(quorum)的sentinel都認為該實例主觀下線,則該實例客觀下線。quorum值最好超過Sentinel實例數量的一半。

3.2.2選主規則

一旦發現主節點客觀下線了。哨兵會推舉新的主節點,選主規則如下:

判斷主與從節點斷開時間長短,如超過指定值就排除該從節點
然后判斷從節點的slave-priority值,越小優先級越高
如果slave-prority一樣,則判斷slave節點的offset值,越大(說明從節點數據與主節點越相近) 優先級越高
最后是判斷slave節點的運行id大小,越小優先級越高。

a462f6c0-0aef-11f0-9310-92fbcf53809c.png

3.3 集群(哨兵模式)腦裂

如果此時原本的主節點(暫時稱為A)因為網絡問題,使得主從節點處在不同的網絡分區,哨兵監測不到主節點(沒有回應心跳),那么哨兵便會進行選舉出一個新的主節點(暫時稱為B),這樣就存在了兩個主節點,像是大腦分兩列了一樣。等A節點網絡恢復之后才會由主節點降為從節點。這個過程稱為腦裂。

當然如果是哨兵監測不到從節點,則會去除這個從節點

3.3.1 腦裂產生的流程

a47a87cc-0aef-11f0-9310-92fbcf53809c.png

上圖是一個正常情況下的哨兵模式,但是由于網絡問題,沒有回應心跳,那么哨兵便會進行選舉出一個新的主節點(暫時稱為B),這樣就存在了兩個主節點,像是大腦分兩列了一樣。如下圖:

a4989dc0-0aef-11f0-9310-92fbcf53809c.png

就這樣上圖就存在了兩個主節點,像是大腦分兩列了一樣,且此時客戶端還是連接的第一個master主節點,并繼續寫數據,等到網絡恢復后第一個master會自動把自己變為從節點(我們暫時叫從節點A)如下圖:

從節點A向主節點同步數據時,由于發現數據不一致,就會刪除自己原來的數據,進行同步,造成數據丟失的問題

a4a93d2e-0aef-11f0-9310-92fbcf53809c.png

3.3.2 集群(哨兵模式)腦裂解決方案

解決方案有兩種,對應著redis的兩個配置參數:

1. min-replicas-to-write 1 表示最少的slave節點為1個
2. min-replicas-max-lag 5 表示數據復制和同步的延遲不能超過5秒

如果我們選了第一種解決方案,那么當哨兵聯系不上A節點時,因為A節點沒有slave了,此時數據過來,A節點會拒絕被寫入數據,那么發送數據的服務方就會意識到數據沒有正常發送,之后會采取相應的數據重傳之類的解決方案。

如果我們選了第二種解決方案,那么就相當于限制了一開始A節點的網絡情況,發現網絡情況不好,就拒絕被寫入數據。

其實就是分別針對腦裂時的2個特點:A節點(第一個主節點)網絡有問題,和因為網絡問題導致的和從節點、哨兵斷開聯系而進行的情況判斷,如果發現符合這兩個特點之一,那么就拒絕被寫入數據,防止后來數據丟失。

4.分片集群

4.1 分片集群結構

a4ba70a8-0aef-11f0-9310-92fbcf53809c.png

它的結構特點為:

集群中有多個master,每個master保存不同數據,且每個master都可以有多個slave節點。這樣就解決了海量數據存儲,高并發讀寫的問題。相當于把主從模式概括進來了。

不再需要哨兵,直接master之間通過ping監測彼此健康狀態。只要超過一定數量的master節點認為某個master節點宕機了,那么那個節點就客觀下線了。相當于變形的哨兵模式。

客戶端請求可以訪問集群任意節點,經過一定的路由規則,最終都會被轉發到正確節點。

4.2 路由規則

Redis 分片集群引入了哈希槽的概念,Redis 集群[3]有 16384 個哈希槽,每個 key通過 CRC16 校驗后對 16384 取模來決定放置哪個槽,集群的每個節點負責一部分 hash 槽。這樣能保證客戶端請求不沖突地正確轉發到redis的某個master節點上。

a4d5b7fa-0aef-11f0-9310-92fbcf53809c.png

4.3 分片集群優缺點

優點:解決了系統的海量數據存儲、高可用、高并發讀寫的問題。
缺點:集群維護很麻煩,而且集群之間的通信和心跳檢測消耗大量的網絡帶寬,無法使用lua腳本和事務。

5. 相關面試題

5.1 Redis集群有哪些方案?

在Redis中提供的集群方案總共有三種:

主從復制、

哨兵模式、

Redis分片集群

5.2 介紹一下主從同步

單節點Redis的并發能力是有上限的,要進一步提高Redis的并發能力,可以搭建主從集群,實現讀寫分離。一般都是一主多從,主節點負責寫數據,從節點負責讀數據,主節點寫入數據之后,需要把數據同步到從節點中。

5.3 說一下主從同步數據的流程

a4ef9a80-0aef-11f0-9310-92fbcf53809c.png

主從同步分為了兩個階段,一個是全量同步,一個是增量同步。

全量同步是指從節點第一次與主節點建立連接的時候使用全量同步,流程是這樣的:

**第一:**從節點請求主節點同步數據,其中從節點會攜帶自己的replication id和offset偏移量。

**第二:**主節點判斷是否是第一次請求,主要判斷的依據就是,主節點與從節點是否是同一個replication id,如果不是,就說明是第一次同步,那主節點就會把自己的replication id和offset發送給從節點,讓從節點與主節點的信息保持一致。

**第三:**在同時主節點會執行bgsave,生成rdb文件后,發送給從節點去執行,從節點先把自己的數據清空,然后執行主節點發送過來的rdb文件,這樣就保持了一致。

當然,如果在rdb生成執行期間,依然有請求到了主節點,而主節點會以命令的方式記錄到緩沖區,緩沖區是一個日志文件(repl_backlog),最后把這個日志文件發送給從節點,這樣就能保證主節點與從節點完全一致了,后期再同步數據的時候,都是依賴于這個日志文件,這個就是全量同步

增量同步指的是,當從節點服務重啟之后,數據就不一致了,所以這個時候,從節點會請求主節點同步數據,主節點還是判斷不是第一次請求,不是第一次就獲取從節點的offset值,然后主節點從命令日志中獲取offset值之后的數據,發送給從節點進行數據同步。

a5014adc-0aef-11f0-9310-92fbcf53809c.png

5.4 怎么保證Redis的高并發、高可用

答:使用哨兵模式搭建redis集群

詳細回答:

首先可以搭建主從集群,再加上使用redis中的哨兵模式,哨兵模式可以實現主從集群的自動故障恢復,里面就包含了對主從服務的監控、自動故障恢復、通知;如果master故障,Sentinel會將一個slave提升為master。當故障實例恢復后也以新的master為主;同時Sentinel也充當Redis客戶端的服務發現來源,當集群發生故障轉移時,會將最新信息推送給Redis的客戶端,所以一般項目都會采用哨兵的模式來保證redis的高并發高可用。

5.5 你使用redis是單點還是集群,哪種集群

答:主從(1主1從)+哨兵就可以了。單節點不超過10G內存,如果Redis內存不足則可以給不同服務分配獨立的Redis主從節點

詳細回答:

候選人:我當時使用的是主從(1主1從)加哨兵。一般單節點不超過10G內存,如果Redis內存不足則可以給不同服務分配獨立的Redis主從節點。盡量不做分片集群。因為集群維護起來比較麻煩,并且集群之間的心跳檢測和數據通信會消耗大量的網絡帶寬,也沒有辦法使用lua腳本和事務

5.6 redis集群腦裂,該怎么解決呢?

集群腦裂是由于主節點和從節點和sentinel處于不同的網絡分區,使得sentinel沒有能夠心跳感知到主節點,所以通過選舉的方式提升了一個從節點為主,這樣就存在了兩個master,就像大腦分裂了一樣,這樣會導致客戶端還在老的主節點那里寫入數據,新節點無法同步數據,當網絡恢復后,Sentinel會將老的主節點降為從節點,這時再從新master同步數據,就會導致數據丟失

redis集群腦裂問題,在項目中很少見,不過是這樣解決的

**解決:**我們可以修改redis的配置,可以設置最少的從節點數量以及縮短主從數據同步的延遲時間不能超過5秒,達不到要求就拒絕請求,就可以避免大量的數據丟失

(如果這里看不懂請重新看 3.3.2)

a51c6d76-0aef-11f0-9310-92fbcf53809c.png

a53e2b32-0aef-11f0-9310-92fbcf53809c.png

5.7 redis的分片集群有什么作用

分片集群主要解決的是,海量數據存儲的問題,集群中有多個master,每個master保存不同數據,并且還可以給每個master設置多個slave節點,就可以繼續增大集群的高并發能力。同時每個master之間通過ping監測彼此健康狀態,就類似于哨兵模式了。當客戶端請求可以訪問集群任意節點,最終都會被轉發到正確節點

5.8 Redis分片集群中數據是怎么存儲和讀取的?

在redis集群中是這樣的

Redis 集群引入了哈希槽的概念,有 16384 個哈希槽,集群中每個主節點綁定了一定范圍的哈希槽范圍, key通過 CRC16 校驗后對 16384 取模來決定放置哪個槽,通過槽找到對應的節點進行存儲。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 服務器
    +關注

    關注

    12

    文章

    9513

    瀏覽量

    86709
  • 內存
    +關注

    關注

    8

    文章

    3086

    瀏覽量

    74727
  • 集群
    +關注

    關注

    0

    文章

    96

    瀏覽量

    17299
  • Redis
    +關注

    關注

    0

    文章

    381

    瀏覽量

    11122

原文標題:redis三種集群方案詳解(主從復制、哨兵模式、分片集群)

文章出處:【微信號:magedu-Linux,微信公眾號:馬哥Linux運維】歡迎添加關注!文章轉載請注明出處。

收藏 0人收藏

    評論

    相關推薦

    redis集群環境安裝及配置

    redis集群主從配置
    發表于 03-08 09:59

    redis集群的兩備份方式

    redis集群 主從同步 備份
    發表于 04-17 13:30

    Redis-cluster在線集群安裝

    Redis-cluster之在線搭建詳解
    發表于 06-06 14:52

    3分鐘搭建Redis Cluster集群

    Redis Cluster集群快速搭建
    發表于 06-12 14:58

    redis集群的如何部署

    redis集群的部署(偽分布式)
    發表于 05-29 17:13

    啟動Redis三種方法

    Redis筆記(1)——安裝、卸載、三種方法啟動RedisRedis命令使用(干貨十足),Redis兩種方法設置密碼,時間復雜度(更完善哦
    發表于 06-08 16:09

    Redis集群相關問題的解決

    Redis 集群相關問題
    發表于 06-11 10:09

    Docker部署Redis服務器集群的方法

    Docker部署Redis服務器集群
    發表于 06-13 09:12

    Redis實現限流的三種方式分享

    當然,限流有許多種實現的方式,Redis具有很強大的功能,我用Redis實踐了三種的實現方式,可以較為簡單的實現其方式。
    的頭像 發表于 02-22 09:52 ?1199次閱讀

    Redis的主從、哨兵、Redis Cluster集群

    ? 前言 今天跟小伙伴們一起學習Redis的主從、哨兵、Redis Cluster集群Redis主從 Redis哨兵
    的頭像 發表于 06-12 14:58 ?958次閱讀
    <b class='flag-5'>Redis</b>的主從、哨兵、<b class='flag-5'>Redis</b> Cluster<b class='flag-5'>集群</b>

    redis集群狀態查看命令

    Redis集群是一高可用性的分布式架構,可以通過多個節點實現數據的復制和負載均衡。為了維護集群的穩定性和可靠性,管理員需要監控和查看集群
    的頭像 發表于 12-04 10:44 ?1532次閱讀

    redis集群中的hash一致性算法的理解

    Redis集群是一為了增強Redis的可擴展性和高可用性而設計的集群方案。在
    的頭像 發表于 12-04 10:45 ?861次閱讀

    redis集群性能測試工具有哪些

    Redis是一高性能的內存鍵值存儲系統,它被廣泛應用于各種互聯網應用和大規模的數據存儲中。為了評估Redis在不同場景下的性能,我們需要使用一些性能測試工具來對Redis
    的頭像 發表于 12-04 11:36 ?961次閱讀

    redis查看集群狀態命令

    Redis 是一個開源的、內存中的數據結構存儲系統,提供了一系列命令來管理和操作數據。在 Redis 中,集群是一個由多個 Redis 實例組成的分布式系統,用于提高數據的可用性和性能
    的頭像 發表于 12-04 11:39 ?1362次閱讀

    性能與可靠性并重,Flexus X 實例助力 Redis 集群高效運行

    能,確保您的業務在海量數據面前依然游刃有余。828 華為云企業上云節, 華為云 Flexus X 實例 攜手 Redis 集群解決方案
    的頭像 發表于 01-07 17:21 ?278次閱讀
    性能與可靠性并重,Flexus X 實例助力 <b class='flag-5'>Redis</b> <b class='flag-5'>三</b>主<b class='flag-5'>三</b>從<b class='flag-5'>集群</b>高效運行
    主站蜘蛛池模板: 中文字幕AV亚洲精品影视 | 男女无遮挡吃奶gift动态图 | 欧美日韩高清一区 | 小小水蜜桃视频高清在线播放 | 强奸美女老师 | videos gratis欧美另类 | 国产曰批试看免费视频播放免费 | 久久久久国产 | 国产人妻人伦精品836700 | 成人小视频在线免费观看 | 国产精品人妻一区免费看8C0M | 翁公咬着小娇乳H边走边欢A | 无人区乱码1区2区3区网站 | 伊人久久精品线影院 | 人妻少妇偷人精品无码洋洋AV | 国产精品日本无码久久一老A | 久久www免费人成_看片高清 | 亚洲欧洲日韩天堂无吗 | 亚洲精品久久久午夜福利电影网 | 亚洲精品国产精品麻豆99 | 88福利视频 | 国产亚洲精品久久久久久禁果TV | 一区二区三区国产亚洲网站 | 三级网站午夜三级 | 混乱家庭电影完整版在线看 | 日日摸夜添夜夜夜添高潮 | 欧美最猛黑人AAAAA片 | 亚洲中文在线偷拍 | 国产 在线 亚洲 欧美 动漫 | 免费国产久久啪在线 | 久草色视频 | 日本一区精品久久久久影院 | 国产产乱码一二三区别免费 | 8090碰成年女人免费碰碰尤物 | 护士日本xx厕所 | 全肉高H短篇合集 | 亚洲精品天堂无码中文字幕影院 | 国产成人理在线观看视频 | 中文字幕日本久久2019 | 白洁在线观看 | 国产网红主播精品福利大秀专区 |

    電子發燒友

    中國電子工程師最喜歡的網站

    • 2931785位工程師會員交流學習
    • 獲取您個性化的科技前沿技術信息
    • 參加活動獲取豐厚的禮品