Redis-Redis高可用集群之水平擴展

????????Redis3.0以后的版本雖然有了集群功能,提供了比之前版本的哨兵模式更高的性能與可用性,但是集群的水平擴展卻比較麻煩,今天就來帶大家看看redis高可用集群如何做水平擴展,原始集群(見下圖)由6個節點組成,6個節點分布在三臺機器上,采用三主三從的模式

0

1、啟動集群

# 啟動整個集群

/usr/local/redis-5.0.3/src/redis-server /usr/local/redis-cluster/8001/redis.conf
/usr/local/redis-5.0.3/src/redis-server /usr/local/redis-cluster/8002/redis.conf
/usr/local/redis-5.0.3/src/redis-server /usr/local/redis-cluster/8003/redis.conf
/usr/local/redis-5.0.3/src/redis-server /usr/local/redis-cluster/8004/redis.conf
/usr/local/redis-5.0.3/src/redis-server /usr/local/redis-cluster/8005/redis.conf
/usr/local/redis-5.0.3/src/redis-server /usr/local/redis-cluster/8006/redis.conf

# 客戶端連接8001端口的redis實例

/usr/local/redis-5.0.3/src/redis-cli -a zhuge -c -h 192.168.0.61 -p 8001
# 查看集群狀態
192.168.0.61:8001> cluster? nodes

0

?從上圖可以看出,整個集群運行正常,三個master節點和三個slave節點,8001端口的實例節點存儲0-5460這些hash槽,8002端口的實例節點存儲5461-10922這些hash槽,8003端口的實例節點存儲10923-16383這些hash槽,這三個master節點存儲的所有hash槽組成redis集群的存儲槽位,slave點是每個主節點的備份從節點,不顯示存儲槽位

2、集群操作

我們在原始集群基礎上再增加一主(8007)一從(8008),增加節點后的集群參見下圖,新增節點用虛線框表示

0

  • 增加redis實例

# 在/usr/local/redis-cluster下創建8007和8008文件夾,并拷貝8001文件夾下的redis.conf文件到8007和8008這兩個文件夾下

mkdir 8007 8008
cd 8001
cp redis.conf /usr/local/redis-cluster/8007/
cp redis.conf /usr/local/redis-cluster/8008/# 修改8007文件夾下的redis.conf配置文件
vim /usr/local/redis-cluster/8007/redis.conf
# 修改如下內容:
port:8007
dir /usr/local/redis-cluster/8007/
cluster-config-file nodes-8007.conf# 修改8008文件夾下的redis.conf配置文件
vim /usr/local/redis-cluster/8008/redis.conf
修改內容如下:
port:8008
dir /usr/local/redis-cluster/8008/
cluster-config-file nodes-8008.conf# 啟動8007和8008倆個服務并查看服務狀態
/usr/local/redis-5.0.3/src/redis-server /usr/local/redis-cluster/8007/redis.conf
/usr/local/redis-5.0.3/src/redis-server /usr/local/redis-cluster/8008/redis.conf
ps -el | grep redis

  • 查看redis集群的命令幫助

cd /usr/local/redis-5.0.3
src/redis-cli --cluster help

0

1.create:創建一個集群環境host1:port1 ... hostN:portN

2.call:可以執行redis命令

3.add-node:將一個節點添加到集群里,第一個參數為新節點的ip:port,第二個參數為集群中任意一個已經存在的節點的ip:port

4.del-node:移除一個節點

5.reshard:重新分片

6.check:檢查集群狀態

  • 配置8007為集群主節點

# 使用add-node命令新增一個主節點8007(master),前面的ip:port為新增節點,后面的ip:port為已知存在節點,看到日志最后有"[OK] New node added correctly"提示代表新節點加入成功

/usr/local/redis-5.0.3/src/redis-cli -a zhuge --cluster add-node 192.168.0.61:8007 192.168.0.61:8001

# 查看集群狀態
/usr/local/redis-5.0.3/src/redis-cli -a zhuge -c -h 192.168.0.61 -p 8001
192.168.0.61:8001> cluster nodes

0

注意:當添加節點成功以后,新增的節點不會有任何數據,因為它還沒有分配任何的slot(hash槽),我們需要為新節點手工分配hash槽

# 使用redis-cli命令為8007分配hash槽,找到集群中的任意一個主節點,對其進行重新分片工作。

/usr/local/redis-5.0.3/src/redis-cli -a zhuge --cluster reshard 192.168.0.61:8001
輸出如下:

... ...

How many slots do you want to move (from 1 to 16384)? 600

(ps:需要多少個槽移動到新的節點上,自己設置,比如600個hash槽)

What is the receiving node ID? 2728a594a0498e98e4b83a537e19f9a0a3790f38

(ps:把這600個hash槽移動到哪個節點上去,需要指定節點id)

Please enter all the source node IDs.

? Type 'all' to use all the nodes as source nodes for the hash slots.

? Type 'done' once you entered all the source nodes IDs.

Source node 1:all

(ps:輸入all為從所有主節點(8001,8002,8003)中分別抽取相應的槽數指定到新節點中,抽取的總槽數為600個)

?... ...

Do you want to proceed with the proposed reshard plan (yes/no)? yes

(ps:輸入yes確認開始執行分片任務)

... ...

# 查看下最新的集群狀態
/usr/local/redis-5.0.3/src/redis-cli -a zhuge -c -h 192.168.0.61 -p 8001
192.168.0.61:8001> cluster nodes

0

如上圖所示,現在我們的8007已經有hash槽了,也就是說可以在8007上進行讀寫數據啦!到此為止我們的8007已經加入到集群中,并且是主節點(Master)

  • 配置8008為8007的從節點

# 添加從節點8008到集群中去并查看集群狀態
/usr/local/redis-5.0.3/src/redis-cli -a zhuge --cluster add-node 192.168.0.61:8008 192.168.0.61:8001

0

如圖所示,還是一個master節點,沒有被分配任何的hash槽。

# 我們需要執行replicate命令來指定當前節點(從節點)的主節點id為哪個,首先需要連接新加的8008節點的客戶端,然后使用集群命令進行操作,把當前的8008(slave)節點指定到一個主節點下(這里使用之前創建的8007主節點)

/usr/local/redis-5.0.3/src/redis-cli -a zhuge -c -h 192.168.0.61 -p 8008
192.168.0.61:8008> cluster replicate 2728a594a0498e98e4b83a537e19f9a0a3790f38  #后面這串id為8007的節點id
# 查看集群狀態,8008節點已成功添加為8007節點的從節點

0

  • ?刪除8008從節點

# 用del-node刪除從節點8008,指定刪除節點ip和端口,以及節點id(紅色為8008節點id)

/usr/local/redis-5.0.3/src/redis-cli -a zhuge --cluster del-node 192.168.0.61:8008 a1cfe35722d151cf70585cee21275565393c0956

# 再次查看集群狀態,如下圖所示,8008這個slave節點已經移除,并且該節點的redis服務也已被停止

0

  • 刪除8007主節點

????????最后,我們嘗試刪除之前加入的主節點8007,這個步驟相對比較麻煩一些,因為主節點的里面是有分配了hash槽的,所以我們這里必須先把8007里的hash槽放入到其他的可用主節點中去,然后再進行移除節點操作,不然會出現數據丟失問題(目前只能把master的數據遷移到一個節點上,暫時做不了平均分配功能),執行命令如下:

/usr/local/redis-5.0.3/src/redis-cli -a zhuge --cluster reshard 192.168.0.61:8007

輸出如下:

?... ...

How many slots do you want to move (from 1 to 16384)? 600

What is the receiving node ID? dfca1388f124dec92f394a7cc85cf98cfa02f86f

(ps:這里是需要把數據移動到哪?8001的主節點id)

Please enter all the source node IDs.

? Type 'all' to use all the nodes as source nodes for the hash slots.

? Type 'done' once you entered all the source nodes IDs.

Source node 1:2728a594a0498e98e4b83a537e19f9a0a3790f38

(ps:這里是需要數據源,也就是我們的8007節點id)

Source node 2:done

(ps:這里直接輸入done 開始生成遷移計劃)

?... ...

Do you want to proceed with the proposed reshard plan (yes/no)? Yes

(ps:這里輸入yes開始遷移)

至此,我們已經成功的把8007主節點的數據遷移到8001上去了,我們可以看一下現在的集群狀態如下圖,你會發現8007下面已經沒有任何hash槽了,證明遷移成功!

0

# 最后我們直接使用del-node命令刪除8007主節點即可

/usr/local/redis-5.0.3/src/redis-cli -a zhuge --cluster del-node 192.168.0.61:8007 2728a594a0498e98e4b83a537e19f9a0a3790f38

# 查看集群狀態,一切還原為最初始狀態啦!大功告成!

0

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

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

相關文章

基于DCT變換的圖像壓縮解壓縮算法matlab仿真

目錄 1.算法運行效果圖預覽 2.算法運行軟件版本 3.部分核心程序 4.算法理論概述 4.1、DCT變換原理 4.2、基于DCT的圖像壓縮 4.3、基于DCT的圖像解壓縮 5.算法完整程序工程 1.算法運行效果圖預覽 2.算法運行軟件版本 MATLAB2022a 3.部分核心程序 ...................…

動態loading

項目中需要用到動圖loading的地方可以下載 https://www.intogif.com/loading/ 高級點的還有css動畫;692 Loaders: CSS & Tailwind 692 Loaders: CSS & Tailwind

【Python】np.unique() 介紹與使用

簡述 numpy.unique:用于去除數組中重復元素,并從小到大排序(找到唯一元素并排序)。 def unique(ar, return_indexFalse, return_inverseFalse,return_countsFalse, axisNone):ar: 這是輸入的數組或類數組對象。return_index: 如…

【數字信號處理】傅里葉變換的離散性與周期性

傅里葉變換的離散性與周期性 2023年11月21日 #elecEngeneer 文章目錄 傅里葉變換的離散性與周期性1. 符號說明2. 具體分析3. 序列的序號表示的DFT下鏈 1. 符號說明 t : 連續時間(時域)變量 ω : 頻域變量,aka角頻率 g : 時域函數 G : 頻域函數 n : 時域采樣序列序號…

MAV3D:從文本描述中生成三維動態場景

Singer U, Sheynin S, Polyak A, et al. Text-to-4d dynamic scene generation[J]. arXiv preprint arXiv:2301.11280, 2023. MAV3D 是 Meta AI 研究者們提出的一種從文本描述生成三維動態場景的方法。從所提供的文本生成的動態視頻輸出可以從任何攝像機位置和角度查看&#xf…

Rust語言入門教程(一) - 簡介及Cargo使用

Rust編程入門 為什么學習Rust 我本人是一個DevOps工程師,并不是專職的開發人員,但需要了解各種各樣的語言的基本知識和特性,以便在不同的項目中幫助開發人員設計軟件架構,部署流程以及進行錯誤排查和調試。但是對任何新生的優秀…

springboot 外部化配置

背景:修改jar包中的配置比較麻煩 項目部署的時候放一個配置文件在jar包外 配置文件優先級: 1.jar包內的application.properties/yaml 2.jar包內的application-{profile}.properties/yaml 3.jar包外的application.properties/yaml 4.jar包外的application-{profile}.properties…

【算法】緩存淘汰算法

目錄 1.概述2.代碼實現2.1.FIFO2.2.LRU2.3.LFU2.4.Clock2.5.Random 3.應用 1.概述 緩存淘汰策略是指在緩存容量有限的情況下,當緩存空間不足時決定哪些緩存項應當被移除的策略。緩存淘汰策略的目標是盡可能地保持緩存命中率高,同時合理地利用有限的緩存…

(保姆級教程)Mysql中事務的概念,什么是事務,如何使用事務,以及事務的隔離級別,什么是臟讀、幻讀,代碼演示

繼續講解 Mysql 數據庫中最重要的一個概念:事務 文章目錄 事務1.1 什么是事務1.2 執行原理1.3 如何操作事務1.4 事務的特點(ACID原則)1.5 事務并發1.6 事務隔離級別1.6.1 事務并發問題操作演示1.6.2 臟讀演示1.6.3 不可重復讀演示1.6.4 幻讀演…

二叉樹的順序結構及實現

目錄 1 二叉樹的順序結構2. 堆的概念及結構3 .堆的實現(小堆) 1 二叉樹的順序結構 普通的二叉樹是不適合用數組來存儲的,因為可能會存在大量的空間浪費。而完全二叉樹更適合使用順序結構存儲。現實中我們通常把堆(一種二叉樹)使用順序結構的數組來存儲,…

【Pytorch】Visualization of Feature Maps(3)

學習參考來自: Image Style Transform–關于圖像風格遷移的介紹github:https://github.com/wmn7/ML_Practice/tree/master/2019_06_03 文章目錄 風格遷移 風格遷移 風格遷移出處: 《A Neural Algorithm of Artistic Style》(ar…

瀏覽器沒收到返回,后端也沒報錯,php的json_encode問題bug

今天網站遇到個問題,后端返回異常,但是瀏覽器狀態碼200,但是看不到結果。經過排查發現,我們在返回結果的時候使用了json_encode返回給前端,結果里面的字符編碼異常,導致json_encode異常,但是php…

前綴和——724. 尋找數組的中心下標

文章目錄 🍓1. 題目🫒2. 算法原理🦄解法一:暴力枚舉🦄解法二:前綴和 🥔3. 代碼實現 🍓1. 題目 題目鏈接:724. 尋找數組的中心下標 - 力扣(LeetCode&#xff0…

【限時免費】20天拿下華為OD筆試之【前綴和】2023B-數字游戲【歐弟算法】全網注釋最詳細分類最全的華為OD真題題解

文章目錄 題目描述與示例題目描述輸入描述輸出描述示例一輸入輸出 示例二輸入輸出說明 解題思路前綴和簡單的數學推導哈希集合的使用 代碼PythonJavaC時空復雜度 華為OD算法/大廠面試高頻題算法練習沖刺訓練 題目描述與示例 題目描述 小明玩一個游戲。 系統發1n張牌&#xff…

某60區塊鏈安全之未初始化的存儲指針實戰一學習記錄

區塊鏈安全 文章目錄 區塊鏈安全未初始化的存儲指針實戰一實驗目的實驗環境實驗工具實驗原理實驗過程 未初始化的存儲指針實戰一 實驗目的 學會使用python3的web3模塊 學會分析以太坊智能合約未初始化的存儲指針漏洞 找到合約漏洞進行分析并形成利用 實驗環境 Ubuntu18.04操…

深度學習之八(生成對抗網絡--Generative Adversarial Networks,GANs)

概念 生成對抗網絡(Generative Adversarial Networks, GANs)是一種深度學習模型,由 Ian Goodfellow 等人于2014年提出。GAN 的目標是通過訓練兩個神經網絡(生成器和判別器),使得生成器能夠生成與真實數據相似的樣本,而判別器能夠區分真實樣本和生成樣本。這兩個網絡相…

多元邏輯回歸模型的概念、模型檢驗以及應用

多元邏輯回歸是邏輯回歸的一種擴展,用于處理多類別分類問題。在二元邏輯回歸中,我們通過一個邏輯函數(也稱為S形函數)將輸入特征映射到一個概率值,用于預測兩個類別中一個的概率。而在多元邏輯回歸中,我們面…

沃趣班11月月考題目解析

沃趣班11月月考題目解析 1.在oracle中創建用戶時,若未設置default tablespace關鍵字,則oracle將哪個表空間分配給用戶作為默認表空間 答案:D.user SQL> create user mytest identified by 123456; SQL> grant connect to mytest; SQL…

【開源】基于Vue.js的海南旅游景點推薦系統的設計和實現

項目編號: S 023 ,文末獲取源碼。 \color{red}{項目編號:S023,文末獲取源碼。} 項目編號:S023,文末獲取源碼。 目錄 一、摘要1.1 項目介紹1.2 項目錄屏 二、功能模塊2.1 用戶端2.2 管理員端 三、系統展示四…

CSS特效017:球體漲水的效果

CSS常用示例100專欄目錄 本專欄記錄的是經常使用的CSS示例與技巧,主要包含CSS布局,CSS特效,CSS花邊信息三部分內容。其中CSS布局主要是列出一些常用的CSS布局信息點,CSS特效主要是一些動畫示例,CSS花邊是描述了一些CSS…