欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Redis分片集群的實現(xiàn)

 更新時間:2025年04月08日 10:50:44   作者:山高自有客行路  
Redis 分片集群是一種將 Redis數(shù)據(jù)庫分散到多個節(jié)點上的方式,以提供更高的性能和可伸縮性,本文主要介紹了Redis分片集群的實現(xiàn),具有一定的參考價值,感興趣的可以了解一下

1. Redis Cluster的核心概念

哈希槽(Hash Slots)

Redis Cluster使用哈希槽來實現(xiàn)數(shù)據(jù)分片。整個數(shù)據(jù)空間被劃分為16384個哈希槽(slot),這些槽均勻分布到不同的主節(jié)點上。

  • 哈希計算:對于每一個鍵,Redis使用CRC16算法計算其哈希值,并對16384取模,確定該鍵屬于哪個哈希槽。
  • 槽分配:每個主節(jié)點負責一部分哈希槽。例如,如果有三個主節(jié)點,它們可以分別負責5461個哈希槽。

主從復制與故障轉(zhuǎn)移

為了保證高可用性,每個主節(jié)點都有一個或多個從節(jié)點。當主節(jié)點發(fā)生故障時,集群會自動進行故障轉(zhuǎn)移,提升其中一個從節(jié)點為新的主節(jié)點。

  • 主從同步:從節(jié)點會持續(xù)地從主節(jié)點同步數(shù)據(jù),以保持數(shù)據(jù)的一致性。同步過程包括全量同步和增量同步。
  • 故障檢測與恢復:集群中的節(jié)點會定期交換信息,監(jiān)測其他節(jié)點的狀態(tài)。如果某個主節(jié)點失效,集群會選擇一個從節(jié)點升級為主節(jié)點,并重新分配哈希槽。

2. 詳細的配置步驟

準備節(jié)點

假設(shè)我們有6個Redis實例(3個主節(jié)點和3個從節(jié)點),分別運行在不同的端口上。

節(jié)點配置示例 (redis-node.conf)

每個節(jié)點的配置文件略有不同,主要是端口號和角色的不同。以下是每個節(jié)點的配置文件示例:

主節(jié)點1: redis-node1.conf (Port: 7000)

# 端口號
port 7000

# 啟用集群模式
cluster-enabled yes

# 集群配置文件路徑,用于存儲集群狀態(tài)信息
cluster-config-file nodes-7000.conf

# 節(jié)點超時時間(毫秒),超過此時間未響應(yīng)視為故障
cluster-node-timeout 5000

# 開啟AOF持久化
appendonly yes

# 可選配置項
# 設(shè)置密碼保護
# requirepass yourpassword

# 設(shè)置最大內(nèi)存使用量
# maxmemory 2gb

# 設(shè)置持久化策略
# appendfsync everysec

從節(jié)點1: redis-node2.conf (Port: 7001)

# 端口號
port 7001

# 啟用集群模式
cluster-enabled yes

# 集群配置文件路徑,用于存儲集群狀態(tài)信息
cluster-config-file nodes-7001.conf

# 節(jié)點超時時間(毫秒),超過此時間未響應(yīng)視為故障
cluster-node-timeout 5000

# 開啟AOF持久化
appendonly yes

# 設(shè)置從節(jié)點的主節(jié)點
slaveof 127.0.0.1 7000

# 可選配置項
# 設(shè)置密碼保護
# requirepass yourpassword

# 設(shè)置最大內(nèi)存使用量
# maxmemory 2gb

# 設(shè)置持久化策略
# appendfsync everysec

主節(jié)點2: redis-node3.conf (Port: 7002)

port 7002
cluster-enabled yes
cluster-config-file nodes-7002.conf
cluster-node-timeout 5000
appendonly yes

從節(jié)點2: redis-node4.conf (Port: 7003)

port 7003
cluster-enabled yes
cluster-config-file nodes-7003.conf
cluster-node-timeout 5000
appendonly yes
slaveof 127.0.0.1 7002

主節(jié)點3: redis-node5.conf (Port: 7004)

port 7004
cluster-enabled yes
cluster-config-file nodes-7004.conf
cluster-node-timeout 5000
appendonly yes

從節(jié)點3: redis-node6.conf (Port: 7005)

port 7005
cluster-enabled yes
cluster-config-file nodes-7005.conf
cluster-node-timeout 5000
appendonly yes
slaveof 127.0.0.1 7004

啟動節(jié)點

依次啟動所有節(jié)點:

redis-server /path/to/redis-node1.conf
redis-server /path/to/redis-node2.conf
redis-server /path/to/redis-node3.conf
redis-server /path/to/redis-node4.conf
redis-server /path/to/redis-node5.conf
redis-server /path/to/redis-node6.conf

創(chuàng)建集群

使用redis-cli工具創(chuàng)建集群:

redis-cli --cluster create 127.0.0.1:7000 127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005 --cluster-replicas 1

這里的--cluster-replicas 1表示每個主節(jié)點有一個從節(jié)點。

3. 實際操作示例

寫入數(shù)據(jù)

你可以像平常一樣寫入數(shù)據(jù),Redis Cluster會自動將數(shù)據(jù)分配到合適的節(jié)點上。

redis-cli -c -p 7000
127.0.0.1:7000> SET key1 value1
-> Redirected to slot [12182] located at 127.0.0.1:7002
OK

注意這里-c參數(shù)表示啟用集群模式,這樣客戶端會自動處理重定向命令。

讀取數(shù)據(jù)

讀取數(shù)據(jù)時,同樣可以通過任意節(jié)點訪問:

redis-cli -c -p 7000
127.0.0.1:7000> GET key1
-> Redirected to slot [12182] located at 127.0.0.1:7002
"value1"

故障模擬與恢復

你可以手動關(guān)閉一個主節(jié)點來模擬故障,并觀察集群如何進行自動故障轉(zhuǎn)移。

關(guān)閉主節(jié)點

redis-cli -p 7002 shutdown

檢查集群狀態(tài)

redis-cli -p 7000 cluster nodes

你應(yīng)該看到原來的從節(jié)點已經(jīng)被提升為主節(jié)點,并接管了原主節(jié)點的哈希槽。

4. Redis Cluster的內(nèi)部機制

數(shù)據(jù)分片與重定向

  • 數(shù)據(jù)分片:每個鍵通過哈希槽映射到特定的主節(jié)點??蛻舳税l(fā)送的請求會被路由到相應(yīng)的節(jié)點。
  • 重定向:如果客戶端請求了一個不屬于當前節(jié)點的哈希槽,集群會返回一個MOVED響應(yīng),指示客戶端應(yīng)該連接到正確的節(jié)點,客戶端收到這個響應(yīng)后,會自動重定向到指定的節(jié)點。
# 連接到集群中的任意節(jié)點
redis-cli -c -p 7000

# 嘗試設(shè)置一個鍵
127.0.0.1:7000> SET key1 value1
-> Redirected to slot [12182] located at 127.0.0.1:7002
OK

# 從同一個客戶端再次嘗試獲取相同的鍵
127.0.0.1:7000> GET key1
-> Redirected to slot [12182] located at 127.0.0.1:7002
"value1"

主從復制與故障轉(zhuǎn)移

  • 主從同步:從節(jié)點會持續(xù)地從主節(jié)點同步數(shù)據(jù),以保持數(shù)據(jù)的一致性。同步過程包括全量同步和增量同步。
    • 全量同步:首次同步時,從節(jié)點會從主節(jié)點獲取完整的數(shù)據(jù)集。
      • 過程:從節(jié)點向主節(jié)點發(fā)起全量同步請求,主節(jié)點生成RDB文件并傳輸給從節(jié)點。從節(jié)點加載RDB文件并開始接收后續(xù)的增量更新。
    • 增量同步:后續(xù)同步時,從節(jié)點會接收主節(jié)點的增量更新(如寫操作日志)。
      • 過程:主節(jié)點記錄寫操作日志(稱為復制積壓緩沖區(qū)),從節(jié)點根據(jù)偏移量請求缺失的部分日志。
  • 故障檢測:集群中的節(jié)點會定期交換信息,監(jiān)測其他節(jié)點的狀態(tài)。如果某個主節(jié)點連續(xù)多次未能響應(yīng)心跳消息,它會被標記為疑似下線(PFAIL)。
    • 心跳檢查:每個節(jié)點會定期向其他節(jié)點發(fā)送心跳消息,默認間隔是1秒。
    • 標記PFAIL:如果一個節(jié)點在一定時間內(nèi)沒有回應(yīng)心跳消息,它會被標記為疑似下線(PFAIL)。
    • 標記FAIL:如果大多數(shù)節(jié)點都標記某個節(jié)點為PFAIL,則該節(jié)點會被標記為FAIL。
  • 故障轉(zhuǎn)移:一旦主節(jié)點被確認下線,集群會選擇一個從節(jié)點提升為主節(jié)點,并重新分配哈希槽。具體步驟如下:選舉:集群中的節(jié)點會選舉一個新的主節(jié)點。選舉過程基于Raft一致性算法,確保只有一個從節(jié)點被選中。
    • 投票過程:每個從節(jié)點會根據(jù)一定的規(guī)則投票給一個候選者。最終得票最多的從節(jié)點會被選為新的主節(jié)點。
    數(shù)據(jù)同步:新當選的主節(jié)點會從其他節(jié)點獲取最新的數(shù)據(jù),確保數(shù)據(jù)一致性。
    • 部分同步:如果從節(jié)點已經(jīng)有部分數(shù)據(jù),可以只同步缺失的部分數(shù)據(jù)。
    • 全量同步:如果從節(jié)點的數(shù)據(jù)完全丟失,需要進行全量同步。

    重新分配哈希槽:新的主節(jié)點接管原主節(jié)點的哈希槽,集群恢復正常服務(wù)。

5. 總結(jié)

Redis Cluster通過哈希槽實現(xiàn)了數(shù)據(jù)的分布式存儲,并提供了高可用性和自動故障轉(zhuǎn)移功能。這使得它非常適合于需要處理大量數(shù)據(jù)和高并發(fā)請求的應(yīng)用場景。同時,現(xiàn)代的Redis客戶端庫也能夠很好地支持集群模式下的自動重定向和負載均衡。

到此這篇關(guān)于Redis分片集群的實現(xiàn)的文章就介紹到這了,更多相關(guān)Redis分片集群內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • redis保存session信息的示例代碼

    redis保存session信息的示例代碼

    本文實現(xiàn)一個將session信息保存在 redis中,多個tomcat中的工程都從redis獲取session信息的示例,本文給大家講解的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友參考下吧
    2023-01-01
  • Redis調(diào)用Lua腳本及使用場景快速掌握

    Redis調(diào)用Lua腳本及使用場景快速掌握

    Redis?是一種非常流行的內(nèi)存數(shù)據(jù)庫,常用于數(shù)據(jù)緩存與高頻數(shù)據(jù)存儲。大多數(shù)開發(fā)人員可能聽說過redis可以運行?Lua?腳本,但是可能不知道redis在什么情況下需要使用到Lua腳本
    2022-03-03
  • Redis使用命令行與多數(shù)據(jù)庫配置

    Redis使用命令行與多數(shù)據(jù)庫配置

    本文詳細講解了Redis使用命令行與多數(shù)據(jù)庫配置的方法,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-03-03
  • 聊聊使用RedisTemplat實現(xiàn)簡單的分布式鎖的問題

    聊聊使用RedisTemplat實現(xiàn)簡單的分布式鎖的問題

    這篇文章主要介紹了使用RedisTemplat實現(xiàn)簡單的分布式鎖問題,文中給大家介紹在SpringBootTest中編寫測試模塊的詳細代碼,需要的朋友可以參考下
    2021-11-11
  • 淺談redis加鎖常用幾種方式

    淺談redis加鎖常用幾種方式

    這篇文章主要介紹了淺談redis加鎖常用幾種方式,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-12-12
  • 基于Redis實現(xiàn)搶紅包和發(fā)紅包功能

    基于Redis實現(xiàn)搶紅包和發(fā)紅包功能

    搶紅包是我們生活常用的社交功能, 這個功能最主要的特點就是用戶的并發(fā)請求高, 在系統(tǒng)設(shè)計上, 可以使用非常多的辦法來扛住用戶的高并發(fā)請求, 在本文中簡要介紹使用Redis緩存中間件來實現(xiàn)搶紅包算法,需要的朋友可以參考下
    2024-04-04
  • Linux下redis密碼和遠程連接方式

    Linux下redis密碼和遠程連接方式

    這篇文章主要介紹了Linux下redis密碼和遠程連接方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-01-01
  • 關(guān)于Redis解決Session共享問題

    關(guān)于Redis解決Session共享問題

    這篇文章主要介紹了Redis解決Session共享問題,本文結(jié)合實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-07-07
  • Redis教程(六):Sorted-Sets數(shù)據(jù)類型

    Redis教程(六):Sorted-Sets數(shù)據(jù)類型

    這篇文章主要介紹了Redis教程(六):Sorted-Sets數(shù)據(jù)類型,本文講解了Sorted-Sets數(shù)據(jù)類型概述、相關(guān)命令列表、命令使用示例、應(yīng)用范圍等內(nèi)容,需要的朋友可以參考下
    2015-04-04
  • 基于redis實現(xiàn)世界杯排行榜功能項目實戰(zhàn)

    基于redis實現(xiàn)世界杯排行榜功能項目實戰(zhàn)

    前段時間,做了一個世界杯競猜積分排行榜。對世界杯64場球賽勝負平進行猜測,猜對+1分,錯誤+0分,一人一場只能猜一次。下面通過本文給大家分享基于redis實現(xiàn)世界杯排行榜功能項目實戰(zhàn),感興趣的朋友一起看看吧
    2018-10-10

最新評論