单机的 redis,可以承载的 QPS 大概就在上万到几万不等。对于缓存来讲,通常都是用来支撑读高并发的。所以架构作成主从(master-slave)架构,一主多从,主负责写,而且将数据复制到其它的 slave 节点,从节点负责读。全部的读请求所有走从节点。这样也能够很轻松实现水平扩容,支撑读高并发。node
实现主从复制如何操做面试
Redis集群主从复制(一主两从)搭建配置教程【Windows环境】redis
当启动一个 slave node 的时候,它会发送一个 PSYNC
命令给 master node。算法
若是这是 slave node 初次链接到 master node,那么会触发一次 full resynchronization
全量复制。此时 master 会启动一个后台线程,开始生成一份 RDB
快照文件,数据库
同时还会将从客户端 client 新收到的全部写命令缓存在内存中。RDB
文件生成完毕后, master 会将这个 RDB
发送给 slave,slave 会先写入本地磁盘,而后再从本地磁盘加载到内存中,缓存
接着 master 会将内存中缓存的写命令发送到 slave,slave 也会同步这些数据。网络
slave node 若是跟 master node 有网络故障,断开了链接,会自动重连,链接以后 master node 仅会复制给 slave 部分缺乏的数据。架构
Redis cluster,10 台机器,5 台机器部署了 redis 主实例,另外 5 台机器部署了 redis 的从实例,每一个主实例挂了一个从实例,5 个节点对外提供读写服务,每一个节点的读写高峰qps可能能够达到每秒 5 万,5 台机器最可能是 25 万读写请求/s。并发
32G 内存+ 8 核 CPU + 1T 磁盘,可是分配给 redis 进程的是10g内存,通常线上生产环境,redis 的内存尽可能不要超过 10g,超过 10g 可能会有问题。负载均衡
5 台机器对外提供读写,一共有 50g 内存。由于每一个主实例都挂了一个从实例,因此是高可用的,任何一个主实例宕机,都会自动故障迁移,redis 从实例会自动变成主实例继续提供读写服务。
人员数据,每条数据是 10kb。100 条数据是 1mb,10 万条数据是 1g。常驻内存的是 300 万条人员数据,占用内存是 30g,仅仅不到总内存的 60%。目前高峰期每秒就是 3500 左右的请求量。
其实大型的公司,会有基础架构的 team 负责缓存集群的运维。
Redis 集群模式的工做原理能说一下么?在集群模式下,redis 的 key 是如何寻址的?分布式寻址都有哪些算法?了解一致性 hash 算法吗?
简介
Redis Cluster是一种服务端Sharding技术,3.0版本开始正式提供。Redis Cluster并无使用一致性hash,而是采用slot(槽)的概念,一共分红16384个槽。将请求发送到任意节点,接收到请求的节点会将查询请求发送到正确的节点上执行
方案说明
在 Redis cluster 架构下,每一个 redis 要放开两个端口号,好比一个是 6379,另一个就是 加1w 的端口号,好比 16379。
16379 端口号是用来进行节点间通讯的,也就是 cluster bus 的东西,cluster bus 的通讯,用来进行故障检测、配置更新、故障转移受权。cluster bus 用了另一种二进制的协议,gossip
协议,用于节点间进行高效的数据交换,占用更少的网络带宽和处理时间。
节点间的内部通讯机制
基本通讯原理
集群元数据的维护有两种方式:集中式、Gossip 协议。redis cluster 节点间采用 gossip 协议进行通讯。
分布式寻址算法
优势
缺点