Redis(5)Redis cluster

集群(proxy型)

在这里插入图片描述
特点:多种hash算法:MD5、CRC16、CRC32、CRC32a、hsieh、murmur、Jenkins。支持失败节点自动删除。后端Sharding分片逻辑对业务透明,业务方的读写方式和操作单个Redis一致。

缺点:增加了新的proxy,需要维护其高可用。failover逻辑需要自己实现,其本身不能支持故障的自动转移可扩展性差,进行扩缩容都需要手动干预。

集群(直连型)

在这里插入图片描述
特点:

1、无中心架构(不存在哪个节点影响性能瓶颈),少了proxy层。

2、数据按照slot存储分布在多个节点,节点间数据共享,可动态调整数据分布。

3、可扩展性,可线性扩展到1000个节点,节点可动态添加或删除。

4、高可用性,部分节点不可用时,集群仍可用。通过增加Slave做备份数据副本

5、实现故障自动failover,节点之间通过gossip协议交换状态信息,用投票机制完成Slave到Master的角色提升。

缺点:

1、资源隔离性较差,容易出现相互影响的情况。

2、数据通过异步复制,不保证数据的强一致性。

集群的选择

redis cluster:

1、不好做读写分离,读写请求全部落到主实例上的,如果要扩展写QPS,或者是扩展读QPS,都是需要扩展主实例的数量,从实例就是一个用做热备+高可用。

2、不好跟nginx+lua直接整合,lua->redis的client api,但是不太支持redis cluster,中间就要走一个中转的java服务。

3、不好做树状集群结构,比如redis主集群一主三从双机房架构,redis cluster不太好做成那种树状结构。

4、方便,相当于是上下线节点,集群扩容,运维工作,高可用自动切换,比较方便。

twemproxy+redis:

1、上线下线节点,有一些手工维护集群的成本。

2、支持redis集群+读写分离,就是最基本的多个redis主实例,twemproxy这个中间件来决定的,java/nginx+lua客户端,是连接twemproxy中间件的。每个redis主实例就挂载了多个redis从实例,高可用->哨兵,redis cluster读写都要落到主实例的限制,你自己可以决定写主,读从,等等。

3、支持redis cli协议,可以直接跟nginx+lua整合。

4、可以搭建树状集群结构。

猜你喜欢

转载自blog.csdn.net/qq40988670/article/details/86595924