初識RedisCluster集群

来源:https://www.cnblogs.com/dwvfw855/archive/2019/05/22/10906225.html
-Advertisement-
Play Games

為什麼需要Redis集群 需要提高更大的併發量 Redis官方提出擁有10萬QPS的請求量 如果業務需要Redis擁有100萬的QPS 可以通過集群來提升併發量。 需要存儲更大的數據量 一般伺服器的機器記憶體為16G-256G 如果業務需要500G的數據量 可以通過集群的分區技術來擴展數據量 需要提高 ...


為什麼需要Redis集群

  • 需要提高更大的併發量

    • Redis官方提出擁有10萬QPS的請求量

    • 如果業務需要Redis擁有100萬的QPS

    • 可以通過集群來提升併發量。

  • 需要存儲更大的數據量

    • 一般伺服器的機器記憶體為16G-256G

    • 如果業務需要500G的數據量

    • 可以通過集群的分區技術來擴展數據量

 

 

數據分區

1.順序分區

例如一共有編號為1~100的100條數據,一共有3個分區ABC,則需要預先設計

  • 1~33號數據落入A分區

  • 34~66號數據落入B分區

  • 67~100號數據落入C分區

2.哈希分區

hash(key) % node_count

3.順序分區 VS 哈希分區

分佈方式特點典型產品
哈希分佈 數據分散度高 鍵值分佈與業務無關 無法順序訪問 一致性哈希Memcache Redis Cluster 其他緩存產品
順序分佈 數據分散度易傾斜 鍵值分佈與業務有關 可順序訪問 BigTable HBase

 

 

哈希分區

1.節點取餘分區

  • 含義:hash(key) % node_count

  • 優點:hash+取餘的方式計算節點的分區很簡單

  • 缺點:當節點伸縮時候,數據節點關係發生變化,導致數據遷移

  • 擴容的時候建議翻倍擴容,可以降低數據的遷移量。

2.一致性哈希分區

  • 含義:哈希+順時針(優化取餘)

    • 約定長度232位的哈希環,在其中分佈若幹個hash點。

    • 第一步對每個key做哈希處理得到hashVal

    • 第二步將hashVal順時針偏移,得到的第一個hash點,即為分區的落點

  • 優點:節點伸縮的時候,只會影響鄰近節點,但是還是會有數據遷移

  • 翻倍的伸縮,可以保證最小的遷移數據且達到數據的負載均衡

3.虛擬槽分區

  • 預設虛擬槽,每個槽映射一個數據子集,一般比節點數大

  • 採用CRC16(key) & 16383來決定節點

  • 每個節點順序地平均分佈16384個槽,即當有5個節點時

    • A 0 ~ 3276

    • B 3277 ~ 6553

    • C 6554 ~ 9830

    • D 9831 ~ 13107

    • E 13108 ~ 16383

 

 

 

RedisCluster架構

一、節點

由多個master主節點組成,各個master都負責去讀寫,每個master都有各自的slave節點。

每個node的cluster_enabled配置為yes

二、Gossip協議

多個master節點之間會使用Gossip協議進行通信

1.meet消息

用於通知新節點加入。消息發送者通知接收者加入到當前集群,meet消息通信正常完成後,接收節點會加入到集群中併進行周期性的ping、pong消息交換。

當A meet B以及A meet C之後,B就可以與C做交互了

2.ping消息

集群中交換最頻繁的消息,集群內各個節點每秒向多個其他節點發送ping消息,用於檢測節點是否線上和交換彼此狀態信息。

ping消息發送封裝了自身節點和部分其他節點的狀態數據。

3.pong消息

當接收到ping、meet消息時,作為響應消息回覆給發送方確認消息正常通信。

pong消息內部封裝了自身狀態數據。

節點也可以向集群內廣播自身的pong消息來通知整個集群對自身狀態進行更新

4.fail消息

當節點判定集群內另一個節點下線時,會向集群內廣播一個fail消息,其他節點接收到fail消息之後把對應節點更新誒下線狀態

三、指派槽

需要為RedisCluster指派槽,指定各個master節點的槽範圍,讓它進行正常的讀寫

四、複製

每個master節點包含若幹個slave節點,形成主從複製的形式,以提高高可用性。

通過各個節點之間相互監控來達到Sentinel的目的

 

 

RedisCluster安裝

RedisCluster主要配置

命令含義
cluster-enabled yes 節點是否開啟集群模式
cluster-node-timeout 15000 節點主觀下線超時時間,毫秒
cluster-config-file "nodes.conf" 集群配置文件
cluster-require-full-coverage no 是否需要所有節點全都可用,集群才能對外服務,此處推薦設置為no

一、原生命令安裝

1.配置開啟節點

port : 7000、7001、7002、7003、7004、7005

port ${port}
daemonize yes
dir "/redisDataPath"
dbfilename "dump-${port}.rdb"
logfile "${port}.log"
cluster-enabled yes
cluster-config-file nodes-${port}.conf

2.meet

cluster meet ip port
#例如在7000埠上依次執行
cluster meet 127.0.0.1 7001
cluster meet 127.0.0.1 7002
cluster meet 127.0.0.1 7003
cluster meet 127.0.0.1 7004
cluster meet 127.0.0.1 7005

3.指派槽

cluster addslots slot [slot...]
#可以通過編寫腳本shell方便實現
#addslot.sh
port=$1
start=$2
end=$3
for slot in `seq ${start} ${end}`
do
echo "slot:${slot}"
redis-cli -p ${port} cluster addslots ${slot}
done
#
./addslot.sh 7000 0 5461
./addslot.sh 7001 5462 10922
./addslot.sh 7002 10922 16383

4.設置主從

#可以在任一節點上執行cluster nodes命令查看所有節點的node_id等信息
redis-cli -p 7000 cluster nodes
#在從節點上執行以下操作表示覆制master節點
cluster replicate node-id
#
redis-cli -h 127.0.0.1 -p 7003 cluster replicate ${node-id-7000}
redis-cli -h 127.0.0.1 -p 7004 cluster replicate ${node-id-7001}
redis-cli -h 127.0.0.1 -p 7005 cluster replicate ${node-id-7002}

二、官方工具安裝

./redis-trib.rb create --replicas 1 127.0.0.1:8000 127.0.0.1:8001 
127.0.0.1:8002 127.0.0.1:8003 127.0.0.1:8004 127.0.0.1:8005

# 1 代表每個master有1個slave
# 此時,一共6個節點,每個master有1個slave,即前3個會形成master節點,後3個會形成slave節點

三、原生命令 VS redis-trib.rb

 優點缺點
原生命令 易於理解Redis Cluster架構 生產環境不使用,太麻煩,容易犯錯
redis-trib.rb 高效,準確 生產環境可以使用  

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 另外 上面的kernel.shmmax = 1200000000可能會有問題,後面咱們再說。 或者你直接現在就寫成4098955264 以oracle用戶登錄,開始安裝:用xshell以oracle用戶登錄連接,不建議使用su oracle 安裝中 配置Orale EM 土豪可以去訂購功能強大的EM ...
  • 安裝 MySQL 服務端 等待安裝完成。 檢查 mysql 服務狀態 登錄 mysql 客戶端 ...
  • /一般情況下,我們用SELECT這些查詢語句時,都是針對的一行記錄而言,如果要在查詢分析器中對多行記錄(即記錄集)進行讀取操作時,則需要使用到游標或WHILE等迴圈/以下內容摘自http://www.cnblogs.com/aotian56/archive/2007/07/13/817281.htm ...
  • SELECT TABLE_NAME,COLUMN_NAME,COLUMN_COMMENT FROM INFORMATION_SCHEMA.COLUMNS WHERE COLUMN_COMMENT LIKE '%條件%' AND table_name='表名' AND table_schema='數據... ...
  • 在MySQL中條件判斷語句常用於數據轉換,基於現有數據創建新的數據列,使用場景還是比較多。 基礎樣式: CASE WHEN`條件`THEN`結果` ELSE`預設結果` END 在同一條判斷語句中可以有一個到多個判斷條件: CASE WHEN0`條件`THEN`結果0` WHEN1…… WHEN2… ...
  • REGEXP_SUBSTR函數格式如下: function REGEXP_SUBSTR(string, pattern, position, occurrence, modifier) string :需要進行正則處理的字元串 pattern :進行匹配的正則表達式 position :起始位置,從 ...
  • 結論: 1. float 預設只保存6位(除去小數點),如果超過6位,則四捨五入,所以float存儲的數據是不精確的,只是近似值; 2. decimal,如果輸入的數據超過了定義的最大值,那麼則溢出,資料庫裡面存儲的是定義的最大值,例如,decimal(5,2)輸入123123.45,實際存儲為99 ...
  • 常用的語法:select--from--where--group by--having--order by 1、分組子句group by +con 按什麼分組 2、having子句 對上面分組的數據進行再次條件過濾 3、排序子句 order by order by + con ASC 升序 orde ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...