Redis集群模式(Cluster)
一. 单master在海量数据下的瓶颈
- 在单master的架构下,由于所有slave的数据都与master保持一致,因此Redis所能承载的数据量完全取决于master机器所在的内存。一旦出现内存不足的情况,只能进行垂直扩若,扩展性较差。
- 采用Cluster集群架构:多master 读写分离 高可用 支持N个master,且每个master下都可挂在M个slave。基于Cluster的读写分离架构,每个master负责处理写请求,master下的slave负责处理读请求。一旦某个master宕机,会自动将slave切换成master,实现集群的高可用。
二. Cluster VS Replication Sentinel
- Replication:如果数据量很少,主要是承载高并发高性能的场景,比如缓存一般就几个G,那么单master就足够了。可以部署一个mater,多个slave(slave数量取决于系统对吞吐量的要求),然后自己搭建一个sentinal集群,去保证redis主从架构的高可用性,就可以了。
- Cluster:主要是针对海量数据 高并发 高可用的场景,海量数据,如果你的数据量很大,那么建议就用Cluster架构。
三. 常用的数据分布算法
- hash 对一个key计算hash值,然后对节点数量取模,觉得将数据存放在哪个节点。
- 一致性hash
- 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来实现。