日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

Redis集群:redis cluster方案

發布時間:2025/3/21 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Redis集群:redis cluster方案 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

redis集群原理之官方的Redis Cluster方案

redis是單線程,但是一般的作為緩存使用的話,redis足夠了,因為它的讀寫速度太快了。

??官方的一個簡單測試:

測試完成了50個并發執行100000個請求。     

設置和獲取的值是一個256字節字符串。結果:讀的速度是110000次/s,寫的速度是81000次/s?

    在這么快的讀寫速度下,對于一般程序來說足夠用了,但是對于訪問量特別大的網站來說,還是稍有不足。那么,如何提升redis的性能呢?看標題就知道了,搭建集群。

3.0版本之前

3.0版本之前的redis是不支持集群的,那個時候,我們的redis如果想要集群的話,就需要一個中間件,然后這個中間件負責將我們需要存入redis中的數據的key通過一套算法計算得出一個值。然后根據這個值找到對應的redis節點,將這些數據存在這個redis的節點中。

    在取值的時候,同樣先將key進行計算,得到對應的值,然后就去找對應的redis節點,從對應的節點中取出對應的值。

    這樣做有很多不好的地方,比如說我們的這些計算都需要在系統中去進行,所以會增加系統的負擔。還有就是這種集群模式下,某個節點掛掉,其他的節點無法知道。而且也不容易對每個節點進行負載均衡。


?3.0之前也就是客戶端(tomcat)自己進行計算hash 或者使用中間件,然后去指定的redis節點進行存取


3.0版本及以后

    先來一張redis集群的架構圖:

?

在這個圖中,每一個藍色的圈都代表著一個redis的服務器節點。它們任何兩個節點之間都是相互連通的。客戶端可以與任何一個節點相連接,然后就可以訪問集群中的任何一個節點。對其進行存取和其他操作。(重定向操作

    那么redis是怎么做到的呢?首先,在redis的每一個節點上,都有這么兩個東西,一個是插槽(slot)可以理解為是一個可以存儲兩個數值的一個變量,這個變量的取值范圍是:0-16383(0-1000,5005-10000,12000-16000都可以)。還有一個就是cluster我個人把這個cluster理解為是一個集群管理的插件。當我們的存取的key到達的時候,redis會根據crc16的算法得出一個結果,然后把結果對?16384 求余數,這樣每個?key 都會對應一個編號在?0-16383 之間的哈希槽,通過這個值,去找到對應的插槽所對應的節點,然后直接自動跳轉到這個對應的節點上進行存取操作。(如下圖:26384%16384為10000,然后查找有10000的節點直接跳轉)

?

 還有就是因為如果集群的話,是有好多個redis一起工作的,那么,就需要這個集群不是那么容易掛掉,所以呢,理論上就應該給集群中的每個節點至少一個備用的redis服務。這個備用的redis稱為從節點(slave)

那么這個集群是如何判斷是否有某個節點掛掉了呢?

  首先要說的是,每一個節點都存有這個集群所有主節點以及從節點的信息。

    它們之間通過互相的ping-pong判斷是否節點可以連接上。如果有一半以上的節點去ping一個節點的時候沒有回應,集群就認為這個節點宕機了,然后去連接它的備用節點。如果某個節點和所有從節點全部掛掉,我們集群就進入faill狀態。還有就是如果有一半以上的主節點宕機,那么我們集群同樣進入發力了狀態。這就是我們的redis的投票機制,具體原理如下圖所示:

?

?

(1)投票過程是集群中所有master參與,如果半數以上master節點與master節點通信超時(cluster-node-timeout),認為當前master節點掛掉.

(2):什么時候整個集群不可用(cluster_state:fail)??

? ? a:如果集群任意master掛掉,且當前master沒有slave.集群進入fail狀態,也可以理解成集群的slot映射[0-16383]不完整時進入fail狀態. ps : redis-3.0.0.rc1加入cluster-require-full-coverage參數,默認關閉,打開集群兼容部分失敗.

? ? b:如果集群超過半數以上master掛掉,無論是否有slave,集群進入fail狀態.

?

2、Redis Cluster主從模式(HA方案)

? ? ? ? ? redis cluster 為了保證數據的高可用性,加入了主從模式,一個主節點對應一個或多個從節點,主節點提供數據存取,從節點則是從主節點拉取數據備份,當這個主節點掛掉后,就會有這個從節點選取一個來充當主節點,從而保證集群不會掛掉。

? ? ? 上面那個例子里, 集群有ABC三個主節點, 如果這3個節點都沒有加入從節點,如果B掛掉了,我們就無法訪問整個集群了。A和C的slot也無法訪問。

? ? ?所以我們在集群建立的時候,一定要為每個主節點都添加了從節點, 比如像這樣, 集群包含主節點A、B、C, 以及從節點A1、B1、C1, 那么即使B掛掉系統也可以繼續正確工作。

? ? ?B1節點替代了B節點,所以Redis集群將會選擇B1節點作為新的主節點,集群將會繼續正確地提供服務。當B重新開啟后,它就會變成B1的從節點。

? ? 不過需要注意,如果節點B和B1同時掛了,Redis集群就無法繼續正確地提供服務了。


Redis Cluster特性

·????????高性能

·????????支持動態擴容,對業務透明

·????????具備Sentinel的監控和自動Failover能力(Cluster架構中無Proxy層

Redis Cluster方式:

Redis 集群中內置了 16384 個哈希槽,當需要在 Redis 集群中放置一個 key-value時,redis 先對 key 使用 crc16 算法算出一個結果,然后把結果對 16384 求余數,這樣每個 key 都會對應一個編號在 0-16383 之間的哈希槽,redis會根據節點數量大

致均等的將哈希槽映射到不同的節點。

Redis 集群沒有使用一致性hash, 而是引入了哈希槽(Slot)的概念

Redis 集群有16384個哈希槽,每個key通過CRC16校驗后對16384取模來決定放置哪個槽.集群的每個節點負責一部分hash槽。這種結構很容易添加或者刪除節點,并且無論是添加刪除或者修改某一個節點,都不會造成集群不可用的狀態。

使用哈希槽的好處就在于可以方便的添加或移除節點。

當需要增加節點時,只需要把其他節點的某些哈希槽挪到新節點就可以了;

當需要移除節點時,只需要把移除節點上的哈希槽挪到其他節點就行了;

在這一點上,我們以后新增或移除節點的時候不用先停掉所有的 redis 服務。


?

總結

以上是生活随笔為你收集整理的Redis集群:redis cluster方案的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。