Redis_12_之redis cluster基本介绍
Redis之redis cluster基本介绍
1. redis cluster
支撑N个redis master node,每个master node都可以挂载多个slave node
读写分离的架构,对于每个master来说,写就写到master,然后读就从mater对应的slave去读
高可用,因为每个master都有salve节点,那么如果mater挂掉,redis cluster这套机制,就会自动将某个slave切换成master
redis cluster(多master + 读写分离 + 高可用)
只要基于redis cluster去搭建redis集群即可,不需要手工去搭建replication复制+主从架构+读写分离+哨兵集群+高可用
- 自动将数据进行分片,每个master上放一部分数据
- 提供内置的高可用支持,部分master不可用时,还是可以继续工作的
在redis cluster架构下,每个redis要放开两个端口号,比如一个是6379,另外一个就是加10000的端口号,比如16379
16379端口号是用来进行节点间通信的,也就是cluster bus 集群总线。cluster bus的通信,用来进行故障检测,配置更新,故障转移授权
cluster bus用了另外一种二进制的协议,主要用于节点间进行高效的数据交换,占用更少的网络带宽和处理时间
2. redis cluster vs replication + sentinel
如果数据量很少,主要是承载高并发高性能的场景,比如缓存一般就几个G,单机足够了
replication:一个mater,多个slave,要几个slave跟要求的读吞吐量有关系,然后搭建一个sentinel集群,去保证redis主从架构的高可用性,就可以了
redis cluster:主要是针对海量数据+高并发+高可用的场景,海量数据,如果数据量很大,那么建议就用redis cluster
3. 算法
3.1 原始hash算法
弊端: 大量缓存重建
3.2 一致性hash算法+虚拟节点算法
自动缓存迁移 自动负载均衡
可能有1/n的缓存失效
一致性hash算法弊端:缓存热点问题
可能集中在某个hash区间的值特别多,那么会导致大量的数据涌入同一个master内,造成master的热点问题,性能出现瓶颈
引入虚拟节点
3.3 hash slot 算法
redis cluster有固定的16384个hash slot,对每个key计算CRC16值,然后对16384取模,可以获取key对应的hash slot
redis cluster中每个master都会持有部分slot,比如有3个master,那么可能每个master持有5000多个hash slot
hash slot让node的增加和移除很简单,增加一个master,就将其他master的hash slot移动部分过去,减少一个master,就将它的hash slot移动到其他master上去
移动hash slot的成本是非常低的
客户端的api,可以对指定的数据,让他们走同一个hash slot,通过hash tag来实现