前言
单机模式,硬件资源有限,如果机器故障,直接导致redis不可用。为了提高redis服务稳定、高qps、高扩展,高可用才进行redis的集群搭建。集群主要是通过多个服务相互协调和维护来保证服务的高可用,redis集群一般分为sentinel模式和redis-cluster模式(redis5.0之后官方推出的)
sentinel模式集群
在redis3.0以前的版本要实现集群一般是借助哨兵sentinel工具来监控master节点的状态,如果master节点异常,则会做主从切换,将某一台slave作为master,哨兵的配置略微复杂,并且性能和高可用性等各方面表现一般,特别是在主从切换的瞬间存在访问瞬断的情况,而且哨兵模式只有一个主节点对外提供服务,没法支持很高的并发,且单个主节点内存也不宜设置得过大,否则会导致持久化文件过大,影响数据恢复或主从同步的效率。架构图如下:
redis-cluster 模式集群(推荐)
redis集群是一个由多个主从节点群组成的分布式服务器群,它具有复制、高可用和分片特性。Redis集群不需要sentinel哨兵就能完成节点移除和故障转移的功能。需要将每个节点设置成集群模式,这种集群模式没有中心节点,可水平扩展,据官方文档称可以线性扩展到上万个节点(官方推荐不超过1000个节点)。redis集群的性能和高可用性均优于之前版本的哨兵模式,且集群配置非常简单。整个redis集群是16384个hash槽组成,当我们多台master节点来合成集群时,将由这些master节点来分担16384个hash槽,例如我们集群4台master,每一台可以只负责4096个插槽,不定是平分的。当客户端请求时,客户端先通过key值来计算该key所在那个hash槽,再请求到对应的服务器,这样就实现了容量和qps都能水平扩展,我们可以根据需求来动态扩/缩容。每一个master节点下还有一个或多个从节点,当master节点失效时可以从多个从节点选举一个来担任master节点,保证了服务的高可用。虽然此集群功能很强大,但是不要盲目追求,因为此集群搭建至少需要3个master节点,同时每一个主节点至少配置一个从节点,所以redis-cluster模式至少需要6个redis节点来完成导致成本增加。架构图如下: