redis09 集群(cluster)

思維草圖

為什么要使用集群

  • 單臺redis內存容量的限制
  • 單臺redis并發寫量太大有性能瓶頸

redis集群認識

redis集群是對redis的水平擴容,即啟動N個redis節點,將整個數據分布存儲在這個N個節點中,每個節點存儲總數據的1/N

如下圖:由3臺master和3臺slave組成的redis集群,每臺master承接客戶端三分之一請求和寫入的數據,當master掛掉后,slave會自動替代master,做到高可用。

配置示例

在一臺機器上,用不同的端口進行服務模擬

創建測試目錄 redis-cluster,并將默認的redis.conf移動到該目錄下

創建master1的配置文件:redis-6379.conf

include /Users/lihui/Documents/dev-tool/redis-cluster/redis.conf
daemonize yes
bind 127.0.0.1
dir /Users/lihui/Documents/dev-tool/redis-cluster/
port 6379
dbfilename dump_6379.rdb
pidfile /Users/lihui/Documents/dev-tool/redis-cluster/var/run/redis_6379.pid
logfile "./6379.log"
# 開啟集群設置
cluster-enabled yes
# 設置節點配置文件
cluster-config-file node-6379.conf
# 設置節點失聯時間,超過該時間(毫秒),集群自動進行主從切換
cluster-node-timeout 15000

創建master2的配置文件:redis-6380.conf

include /Users/lihui/Documents/dev-tool/redis-cluster/redis.conf
daemonize yes
bind 127.0.0.1
dir /Users/lihui/Documents/dev-tool/redis-cluster/
port 6380
dbfilename dump_6380.rdb
pidfile /Users/lihui/Documents/dev-tool/redis-cluster/var/run/redis_6380.pid
logfile "./6380.log"
# 開啟集群設置
cluster-enabled yes
# 設置節點配置文件
cluster-config-file node-6380.conf
# 設置節點失聯時間,超過該時間(毫秒),集群自動進行主從切換
cluster-node-timeout 15000

創建master3的配置文件:redis-6381.conf

include /Users/lihui/Documents/dev-tool/redis-cluster/redis.conf
daemonize yes
bind 127.0.0.1
dir /Users/lihui/Documents/dev-tool/redis-cluster/
port 6381
dbfilename dump_6381.rdb
pidfile /Users/lihui/Documents/dev-tool/redis-cluster/var/run/redis_6381.pid
logfile "./6381.log"
# 開啟集群設置
cluster-enabled yes
# 設置節點配置文件
cluster-config-file node-6381.conf
# 設置節點失聯時間,超過該時間(毫秒),集群自動進行主從切換
cluster-node-timeout 15000

創建slave1的配置文件:redis-6389.conf

include /Users/lihui/Documents/dev-tool/redis-cluster/redis.conf
daemonize yes
bind 127.0.0.1
dir /Users/lihui/Documents/dev-tool/redis-cluster/
port 6389
dbfilename dump_6389.rdb
pidfile /Users/lihui/Documents/dev-tool/redis-cluster/var/run/redis_6389.pid
logfile "./6389.log"
# 開啟集群設置
cluster-enabled yes
# 設置節點配置文件
cluster-config-file node-6389.conf
# 設置節點失聯時間,超過該時間(毫秒),集群自動進行主從切換
cluster-node-timeout 15000

創建slave2的配置文件:redis-6390.conf

include /Users/lihui/Documents/dev-tool/redis-cluster/redis.conf
daemonize yes
bind 127.0.0.1
dir /Users/lihui/Documents/dev-tool/redis-cluster/
port 6390
dbfilename dump_6390.rdb
pidfile /Users/lihui/Documents/dev-tool/redis-cluster/var/run/redis_6390.pid
logfile "./6390.log"
# 開啟集群設置
cluster-enabled yes
# 設置節點配置文件
cluster-config-file node-6390.conf
# 設置節點失聯時間,超過該時間(毫秒),集群自動進行主從切換
cluster-node-timeout 15000

創建slave3的配置文件:redis-6391.conf

include /Users/lihui/Documents/dev-tool/redis-cluster/redis.conf
daemonize yes
bind 127.0.0.1
dir /Users/lihui/Documents/dev-tool/redis-cluster/
port 6391
dbfilename dump_6391.rdb
pidfile /Users/lihui/Documents/dev-tool/redis-cluster/var/run/redis_6391.pid
logfile "./6391.log"
# 開啟集群設置
cluster-enabled yes
# 設置節點配置文件
cluster-config-file node-6391.conf
# 設置節點失聯時間,超過該時間(毫秒),集群自動進行主從切換
cluster-node-timeout 15000

?啟動六個redis服務

redis-server /Users/lihui/Documents/dev-tool/redis-cluster/redis-6379.conf
redis-server /Users/lihui/Documents/dev-tool/redis-cluster/redis-6380.conf
redis-server /Users/lihui/Documents/dev-tool/redis-cluster/redis-6381.conf
redis-server /Users/lihui/Documents/dev-tool/redis-cluster/redis-6389.conf
redis-server /Users/lihui/Documents/dev-tool/redis-cluster/redis-6390.conf
redis-server /Users/lihui/Documents/dev-tool/redis-cluster/redis-6391.conf

啟動之后

確保每一個node文件生成成功

將6個節點合成一個集群

redis-cli --cluster create --cluster-replicas 1
127.0.0.1:6379 127.0.0.1:6380 127.0.0.1:6381
127.0.0.1:6389 127.0.0.1:6390 127.0.0.1:6391

注意

  • 合體的命令后面會跟上所有節點的ip:port列表,多個之間用空格隔開,注意ip不要寫 127.0.0.1,要寫真實ip (我看別的帖子上是這樣寫的,我自己用127好像可以,但是別學我)
  • --cluster-replicas 1:表示采用最簡單的方式配置集群,即每個master配1個slave,6個節點就形成了3主3從

連接集群節點,查看集群信息:cluster nodes

使用 redis-cli -c 命令連接集群中6個節點中任何一個節點都可以,注意和之前的連接參數有點不同 redis-cli 命令后面多了一個 -c 參數,表示采用集群的方式連接,連上以后,然后使用 cluster nodes 可以查看集群節點信息,如下?

集群中的每個節點都會生成一個ID, 這個ID信息會被寫到node-xxxx.conf文件中,節點的ip和端口可能會發生變化,但是節點的ID是不會變的,其他節點可以通過其他節點的ID來認識各個節點。

驗證集群數據的讀寫操作

在 6379 上操作的,但是請求被轉發到了6380這個節點去處理了。這里報錯是因為之前配置沒有寫密碼。

slots(槽)?

  • Redis集群內部劃分了16384個slots(插槽),合并的時候,會將每個slots映射到一個master上面。
  • 數據庫中的每個key都屬于16384個slots中的其中1個,當通過key讀寫數據的時候,redis需要先根據 key計算出key對應的slots,然后根據slots和master的映射關系找到對應的redis節點,key對應的數據就在這個節點上面。
  • 集群中使用公式 CRC16(key)%16384 計算key屬于哪個槽

故障恢復

如果主節點下線,從節點是否能夠提升為主節點?

要等15秒,從節點就會自動變成主節點,如果后續之前的主節點恢復,和之前的主從復制一樣,也是掛在新節點下,成為從節點。

SpringBoot整合redis集群

引入對應的maven

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>

配置redis cluster信息

# 集群節點(host:port),多個之間用逗號隔開
spring.redis.cluster.nodes=ip:port,ip:port,ip:port,ip:port,ip:port,ip:port
# 連接超時時間(毫秒)
spring.redis.timeout=60000

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

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

相關文章

C++ 根據公式計算橢圓任意點到中心的距離

#include <iostream> using namespace std;double fact(int x) //定義階乘函數。注意是double類型 {double y x; //注意是double類型for (int i x-1; i > 0; i--)y * i;return y; };double My_sin(int x) //定義sin函數。注意是double類型 {double y 0; //注意是do…

【視頻圖像取證篇】Amped FIVE專業法醫圖像和視頻增強軟件之模糊圖像去隔行功能

【視頻圖像取證篇】Amped FIVE專業法醫圖像和視頻增強軟件之模糊圖像去隔行功能 法醫圖像和視頻增強軟件&#xff0c;專業又強大&#xff01;&#xff01;&#xff01;超過 140 種過濾器和工具&#xff0c;用于分析、恢復和增強數字圖像和視頻。Amped FIVE能夠穩定抖動的視頻&…

Linux:ansible-playbook配置文件(劇本)(進階)

Linux&#xff1a;ansible-playbook配置文件&#xff08;劇本&#xff09;_ansible-playbook -i參數-CSDN博客https://blog.csdn.net/w14768855/article/details/132579492?ops_request_misc%257B%2522request%255Fid%2522%253A%2522170930036016800215061982%2522%252C%2522s…

LaTeX排版論文的常見問題匯總(持續更新中)

文章目錄 LaTeX排版論文的常見問題匯總&#xff08;持續更新中&#xff09;1.如何上傳期刊或會議提供的LaTeX模板&#xff1f;2.模板中各文件的說明3.LaTeX中如何設置字體大小&#xff1f;3.1如何設置表格中的字體大小&#xff1f;3.2如何設置表格、圖片標題的字體大小&#xf…

A/D轉換

硬件電路模型 模數轉換代碼 main.c #include <REGX52.H> #include "LCD1602.h" #include "Delay.h" #include "XPT2046.h"unsigned int ADValue; int main(){LCD_Init();LCD_ShowString(1,1,"ADJ NTC RG");while(1){ADValue …

什么是Vue的服務端渲染(SSR)?它有什么作用?

Vue的服務端渲染&#xff08;SSR&#xff09;是指將Vue組件在服務器端進行渲染&#xff0c;然后將已經渲染好的頁面返回給瀏覽器&#xff0c;相比于傳統的客戶端渲染&#xff0c;SSR可以更好地優化SEO和加速首屏加載速度。在傳統的客戶端渲染中&#xff0c;瀏覽器需要加載所有的…

【MySQL系列】在 MacOS 上安裝 MySQL

在 MacOS 上有兩種方式安裝 MySQL 服務器&#xff1a;通過 brew 安裝和通過安裝包安裝。 文章目錄 1、通過 brew 安裝 MySQL1.1、安裝 MySQL1.2、啟動 MySQL 服務器1.3、配置 MySQL 服務器1.4、MySQL 服務器管理命令 2、通過安裝包安裝 MySQL2.1、下載安裝包2.2、安裝 MySQL2.3…

深入理解快速排序算法:從原理到實現

目錄 1. 引言 2. 快速排序算法原理 3. 快速排序的時間復雜度分析 4. 快速排序的應用場景 5. 快速排序的優缺點分析 5.1 優點&#xff1a; 5.2 缺點&#xff1a; 6. Java、JavaScript 和 Python 實現快速排序算法 6.1 Java 實現&#xff1a; 6.2 JavaScript 實現&#…

30、類和接口

文章目錄 接口概念接口和類之間有何關系&#xff1f; 可以使用接口來約束類接口繼承接口接口還可以繼承類接口為什么可以繼承類內層原因&#xff1a;接口為什么可以繼承類 用得出的結論解釋最初的demo接口繼承類的一些限制 接口概念 接口&#xff08;Interfaces&#xff09;可…

【大廠AI課學習筆記NO.61】環境部署的選擇

主要是選擇單機和分布式、生產和開發環境的規劃等。 開發環境、測試環境、預發布環境和生產環境是軟件開發和部署過程中常見的幾個環境&#xff0c;它們各自的定義、區別、聯系以及實現的關鍵技術如下&#xff1a; 1. 開發環境&#xff08;Development Environment&#xff09…

Ai 快捷鍵學習

Ai 快捷鍵學習 Ait 鼠標滾輪 實現頁面的放大和縮小 空格鼠標左鍵 抓手工具 ctrl r 調出標尺&#xff0c;可以通過標尺來對其圖片 ctrl &#xff1b; 隱藏標尺 ctrl ‘ 調用網格標尺 再按一次就是取削 ctrl shiftz 反向撤回 tab 快速全屏 ctsls / ctrlshift…

完全解析淘寶天貓詳情接口API:購物小白也能秒變高手

在如今的電商領域中&#xff0c;淘寶和天貓是最為重要和熱門的平臺之一。作為購物平臺的用戶&#xff0c;我們通常只是瀏覽商品的頁面&#xff0c;點擊購買和支付&#xff0c;卻未能深入了解背后的技術信息。然而&#xff0c;淘寶天貓詳情接口API的了解和運用&#xff0c;聯訊數…

力扣hot4--雙指針

題目&#xff1a; 雙指針想法&#xff1a; i 指針在數組不為 0 的地方停留&#xff0c;j 指針在每個地方停留&#xff0c;依次交換 i 和 j 指針。當 i 指針遍歷完所有數組元素時&#xff0c;j 指針指向的元素及后面的元素都為0。 代碼如下&#xff1a; C版本 class Solution …

冒泡、插入、希爾、選擇、堆排序、快速排序(附源碼)

目錄 插入排序&#xff1a; 核心思想&#xff1a; 時間復雜度&#xff1a; 冒泡排序&#xff1a; 核心思想&#xff1a; 時間復雜度&#xff1a; 希爾排序&#xff1a; 核心思想&#xff1a; 時間復雜度&#xff1a; 選擇排序&#xff1a; 核心思想&#xff1a; 時間…

告別手動填寫邀請碼,這款App數據統計工具幫你輕松實現

在移動互聯網時代&#xff0c;App的推廣和運營已成為各大企業的必修課。然而&#xff0c;面對錯綜復雜的推廣渠道和浩如煙海的數據&#xff0c;如何精準地追蹤用戶來源、優化推廣策略&#xff0c;一直是困擾著運營者的難題。今天&#xff0c;我們就來聊聊一款能夠幫助你輕松解決…

[C++核心編程](七):類和對象——運算符重載*

目錄 四則運算符重載 左移運算符重載 遞增運算符重載 賦值運算符重載 關系運算符重載 函數調用運算符重載 對已有的運算符重新進行定義&#xff0c;賦予其另一種功能&#xff0c;以適應不同的數據類型 四則運算符重載 對自定義數據類型實現四則運算&#xff08;加減乘除&…

新火種AI|AI商業中的里程碑事件已敲定! 歐盟27國一致通過《人工智能法案》。

作者&#xff1a;小巖 編輯&#xff1a;彩云 根據路透社2月2日消息&#xff0c;歐盟國家就《人工智能法案》立法正式達成協議。 此次立法的成功堪稱AI商業領域上的里程碑事件。因為單從商業視角來看&#xff0c;這一法案的通過率先為歐盟內部的人工智能創新提供了明確的法律…

在 Linux 上用 zram 替代傳統交換空間 | Linux 中國

我在我的電腦上花了很多時間&#xff08;我是說工作&#xff09;&#xff0c;我發現了很多有趣的東西。其中最近引起我注意的是 zram0 設備。我是在幾個月前寫一篇文章時第一次注意到它&#xff0c;它顯示在 lsblk 命令的輸出中&#xff1a; # lsblk NAME MAJ:MIN RM…

【VPX637】基于XCKU115 FPGA+ZU15EG MPSOC的6U VPX雙FMC接口通用信號處理平臺

VPX637是一款基于6U VPX總線架構的通用實時信號處理平臺&#xff0c;該平臺采用一片Xilinx的高性能Kintex UltraScale系列FPGA&#xff08;XCKU115-2FLVF1924I&#xff09;作為預處理單元&#xff0c;外掛2個FMC擴展接口&#xff0c;來完成數據采集、數據回放以及實時信號處理算…

[動態規劃,DFS深度搜索]滑雪

滑雪 題目描述 Michael喜歡滑雪&#xff0c;這并不奇怪&#xff0c;因為滑雪的確很刺激。可是為了獲得速度&#xff0c;滑的區域必須向下傾斜&#xff0c;而且當你滑到坡底&#xff0c;你不得不再次走上坡或者等待升降機來載你。Michael想知道在一個區域中的最長底滑坡。區域…