当前位置: 首页 > 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应该存在哪个槽位上

http://www.xdnf.cn/news/731521.html

相关文章:

  • 智慧工厂整体解决方案
  • 基于地理特征金字塔的层次化AI定位方案:从人脑推理到卫星图谱的跨尺度匹配
  • 晨控CK-UR08与欧姆龙PLC配置Ethernet/IP通讯连接操作手册
  • React从基础入门到高级实战:React 高级主题 - 性能优化:深入探索与实践指南
  • MOT challenge使用方法及数据集说明
  • 01 redis 的环境搭建
  • dockers搭建mysql环境
  • GraalVM加持下的Quarkus极速启动
  • 华为交换机S12708常用命令
  • 尚硅谷-尚庭公寓部署文档
  • 什么是“会来事”?
  • OpenInventor 介绍和使用指南
  • @Async 注解 走的是主线程 还是子线程呢
  • 开源协议:构建全球技术协作的基石
  • 判断它是否引用了外部库
  • LDAP(Lightweight Directory Access Protocol,轻量级目录访问协议)认证
  • 对 AI Agent 定义的一些探讨
  • 《TCP/IP 详解 卷1:协议》第2章:Internet 地址结构
  • Java EE初阶——网络初识
  • 关于表连接
  • 星际巡航-第16届蓝桥第6次STEMA测评Scratch真题第4题
  • RedisTemplate查询不到redis中的数据问题(序列化)
  • 【数据库】并发控制
  • 什么是AI Agent?大白话新手教学
  • JAVA单商户易联云小票打印替换模板
  • ISOLAR软件生成报错处理(七)
  • css实现文字渐变
  • 【git stash切换】
  • 云原生DMZ架构实战:基于AWS CloudFormation的安全隔离区设计
  • 在React框架中使用Braft Editor集成Table表格的详细教程