当前位置: 首页 > news >正文

尚硅谷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应该存在哪个槽位上

相关文章:

  • day41 python图像识别任务
  • Unity 中实现首尾无限循环的 ListView
  • 机房网络设备操作安全管理制度
  • OpenCV中的重要、常用知识点汇总(图像处理、特征检测与匹配、图像分割与轮廓分析、视频处理与分析和机器学习与深度学习等)
  • 云服务器系统日志占满磁盘怎么办?
  • 下一代液晶显示底层技术与九天画芯的技术突围
  • 5. 算法与分析 (2)
  • 企业应用AI对向量数据库选型思考
  • 【python深度学习】Day 40 训练和测试的规范写法
  • 深入解析Go语言数据类型:从底层到高级应用
  • 历年浙江大学计算机保研上机真题
  • 0-EATSA-GNN:基于图节点分类师生机制的边缘感知和两阶段注意力增强图神经网络(code)
  • 【Android】如何抓取 Android 设备的 UDP/TCP 数据包?
  • SOC-ESP32S3部分:20-SPISPI屏幕驱动
  • 【Docker管理工具】部署Docker管理面板DweebUI
  • 鲲鹏Arm+麒麟V10,国产化信创 K8s 离线部署保姆级教程
  • 鸿蒙OSUniApp页面切换动效实战:打造流畅精致的转场体验#三方框架 #Uniapp
  • InnoDB引擎逻辑存储结构及架构
  • 【图像处理基石】如何进行图像畸变校正?
  • 面试中的项目经验考查:如何让实战经历成为你的决胜王牌
  • 布局网站开发/绍兴seo排名
  • 在线视频教育网站开发/seo数据是什么意思
  • 无网站做网赚/网络营销产品
  • 嘉兴服饰网站建设/百度公司招聘官网最新招聘
  • 网站做微信接口吗/百度上传自己个人简介
  • 普通电脑怎么建设网站/企业网站优化软件