Redis:集群

為什么要有集群?

Redis 集群(Redis Cluster)是 Redis 官方提供的分布式解決方案,用于解決單機 Redis 在數據容量、并發處理能力和高可用性上的局限。通過 Redis 集群,可以實現數據分片、故障轉移和高可用性,適用于高性能和大規模數據的場景。

image.png

數據分片算法

對三種數據分片算法的介紹以及 Redis 選擇哈希槽分區算法而不選其他算法的原因:

哈希求余算法

對鍵的哈希值進行取模運算:節點 = hash(key) % N(N為節點數),直接決定數據存儲在哪個節點。

特點

  • 簡單直接,實現容易。
  • 節點增減時(N變化),幾乎所有數據都需要重新映射。
  • 擴容/縮容成本高,數據遷移量大。

一致性哈希算法

將哈希空間組織為虛擬環(0~2^32-1),節點和鍵都哈希映射到環上,數據存儲在順時針方向第一個節點。

特點

  • 節點增減只影響相鄰節點的數據。
  • 引入虛擬節點解決數據傾斜問題。
  • 擴容時數據遷移量約為1/N(N為節點數)。

哈希槽分區算法

預分配固定數量的槽位(Redis為16384個),槽位均勻分配給節點,鍵通過CRC16(key) % 16384確定槽位。

特點

  • 解耦數據與節點的直接關系。
  • 節點增減只需遷移對應槽位的數據。

Redis選擇哈希槽的核心原因

  1. 擴展和縮容的平滑性
    • 與哈希求余算法相比,哈希槽分區算法在擴縮容時遷移的數據更少,保持集群的穩定性。
    • 相比一致性哈希算法,哈希槽固定且簡單,節點擴展只需要重新分配少量槽位即可,不需要額外的虛擬節點管理。
  2. 負載均衡:Redis 通過哈希槽分區實現較為均衡的數據分布,同時在實際生產環境中可以手動調整節點和哈希槽的分配,提升負載均衡效果。
  3. 實現復雜度:一致性哈希算法需要維護復雜的環狀結構和大量的虛擬節點,而哈希槽分區算法通過預設 16384 個哈希槽,大大簡化了實現和管理成本。
  4. 可控的遷移成本:發生主節點故障時,通過哈希槽快速找到備用節點,自動進行故障轉移,并更新槽位信息,維護高可用性。

工作原理

  1. 讀寫請求處理
  • 寫操作只能由主節點處理,并同步到從節點。
  • 讀操作默認在主節點處理,可以通過配置允許從節點處理讀請求,以減輕主節點壓力。
  1. 節點通信
  • Redis 集群的所有節點之間通過Gossip 協議進行通信,交換狀態信息,檢測節點的存活狀態。
  • 每個節點都會定期向其他隨機節點發送 PING 消息,以檢測對方是否在線。
  • 如果檢測到某主節點下線,Redis 會在一定條件下進行故障轉移
  1. 故障檢測與轉移
  • 集群中的所有節點,都會周期性的使?心跳包進行通信,并對節點是否下線進行判定:

    • 主觀下線:節點 A 認為節點 B 不可達,但其他節點可能不同意。

    • 客觀下線:超過半數主節點認為節點 B 不可達,此時觸發故障轉移。

  • 故障轉移過程包括:

    • 從節點選舉新的主節點。
    • 更新集群的槽信息并廣播。
    • 應用客戶端更新主從關系。

集群擴容

添加新節點到集群,使用redis-cli添加節點:

# 添加主節點
redis-cli --cluster add-node new_host:new_port existing_host:existing_port
  • redis-cli --cluster表明使用 Redis 命令行工具來操作集群。
  • add-node是添加節點的操作指令。
  • new_host:new_port代表新節點的地址和端口,也就是要加入集群的節點;
  • existing_host:existing_port是集群中已存在的某個節點的地址和端口,借助這個已存在的節點,新節點就能和整個集群建立聯系。
# 添加從節點
redis-cli --cluster add-node new_host:new_port existing_host:existing_port --cluster-slave --cluster-master-id <master-id>
  • --cluster-slave參數表明新節點要作為從節點加入集群。
  • --cluster-master-id <master-id>用于指定該從節點對應的主節點 ID,<master-id>需要替換成實際的主節點 ID,這樣新節點就會成為指定主節點的從節點,負責復制主節點的數據。
# 自動平衡哈希槽
redis-cli --cluster rebalance <任意集群節點IP:端口> --cluster-use-empty-masters
  • rebalance指令會讓集群自動調整哈希槽的分布,使各個節點的負載更均衡。
  • <任意集群節點IP:端口>表示可以指定集群中任意一個節點的地址和端口,命令會通過這個節點和集群通信并執行操作。
  • --cluster-use-empty-masters參數表示在平衡過程中會考慮使用那些沒有分配哈希槽的主節點。

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

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

相關文章

【2012】【論文筆記】太赫茲波在非磁化等離子體——

前言 類型 太赫茲 + 等離子體 太赫茲 + 等離子體 太赫茲+等離子體 期刊 物理學報 物理學報 物理學報 作者

Linux字符驅動設備開發入門之框架搭建

聲明 本博客所記錄的關于正點原子i.MX6ULL開發板的學習筆記&#xff0c;&#xff08;內容參照正點原子I.MX6U嵌入式linux驅動開發指南&#xff0c;可在正點原子官方獲取正點原子Linux開發板 — 正點原子資料下載中心 1.0.0 文檔&#xff09;&#xff0c;旨在如實記錄我在學校學…

小剛說C語言刷題——第15講 多分支結構

1.多分支結構 所謂多分支結構是指在選擇的時候有多種選擇。根據條件滿足哪個分支&#xff0c;就走對應分支的語句。 2.語法格式 if(條件1) 語句1; else if(條件2) 語句2; else if(條件3) 語句3; ....... else 語句n; 3.示例代碼 從鍵盤輸入三條邊的長度&#xff0c;…

Apache httpclient okhttp(1)

學習鏈接 Apache httpclient & okhttp&#xff08;1&#xff09; Apache httpclient & okhttp&#xff08;2&#xff09; httpcomponents-client github apache httpclient文檔 apache httpclient文檔詳細使用 log4j日志官方文檔 【Java基礎】- HttpURLConnection…

洛谷題單3-P1420 最長連號-python-流程圖重構

題目描述 輸入長度為 n n n 的一個正整數序列&#xff0c;要求輸出序列中最長連號的長度。 連號指在序列中&#xff0c;從小到大的連續自然數。 輸入格式 第一行&#xff0c;一個整數 n n n。 第二行&#xff0c; n n n 個整數 a i a_i ai?&#xff0c;之間用空格隔開…

使用binance-connector庫獲取Binance全市場的幣種價格,然后選擇一個幣種進行下單

一個完整的示例,展示如何使用 api 獲取Binance全市場的幣種價格,然后選擇一個最便宜的幣種進行下單操作 代碼經過修改,親測可用,目前只可用于現貨,合約的待開發 獲取市場價格:使用client.ticker_price()獲取所有交易對的當前價格 賬戶檢查:獲取賬戶余額,確保有足夠的資…

算法設計學習10

實驗目的及要求&#xff1a; 本查找實驗旨在使學生深入了解不同查找算法的原理、性能特征和適用場景&#xff0c;培養其在實際問題中選擇和應用查找算法的能力。通過實驗&#xff0c;學生將具體實現多種查找算法&#xff0c;并通過性能測試驗證其在不同數據集上的表現&#xff…

5天速成ai agent智能體camel-ai之第1天:camel-ai安裝和智能體交流消息講解(附源碼,零基礎可學習運行)

嗨&#xff0c;朋友們&#xff01;&#x1f44b; 是不是感覺AI浪潮鋪天蓋地&#xff0c;身邊的人都在談論AI Agent、大模型&#xff0c;而你看著那些密密麻麻的代碼&#xff0c;感覺像在讀天書&#xff1f;&#x1f92f; 別焦慮&#xff01;你不是一個人。很多人都想抓住AI的風…

MySQL介紹及使用

1. 安裝、啟動、配置 MySQL 1. 安裝 MySQL 更新軟件包索引 sudo apt update 安裝 MySQL 服務器 sudo apt install mysql-server 安裝過程中可能會提示你設置 root 用戶密碼。如果沒有提示&#xff0c;可以跳過&#xff0c;后續可以手動設置。 2. 配置 MySQL 運行安全腳本…

九、重學C++—類和函數

上一章節&#xff1a; 八、重學C—動態多態&#xff08;運行期&#xff09;-CSDN博客https://blog.csdn.net/weixin_36323170/article/details/147004745?spm1001.2014.3001.5502 本章節代碼&#xff1a; cpp/cppClassAndFunc.cpp CuiQingCheng/cppstudy - 碼云 - 開源中國…

lua和C的交互

1.C調用lua例子 #include <iostream> #include <lua.hpp>int main() {//用于創建一個新的lua虛擬機lua_State* L luaL_newstate();luaL_openlibs(L);//打開標準庫/*if (luaL_dofile(L, "test.lua") ! LUA_OK) {std::cerr << "Lua error: &…

java高并發------守護線程Daemon Thread

文章目錄 1.概念2.生命周期與行為2. 應用場景3. 示例代碼4. 注意事項 1.概念 Daemon &#xff1a; 滴門 在Java中&#xff0c;線程分為兩類&#xff1a;用戶線程(User Thread)和守護線程(Daemon Thread)。 守護線程是后臺線程&#xff0c;主要服務于用戶線程&#xff0c;當所…

Docker存儲策略深度解析:臨時文件 vs 持久化存儲選型指南

Docker存儲策略深度解析&#xff1a;臨時文件 vs 持久化存儲選型指南 一、存儲類型全景對比二、臨時存儲適用場景與風險2.1 最佳使用案例2.2 風險警示 三、持久化存儲技術選型3.1 Volume核心優勢Volume管理命令&#xff1a; 3.2 Bind Mount適用邊界掛載模式對比&#xff1a; 四…

【Linux網絡#18】:深入理解select多路轉接:傳統I/O復用的基石

&#x1f4c3;個人主頁&#xff1a;island1314 &#x1f525;個人專欄&#xff1a;Linux—登神長階 目錄 一、前言&#xff1a;&#x1f525; I/O 多路轉接 為什么需要I/O多路轉接&#xff1f; 二、I/O 多路轉接之 select 1. 初識 select2. select 函數原型2.1 關于 fd_set 結…

高級:微服務架構面試題全攻略

一、引言 在現代軟件開發中&#xff0c;微服務架構被廣泛應用于構建復雜、可擴展的應用程序。面試官通過相關問題&#xff0c;考察候選人對微服務架構的理解、拆分原則的掌握、服務治理的能力以及API網關的運用等。本文將深入剖析微服務架構相關的面試題&#xff0c;結合實際開…

使用MQTTX軟件連接阿里云

使用MQTTX軟件連接阿里云 MQTTX軟件阿里云配置MQTTX軟件設置 MQTTX軟件 阿里云配置 ESP8266連接阿里云這篇文章里有詳細的創建過程&#xff0c;這里就不再重復了&#xff0c;需要的可以點擊了解一下。 MQTTX軟件設置 打開軟件之后&#xff0c;首先點擊添加進行創建。 在阿…

【HFP】藍牙Hands-Free Profile(HFP)核心技術解析

藍牙 Hands-Free Profile&#xff08;HFP&#xff09;作為車載通信和藍牙耳機的核心協議&#xff0c;定義了設備間語音交互的標準化流程&#xff0c;并持續推動著無線語音交互體驗的革新。自2002年首次納入藍牙核心規范以來&#xff0c;HFP歷經多次版本迭代&#xff08;最新為v…

輕量化大模型微調工具XTuner指令微調實戰(下篇)

接著上篇文章《輕量化大模型微調工具XTuner指令微調實戰&#xff08;上篇&#xff09;》來接著寫教程。 一、模型轉換 模型訓練后會自動保存成 PTH 模型&#xff08;例如 iter_500.pth&#xff09;&#xff0c;我們需要利用 xtuner convert pth_to_hf 將其轉換為 HuggingFace…

pyTorch框架使用CNN進行手寫數字識別

目錄 1.導包 2.torchvision數據處理的方法 3.下載加載手寫數字的訓練數據集 4.下載加載手寫數字的測試數據集 5. 將訓練數據與測試數據 轉換成dataloader 6.轉成迭代器取數據 7.創建模型 8. 把model拷到GPU上面去 9. 定義損失函數 10. 定義優化器 11. 定義訓練…

強化學習課程:stanford_cs234 學習筆記(3)introduction to RL

文章目錄 前言7 markov 實踐7.1 markov 過程再敘7.2 markov 獎勵過程 MRP&#xff08;markov reward process&#xff09;7.3 markov 價值函數與貝爾曼方程7.4 markov 決策過程MDP&#xff08;markov decision process&#xff09;的 狀態價值函數7.4.1 狀態價值函數7.4.2 狀態…