Redis集群重新分片(新增/移除节点)【理论】

发布时间:2020-06-25 10:16:16

来源:51CTO

阅读:6915

作者:张德帅ya

栏目:数据库

redis集群重新分片原理:(增加或移除节点)

以增加节点为例:

我们只需要将已经分配给节点的哈希槽(hash slot),重新分配即可。

注:hash slot重新分配时,如果槽中存在key-value,那么key-value也将一起被分配出去。

例如:

node1的哈希槽:0-5000

node2的哈希槽:5001-10000

node3的哈希槽:10001-16383

现在新增node4:

我们可以将node3的哈希槽调整为:10001-15000、node4的哈希槽:15001-16383

也可以在三个现有节点中,各自分出一部分哈希槽,给新的节点。

redis集群的重新分片操作是由redis的集群管理软件redis-trib负责执行的,

但它不支持自动分片,需要自己计算从哪些节点上分配slot。

redis集群在重新分片时,客户端获取数据原理:

重新分片时,集群不需要下线,并且源节点和目标节点都可以继续处理命令请求。

在hash slot迁移过程中(一部分key-value在node3中,另一部分key-value在node4中)

如果客户端向node3发送一个与数据库key有关的命令:

1)node3会先在自己的数据库里面查找请求的key,

如果找到,直接执行客户端发送的命令。

2)如果没找到,node3给客户端返回一个ASK错误,指引客户端转向node4,

并且客户端需要再次发送想要执行的key相关的命令。

3)客户端转向node4,首先发送ASKING命令,然后再次发送想要执行的key相关的命令。

如果直接发送想要执行的key相关的命令,node4此时并不处理,

因为key所在的槽还未迁移完,槽还属于node3,会返回错误给客户端。

但如果先发送ASKING命令,node4在执行key相关的命令时,

不仅会检查key所属槽是否属于自己,

还会检查migration_slots_to数组(正在迁往自己的槽)

判断key相关的槽是否正在迁往自己,如果是的话,则执行key相关的命令。

mysql 集群怎么卸载节点_Redis集群重新分片(新增/移除节点)【理论】相关推荐

  1. 故障转移集群无法连接到节点_Redis集群以及自动故障转移测试

    在Redis中,与Sentinel(哨兵)实现的高可用相比,集群(cluster)更多的是强调数据的分片或者是节点的伸缩性,如果在集群的主节点上加入对应的从节点,集群还可以自动故障转移,因此相比Sen ...

  2. mysql多主集群_mysql galera多主集群

    1.特性 基于行复制的完全并行同步复制 实时多主架构,任意节点可读写 无延迟复制,事务零丢失,可靠健壮的读写体验. 自动化节点关系控制:节点故障自动摘除,节点加入自动协调 接近原生的MySQL数据库连 ...

  3. mysql 集群怎么卸载节点_Greenplum移除节点

    基于某某原因,我们的Greenplum需要卸载一个节点(测试环境的Greenplum集群),由于该集群使用了很久,里面有许多开发所需要的数据,所以在卸掉一个节点后,还要保证数据不会丢失. 当然,期间也 ...

  4. mysql redis集群 同步_redis集群和redis主从同步的区别

    很多人认为redis集群就是redis主从同步,其实redis集群跟redis主从同步的机制完全不一样. 1.redis集群包含主从同步:假如你配置了6个节点的redis-server做集群,那么使用 ...

  5. 博文推荐|Apache Doris 单节点 Docker 集群制作教程

    前言 Apache Doris 是当下非常流行的 MPP 架构 OLAP 数据库,很多同学想自学/测试 Doris 的使用和能力,但是又苦于没有环境或者畏惧冗长的编译+搭建过程,整个过程极大的劝退了很 ...

  6. MHA+Cetus+Mysql搭建读写分离的高可用集群

    架构图 Centos配置 免密登录 #先修改hostname(也会影响relay-log的名字,如果主从复制已经开始了,再修改hostname会导致主从复制断开),避免后续ssh key相互覆盖 ho ...

  7. redis哨兵集群数据迁移_redis集群数据迁移—redis-migrate-tool神器

    往常大家对数据的迁移可能会想到mysql.mongodb.oracle等数据库的迁移,对redis数据的迁移可能比较少,因为redis平时都是用来做缓存用,里面的数据无所谓.因为某些特殊场景下,red ...

  8. MySQL中间件之ProxySQL(13):ProxySQL集群

    返回ProxySQL系列文章:http://www.cnblogs.com/f-ck-need-u/p/7586194.html ProxySQL有原生的集群功能,但是这个原生的集群功能还正在试验阶段 ...

  9. mysql 集群架构_mysql企业常用集群架构

    转自 https://blog.csdn.net/kingice1014/article/details/76020061 1.mysql企业常用集群架构 在中小型互联网的企业中.mysql的集群一般 ...

最新文章

  1. java web项目使用log4j的使用笔记
  2. 简单实现迷你Vue框架
  3. python编写递归函数、求斐波那契数列第n项_Python非递归算法求解Fibonacci斐波那契数列...
  4. 图论—割点zcmu2095
  5. boost::geometry模块自定义Triangle的测试程序
  6. rabbitMQ消息队列 – 面板介绍及简单demo
  7. 使用Maven Failsafe和JUnit @Category将集成测试与单元测试分开
  8. 在线文档显示组件 FlexPaper
  9. 【正在直播】:CSDN直播间专属福利!1399买Airpods Pro
  10. java tar压缩工具类_分享apache的commons-compress的TarUtils压缩工具类对文件数据进行加解密、解析及格式化校验等操作...
  11. python中日期使用_在Python中使用日期时间的每月总金额
  12. silverlight 地图轨迹回放
  13. Visual Studio 2015 专业版安装方法
  14. Automate your Android app testing
  15. 苹果开场铃声 android,‎App Store 上的“手机铃声制作 - 铃声设置助手大全”
  16. 牛牛的猜球游戏(前缀和+逆交换)
  17. python学习之路遇到的问题以及解决方法
  18. 一文读懂数据库的文本数据类型:CHAR,VARCHAR,TEXT,BLOG,NCHAR、NVARCHAR、NTEXT
  19. mlp原来是这么回事
  20. 聚焦·洞察 家有矿(HOME MINE)共识生态全球行圆满召开

热门文章

  1. linux sftp ssh端口分开,sftp ssh服务分离
  2. Linux求平方脚本,Linux Shell脚本系列教程(五):数学运算
  3. php sql update 字段a=字段b的信息_企业级PHP求职最全精品面试100问(附答案)
  4. cuSPARSE库:(十七)cusparseStatus_t 返回信息
  5. KVM-Arch-Figure
  6. mmap从低向高增长的legacy模式和从高向低增长的modern模式
  7. 使用mprotect系统调用来调试内存问题:memalign,aligned_alloc
  8. 【转】Linux内核报文收发
  9. C/C++搞不懂指针还是数组?用sizeof解释struct大小!
  10. android cursor 空,java – Android:即使数据库不为空,Cursor也总是返回null