平面设计广告,网站建站前seo注意,广州冼村是什么梗,有没有专门做衣服的网站华子目录 什么是redis集群redis cluster的体系架构什么是数据sharding#xff1f;什么是hash tag集群中删除或新增节点#xff0c;数据如何迁移#xff1f;redis集群如何使用gossip通信?定义meet信息ping消息pong消息fail消息#xff08;不是用gossip协议实现的#xff0… 华子目录 什么是redis集群redis cluster的体系架构什么是数据sharding什么是hash tag集群中删除或新增节点数据如何迁移redis集群如何使用gossip通信?定义meet信息ping消息pong消息fail消息不是用gossip协议实现的流量图 数据访问如何定位到具体的节点正常访问访问已被迁移到其他节点的数据 redis cluster主从架构创建redis cluster的前提 什么是redis集群
redis从3.0开始就支持集群节点之间使用gossip协议进行通信实现了去中心化集群中支持动态的添加和删除节点动态迁移数据以及自动执行故障转移 在哨兵sentinel机制中可以解决redis高可用问题即当master故障后可以自动将slave提升为master从而可以保证redis服务的正常使用但是无法解决redis单机写入的瓶颈问题即单机redis写入性能受限于单机的内存大小、并发数量、网卡速率等因素集群中某个节点的是否失效是由整个集群中超过半数的节点监测都失效才能算真正的失效客户端不需要proxy即可直接连接redis应用程序中需要配置有全部的redis服务器IP每个哈希槽可以存储若干个key 在无中心的redis集群当中其每个节点保存当前节点数据和整个集群状态每个节点都和其他所有节点连接
redis cluster的体系架构 什么是数据sharding
redis cluster使用数据分片实现key的存储分布redis cluster将集群划分为16384个槽位数据库中所有的key进行hash计算后都会落到这16384个槽位中的其中一个槽位那么key是如何定位到哪个槽位的。可以通过公式进行计算CRC16(key)%16384得到的值就是槽位16384个槽位全部分配给cluster中的节点每个节点维护自己的槽位同时每个节点也会存储其他节点维护的槽位信息 当然你也可以指定到哪个槽位这就涉及到了hash tag 什么是hash tag
hash tag是用来解决用户想要将一堆数据key全部放到一个槽位而提出来的用户可以将key设置成这样原始的key {tag标签}当redis cluster碰到这样的key就会提取{}里面的值进行槽位计算
集群中删除或新增节点数据如何迁移
假设cluster目前有四个节点ABCD如果删除D节点则会将D节点中的所有槽位全部分配给ABC节点如果新增E节点则会将ABCD中的部分槽位移动到E节点上
redis集群如何使用gossip通信?
定义
gossip使得元数据分布式存储不做集中存放实现了去中心化当一个节点信息变更就会触发集群中整个节点信息的更新缺点就是更新会有延迟
meet信息
用于在集群中通知新节点加入
ping消息
用于检测节点是否在线及交换每个节点之间的状态信息
pong消息
pong消息是用来回应其他节点向自己发的消息还可以通过发此消息让其他节点更新此节点的状态信息
fail消息不是用gossip协议实现的
当集群里的主节点A将主节点B标记为下线时会通过集群广播一条关于主节点B的fail消息所有接受到这条消息的节点包括主从节点都会将主节点B标记为下线
流量图 数据访问如何定位到具体的节点
正常访问 访问已被迁移到其他节点的数据 redis cluster主从架构
Redis cluster的架构虽然解决了并发的问题但是又引入了一个新的问题每个Redis master的高可用如何解决那就是对每个master节点都实现主从复制从而实现redis高可用性 创建redis cluster的前提
每个redis node节点采用相同的硬件配置、相同的密码、相同的redis版本每个节点必须开启的参数
cluster-enabled yes #必须开启集群状态开启后redis进程会有cluster显示
cluster-config-file nodes-6380.conf #此文件有redis cluster集群自动创建和维护不需要任何手动操作所有redis服务器必须没有任何数据先启动为单机redis且没有任何key value