尚硅谷redis7 90-92 redis集群分片之集群擴容

90?redis集群分片之集群擴容

三主三從不夠用了,進行擴容變為4主4從

問題:1.新建兩個redis實例,怎么加入原有集群?2.原有的槽位分3段,又加進來一個槽位怎么算?

新建6387、6388兩個服務實例配置文件+新建后啟動

首先新建redisCluser6387.conf、redisCluser6388.conf文件:以redisCluser6387.conf為例

bind 0.0.0.0
daemonize yes
protected-mode no
port 6387
logfile "/myredis/cluster/cluster6387. log"
pidfile /myredis/cluster6387. pid
dir /myredis/cluster
dbfilename dump6387.rdb
appendonly yes
appendfilename "appendonly6387.aof"
requirepass 111111
masterauth 111111

cluster-enabled yes
cluster-config-file nodes-6387. conf
cluster-node-timeout 5000

啟動87/88兩個新的節點實例

此時他們自己都是獨立的master

將新增的6387節點(空槽號)作為master節點加入原集群

將新增的6387作為master節點加入原有集群
redis-cli -a 密碼 -- cluster add-node 市己實際IP地址:6387 自己實際IP地址:6381
6387 就是將要作為master新增節點
6381 就是原來集群節點里面的領路人,相當于6387拜拜6381的碼頭從而找到組織加入集群
redis-cli -a 111111 -- cluster add-node 192.168.111.174:6387 192.168.111.175:6381

檢查集群情況第1次

使用 redis-cliRedis 集群節點進行健康檢查(cluster check)

部分含義
redis-cliRedis 的命令行客戶端工具
-a 111111使用密碼 111111 連接(如果 Redis 開啟了密碼驗證)
--cluster check檢查集群狀態
192.168.111.185:6381指定集群中任意一個節點(IP 和端口)作為入口

重新分派槽號(reshard)

命令:redis-cli -a 密碼 -- cluster reshard IP地址:端口號
redis-cli -a 密碼 -- cluster reshard 192.168.111.175:6381

部分含義
redis-cliRedis 客戶端
-a 密碼指定連接密碼
--cluster reshard表示要對集群執行“重新分片”操作(即遷移 slot)
192.168.111.175:6381集群中任意一個節點(作為入口)

作用是:對 Redis 集群進行手動分片(reshard)操作,讓某些槽(slots)從一個節點遷移到另一個節點。執行該命令后,它不會立刻遷移,而是進入交互模式,你需要輸入更多信息。

執行流程(進入交互模式)后會問你:
  1. 要遷移多少個 slot?(如 1000)

    How many slots do you want to move (from 1 to 16384)?由于16384/4=4096 因此這里填4096

  2. 目標節點的 ID?

    誰來接收這些新分出來的槽位?找到6387的槽位ID進行輸入

    What is the receiving node ID?

  3. 是否自動選擇源節點?

    Please enter all the source node IDs. Type 'all' to use all the nodes as source nodes. 輸入all

  4. 確認遷移(yes/no)

? ? ? ? ? 輸入yes

檢查集群情況第2次

4主3從

槽號如何分派?

6387的槽號是3段,0-1364,5461-6826,10923-12287

為什么6387是3個新的區間,以前的master卻還是連續的?
重新分配成本太高,所以前3家各自勻出來一部分,從6381/6382/6383三個舊節點分別勻出1364個坑位給新節點6387

為主節點6387分配從節點6388

命令:redis-cli -a 密碼 -- cluster add-node ip:新slave端口 ip:新master端口 -- cluster-slave -- cluster-master-id 新主機節點ID

redis-cli -a 111111 -- cluster add-node 192.168.111.174:6388 192.168.111.174:6387 -- cluster-slave
-- cluster-master-id 4feb6a7ee0ed2b39ff86474cf4189ab2a554a40f ------- 這個是6387的編號,按照自己實際情況?

檢查集群情況第3次

91?redis集群分片之集群縮容

1先清除從節點6388
2清出來的槽號重新分配給6381
3再刪除6387
4 恢復成3主3從

目的:6387和6388下線

檢查集群情況第一次,先獲得從節點6388的節點ID

redis-cli -a 密碼 -- cluster check 192.168.111.174:6388

從集群中將4號從節點6388刪除

命令:redis-cli -a 密碼 -- cluster del-node ip:從機端口 從機6388節點ID

redis-cli -a 111111 -- cluster del-node 192.168.111.174:6388 218e7b8b4f81be54ff173e4776b4f4faaf7c13da

將6387的槽號清空,重新分配,本例將清出來的槽號都給6381

redis-cli -a 111111 -- cluster reshard 192.168.111.175:6381

使用密碼 111111 登錄到 Redis 集群中的節點 192.168.111.175:6381,并對該 Redis 集群執行 手動分片遷移(reshard)操作

# 啟動 reshard 工具
redis-cli -a 111111 --cluster reshard 192.168.111.175:6381

# 提示輸入要遷移多少個槽(例如 1000)
How many slots do you want to move (from 1 to 16384)? 4096

# 提示輸入目標節點的 Node ID(槽位遷移到哪個節點上)
What is the receiving node ID??6381結點id,由它接受空出來的槽位

# 提示輸入源節點 ID(要從哪些節點遷移槽位,可輸入 all)
Please enter all the source node IDs.???????? 6387結點id,告知刪除6387
Type 'all' to use all the nodes as source nodes. all

Source node #1:4feb6a7ee0ed2b39ff86474cf4189ab2a554a40f
Source node #2:done

# 最后確認是否執行
Do you want to proceed with the proposed reshard plan (yes/no)? yes
?

檢查集群情況第二次

redis-cli -a 111111 -- cluster check 192.168.111.175:6381

4096個槽位都指給6381,它變成了8192個槽位,相當于全部都給6381了,不然要輸入3次,一鍋端

6387變成了6381的從機

將6387刪除

命令:redis-cli-a密碼 -- cluster del-node ip:端口 6387節點ID

redis-cli -a 111111 -- cluster del-node 192.168.111.174:6387 4feb6a7ee0ed2b39ff86474cf4189ab2a554a40f

檢查集群情況第三次,6387/6388被徹底祛除

redis-cli -a 111111 -- cluster check 192.168.111.175:6381

92 redis集群分片之小總結

集群常用操作命令和CRC16算法分析

不在同一個slot槽位下的多鍵操作支持不好,通識占位符登場

mget k1 k2 k3? //在集群環境下報錯

不在同一個slot槽位下的鍵值無法使用mset,mget等多建操作

可以通過{}來定義同一組的概念,使Key中{}內相同內容的鍵值對放到一個slot槽位去。

將3個k整體打包到同一個組z存放到8157這一個槽位上。此時可以讀取:


Redis集群有16384個哈希槽,每個key通過CRC16校驗后對16384取模來決定放置哪個槽。集群的每個節點負責一部分hash槽

CRC16是由C語言源碼編輯的

常用命令

集群是否完整才能對外提供服務的操作設置

????????cluster-require-full-coverage

默認YES,現在集群架構是3主3從的redis cluster由3個master平分16384個slot,每個master的小集群負責1/3的slot,對應一部分數據。cluster-require-full-coverage: 默認值yes,即需要集群完整性。方可對外提供服務 通常情況,如果這3個小集群中,任何一個(1主1從)掛了,你這個集群對外可提供的數據只有2/3了,整個集群是不完整的,redis默認在這種情況下,是不會對外提供服務的。
如果你的訴求是,集群不完整的話也需要對外提供服務,需要將該參數設置為no,這樣的話你掛了的那個小集群是不行了,但是其他的小集群仍然可以對外提供服務。

CLUSTER COUNTKEYSINSLOT 槽位數字編號

查看該槽位是占位還是空閑 1被占用 0沒被占用

?

CLUSTER KEYSLOT 鍵名稱

查看key應該存在哪個槽位上

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

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

相關文章

尚硅谷-尚庭公寓部署文檔

文章目錄 整合版部署文檔部署架構圖1. 項目目錄結構增加注釋的 Dockerfile 配置(1) 后端服務1 Dockerfile (backend/service1/Dockerfile)(2) 后端服務2 Dockerfile (backend/service2/Dockerfile) Dockerfile 配置說明重要注意事項3. Nginx 配置(1) 主配置文件 (nginx/nginx.c…

Android Studio 介紹

如何關閉或徹底刪除一個工程 基于Android Studio的android入門——如何關閉或徹底刪除一個工程 搜索內容 Android Studio高效指南:快速查找技巧大揭秘 build命令:gradle app:assembleDebug 命令解析 1. 命令結構與作用 核心功能:該命令…

JAVA與C語言之間的差異(一)

一、代碼習慣以及主函數 JAVA中{在使用的時候不要換行 public static void main(String[] args) {int[] array {1, 2, 3};for(int i 0; i < array.length; i){System.out.println(array[i] " ");}} 其次&#xff0c;以main函數為主函數&#xff1a; public …

華為OD機試真題——開放日活動/取出盡量少的球(2025A卷:200分)Java/python/JavaScript/C++/C語言/GO六種最佳實現

2025 A卷 200分 題型 本文涵蓋詳細的問題分析、解題思路、代碼實現、代碼詳解、測試用例以及綜合分析; 并提供Java、python、JavaScript、C++、C語言、GO六種語言的最佳實現方式! 本文收錄于專欄:《2025華為OD真題目錄+全流程解析/備考攻略/經驗分享》 華為OD機試真題《開放…

我的3種AI寫作節奏搭配模型,適合不同類型寫作者

—不用內耗地高效寫完一篇內容&#xff0c;原來可以這樣搭配AI ?? 開場&#xff1a;為什么要“搭配節奏”寫作&#xff1f; 很多人以為用AI寫作&#xff0c;就是丟一句提示詞&#xff0c;然后“等它寫完”。 但你有沒有遇到這些情況&#xff1a; AI寫得很快&#xff0c;學境…

【知識點】第1章:程序設計基本方法

文章目錄 知識點整理計算機的概念程序設計語言Python 語言概述Python 語言開發環境配置程序的基本編寫方法 練習題簡答題判斷題 知識點整理 計算機的概念 計算機的定義&#xff1a;計算機是根據指令操作數據的設備。 計算機的兩個基本特性&#xff1a; 功能性&#xff1a;計…

const ‘不可變’到底是值不變還是地址不變

const的基礎規則 聲明時必須初始化? const a; // ? 報錯&#xff1a;Missing initializer in const declaration const b 10; // ? 正確塊級作用域?&#xff08;const 的作用域僅限于聲明它的代碼塊&#xff09; if (true) {const x 100; } console.log(x); // ? 報錯…

Netty 實戰篇:為自研 RPC 框架加入異步調用與 Future 支持

我們在上篇實現了一個輕量級 RPC 框架&#xff0c;現在要進一步優化 —— 加入異步響應支持&#xff0c;讓 RPC 通信變得真正高效、非阻塞、支持并發。 一、為什么需要異步調用&#xff1f; 上篇的 RPC 框架是“同步阻塞”的&#xff1a; 每次發送請求后&#xff0c;必須等待服…

for(auto a:b)和for(auto a:b)的區別

#include<iostream> using namespace std; int main() {string s( "hello world" );for (auto c:s)c t ;cout<<s<<endl; //結果為hello worldfor (auto &c:s)c t ;cout<<s<<endl; //結果為ttttttttttt }for(auto a:b)中b為一…

超級對話2:大跨界且大綜合的學問融智學應用場景述評(不同第三方的回應)之二

摘要&#xff1a;《人機協同文明升維行動框架》提出以HIAICI/W公式推動認知革命&#xff0c;構建三大落地場景&#xff1a;1&#xff09;低成本認知增強神經接口實現300%學習效率提升&#xff1b;2&#xff09;全球學科活動化閃電戰快速轉化知識體系&#xff1b;3&#xff09;人…

多方法解決MNIST數字識別

全連接層 import torch from torchvision import datasets, transforms import torch.nn as nn import torch.optim as optim from tqdm import tqdm # 用于進度條顯示 import os# 定義數據預處理(標準化+Tensor轉換) transform = transforms.Compose([transforms.ToTensor…

安裝 Node.js 和配置 cnpm 鏡像源

一、安裝 Node.js 方式一&#xff1a;官網下載&#xff08;適合所有系統&#xff09; 訪問 Node.js 官網 推薦選擇 LTS&#xff08;長期支持&#xff09;版本&#xff0c;點擊下載安裝包。 根據系統提示一步步完成安裝。 方式二&#xff1a;通過包管理器安裝&#xff08;建…

vue 自定義組件的事件綁定

基本知識點 &#x1f3af;什么是自定義事件 自定義事件是子組件向父組件發送消息的機制&#xff0c;通常用于通知父組件發生了某些行為或狀態變化。 &#x1f4cc; 基本語法 子組件觸發事件&#xff08;$emit&#xff09; this.$emit(事件名, 參數);或在 const emit de…

進程同步機制-信號量機制-記錄型信號量機制中的的wait和signal操作

wait和signal是記錄型信號量機制中用于實現進程同步與互斥的兩個重要操作&#xff0c; wait 操作 wait(semaphores *S) {S->value --;if (S->value<0) block(S->list) }請求資源&#xff1a;S->value --; 這一步表示進程請求一個單位的資源&#xff0c;將信號…

sd webui 安裝sd-webui-TemporalKit 加載報錯解決辦法

ModuleNotFoundError: No module named moviepy.editer 報錯內容類似上面截圖&#xff0c;我的已經解決&#xff0c;暫時無法截圖了 處理方法&#xff1a; 重點說明&#xff1a;插件目錄必須是TemporalKit&#xff0c;不能更改 進入到安裝目錄&#xff1a;extensions\Tempor…

decimal.js庫處理js浮點數精度誤差問題

1、經常遇到前端計算金額的時候出現精度誤差問題&#xff0c;導致前后端計算的金額不一致導致校驗過不去的情況&#xff0c;相信有不少人寫過Math.floor(e*100)/100來實現保留2位小數&#xff0c;但是這么寫就會出現上面的精度問題。怎么解決呢&#xff1f;這里使用的是decimal…

如何將 WSL 的 Ubuntu-24.04 遷移到其他電腦

在使用 Windows Subsystem for Linux (WSL) 時&#xff0c;我們可能會遇到需要將現有的 WSL 環境遷移到其他電腦的情況。無論是為了備份、更換設備&#xff0c;還是在不同電腦之間共享開發環境&#xff0c;掌握遷移 WSL 子系統的方法都是非常有用的。本文將以 Ubuntu-24.04 為例…

RISCV——內核及匯編

RISCV——內核及匯編 小狼http://blog.csdn.net/xiaolangyangyang 1、寄存器組&#xff08;ABI&#xff09; 2、異常及中斷 XV6 trap&#xff08;二&#xff09;RISCV中斷異常處理/定時器中斷 mie&#xff1a;中斷開關mip&#xff1a;中斷狀態mstatus.mie&#xff1a;全局中斷…

算法日記32:埃式篩、gcd和lcm、快速冪、乘法逆元

一、埃式篩&#xff08;計算質數&#xff09; 1.1、概念 1.1.1、在傳統的計算質數中&#xff0c;我們采用單點判斷&#xff0c;即判斷(2~sqrt(n))是否存在不合法元素&#xff0c;若存在則判否&#xff0c;否則判是 1.1.2、假設&#xff0c;此時我們需要求1~1000的所有質數&am…

使用 mysqldump 獲取 MySQL 表的完整創建 DDL

要獲取 MySQL 中某個表的完整創建 DDL&#xff08;僅結構&#xff0c;不含數據&#xff09;&#xff0c;可以使用 mysqldump 工具的以下命令&#xff1a; 基本命令格式 bash mysqldump -h [主機名] -u [用戶名] -p --no-data --single-transaction --routines --triggers --…