第十三章 redis-cluster原理
一、基本定义
- 虚拟槽slot分区算法,优点是扩容缩容简单:直接把slot及每个slot上的数据进行缩放即可
- redis定义了0-16383(总共为16384个slot,即214个slot)
- slot会均匀的分配在主节点上。假设是3主3从集群,每个master管理的slot个数分别为5461,5462,5461个。
- 映射:计算一个key在哪个slot上,公式slot=CRC16(key)&16383
- 在n=2m时,x&(n-1)=x%n,这就是redis为什么定义2n个slot
- xx
二、集群搭建过程(3主3从)- 手动
- 准备节点
- 配置节点后,启动单个节点,此时每个节点都是单独处在一个集群中
- 节点握手(假设6379与6380握手)
- 命令:cluster meet ip port
- 过程:
- 节点6379本地创建6380节点信息对象,并发送meet消息
- 节点6380接收到meet消息后,保存节点6379的节点信息并回复pong消息(此时握手成功)
- 之后节点6379和节点6380彼此定期通过ping/pong消息进行正常的节点通信
- 在cluster内的任一节点执行cluster meet命令加入新节点。握手状态会通过消息在集群内传播(gossip协议),这样其他节点会自动发现新节点并发起握手流程
- 为主节点分配槽
- 命令:cluster addslots {0...5460}
- 注意:主节点尽量选择不同IP
- 为主节点分配从节点
- 从节点作用:复制主节点slot信息和相关的数据;故障转移
- 命令:在从节点上执行cluster replicate {master-nodeId}
- 尽可能保证主从节点不在同一个机器上
三、集群搭建过程(3主3从)- 自动
第十二章 redis-cluster搭建(redis-3.2.5)
四、节点通信
- gossip协议:节点之间彼此不断通信交换信息,一段时间后所有节点都会知道集群完整的信息。
- 通信过程:
- cluster中的每个node都会单独开辟一个TCP通道(通信端口号在基础端口号上加10000,例如16379),用于节点之间彼此通信
- 每个节点在固定周期内通过特定规则选择几个节点发送ping消息
- 接收到ping消息的节点用pong消息作为响应
五、请求路由
- 根据key计算slot:计算一个key在哪个slot上,公式slot=CRC16(key)&16383
- 根据slot查找slot所在节点:集群内每个节点都知道所有节点的slot信息(相当于节点的本地缓存),根据slot可以直接找出所在的node
- 如果slot所在的节点正好是接受命令的当前节点,那么直接执行;如果不是,返回MOVED slot ip port(之后客户端要再去连接该机器,再执行命令)
智能客户端:
- 客户端本地会缓存一份hashmap<slot, node>,MOVED slot ip port可以用来帮助缓存的刷新
第十三章 redis-cluster原理的更多相关文章
- 全面剖析Redis Cluster原理和应用
全面剖析Redis Cluster原理和应用 1.Redis Cluster总览 1.1 设计原则和初衷 在官方文档Cluster Spec中,作者详细介绍了Redis集群为什么要设计成现在的样子.最 ...
- Redis Cluster 原理相关说明
背景 之前写的 Redis Cluster部署.管理和测试 和 Redis 5.0 redis-cli --cluster help说明 已经比较详细的介绍了如何安装和维护Cluster.但关于Clu ...
- Redis Cluster 原理说的头头是道,这些配置不懂就是纸上谈兵
Redis Cluster 原理说的头头是道,这些配置不懂就是纸上谈兵 Redis Cluster 集群相关配置,使用集群方式的你必须重视和知晓.别嘴上原理说的头头是道,而集群有哪些配置?如何配置让集 ...
- 全面剖析Redis Cluster原理和应用 (转)
1.Redis Cluster总览 1.1 设计原则和初衷 在官方文档Cluster Spec中,作者详细介绍了Redis集群为什么要设计成现在的样子.最核心的目标有三个: 性能:这是Redis赖以生 ...
- 全面剖析Redis Cluster原理和应用 (good)
redis redis cluster注意的问题 : 1.‘cluster-require-full-coverage’参数的设置.该参数是redis配置文件中cluster模式的一个参数,从字面上基 ...
- 深度图解Redis Cluster原理
不想谈好吉他的撸铁狗,不是好的程序员,欢迎微信关注「SH的全栈笔记」 前言 上文我们聊了基于Sentinel的Redis高可用架构,了解了Redis基于读写分离的主从架构,同时也知道当Redis的ma ...
- Redis Cluster原理
Redis Cluster 是Redis的集群实现,内置数据自动分片机制,集群内部将所有的key映射到16384个Slot中,集群中的每个Redis Instance负责其中的一部分的Slot的读写. ...
- 第七章· Redis Cluster 核心技术
Redis Cluster 分布式集群 Redis Cluster 安装部署 Redis Cluster 集群管理操作(核心)
- Redis Cluster原理初步
目录 目录 1 1. 前言 1 2. 槽(slots) 1 3. 路由配置(node.conf) 1 4. 总slots数(cluster.h:16384) 2 5. key的路由 2 6. 将key ...
- Redis Cluster部署、管理和测试
背景: Redis 3.0之后支持了Cluster,大大增强了Redis水平扩展的能力.Redis Cluster是Redis官方的集群实现方案,在此之前已经有第三方Redis集群解决方案,如Twen ...
随机推荐
- js数据结构之列表的详细实现方法
* 列表用于存放数据量较少的数据结构* 当数据量较大时,不需要对其进行查找.排序的情况下,使用列表也比较方便. 本数据结构在node环境下运行,需要对node有个基本是了解. 1. listSize: ...
- Oracle的一些初步小东西
经常要用数据库,让他自己启动的话,开机太慢,所以用命令启动方便点. 1.开启: 在运行中输入cmd,进入控制台,lsnrctl start回车,提示启动监听成功后net start Oracl ...
- C#开发Unity游戏教程循环遍历做出判断及Unity游戏示例
C#开发Unity游戏教程循环遍历做出判断及Unity游戏示例 Unity中循环遍历每个数据,并做出判断 很多时候,游戏在玩家做出判断以后,游戏程序会遍历玩家身上大量的所需数据,然后做出判断,即首先判 ...
- Codeforces.862D.Mahmoud and Ehab and the binary string(交互 二分)
题目链接 \(Description\) 有一个长为\(n\)的二进制串,保证\(01\)都存在.你可以询问不超过\(15\)次,每次询问你给出一个长为\(n\)的二进制串,交互库会返回你的串和目标串 ...
- C语言sscanf和sprintf输入输出使用及Strlen、Memset解释
sscanf() - 从一个字符串中读进与指定格式相符的数据. swscanf()- 用于处理宽字符字符串,和sscanf功能相同 通过学习和使用个人认为,在字符串格式不是很复杂,但是也并不 ...
- 【BZOJ-1913】signaling信号覆盖 极角排序 + 组合
1913: [Apio2010]signaling 信号覆盖 Time Limit: 20 Sec Memory Limit: 64 MBSubmit: 1232 Solved: 506[Subm ...
- Intel Code Challenge Final Round (Div. 1 + Div. 2, Combined) D. Dense Subsequence 暴力
D. Dense Subsequence 题目连接: http://codeforces.com/contest/724/problem/D Description You are given a s ...
- Educational Codeforces Round 14 C. Exponential notation 数字转科学计数法
C. Exponential notation 题目连接: http://www.codeforces.com/contest/691/problem/C Description You are gi ...
- office 2010 正在配置Microsoft Office ...
原因主要是安装时候所用账户和你目前登陆的账户不为同一个账户,或者你进行过覆盖安装或是重新安装过系统但是office得安装目录没有变. 解决方法:激活office----更改注册表--完成 [HKEY_ ...
- Linux内存管理学习2 —— head.S中的段页表的建立
作者 彭东林 pengdonglin137@163.com 平台 TQ2440 Qemu+vexpress-ca9 Linux-4.10.17 正文 继续分析head.S: 此时r2存放的是设备树镜像 ...