Redis部署模式

Redis部署模式

  • 单机模式
  • 主从复制
  • 哨兵模式
  • 高可用集群模式

单机模式

单机模式,采用单个Redis节点部署,没有备份节点实时同步数据,不提供持久化和备份策略,适用于数据可靠性要就不高的纯缓存业务场景

优点

架构简单,部署方便。高性价比:缓存使用时无需备用节点(单实例可用性可以用 supervisor 或 crontab 保证),当然为了满足业务的高可用性,也可以牺牲一个备用节点,但同时刻只有一个实例对外提供服务。

缺点

不保证数据的可靠性。在缓存使用,进程重启后,数据丢失,即使有备用的节点解决高可用性,但仍然不能解决缓存预热问题。因此不适用与数据要求较高的业务。高性能受限于单核 CPU 的处理能力(Redis 是单线程机制),CPU 为主要瓶颈,所以适合操作命令简单,排序、计算较少的场景。也可以考虑用 Memcached 替代

主从部署

Redis的主从部署模式指的是主从复制,可以通过SLAVEOF命令或者配置的方式,让一个服务器去复制另一个服务器,即成为它的从服务器。Redis多副本,采用主从(replication)部署结构,相对于单副本的最大优点是实现了主从实列间的数据实时同步,并且提供数据持久化和备份策略。主从实列部署在不同的服务器上,可以同时对外提供服务和读写分离策略

优点

靠可用性:采用主从架构可以在主库出现故障时自动进行主备切换,从库提升为主库提供服务,保证服务平稳运行;另一方面,开启持久化功能和合理的备份策略,能有效地解决数据误操作和数据异常丢失的问题

读写分离策略:从节点扩展主库节点的读能力,有效应对大量并发的读操作

缺点

故障恢复复杂,如果没有RedisHA,当主节点出现故障时,需要手动将一个从节点升为主节点,同时需要通知业务方变更配置,并且需要让其它从库去复制新的主节点,整个过程需要人为干预

主库的写能力受到单机的限制,可以考虑分片

主库的存储能力受到单机的限制,可以考虑Pika

哨兵模式(Sentinel)

Redis Sentinel是社区推出的高可用解决方案,其架构主要包括两部分:Redis Sentinel集群和Redis数据集群。其中Redis Sentinel集群是由若干Sentinel节点组成的分布式集群,可以实现故障发现、故障自动转移、配置中心和客户端通知。节点数量满足2n+1

优点

Redis Sentinel集群部署简单

能够解决Redis主从模式下的高可用切换

能够实现Redis数据节点的线性扩展,可以极大的满足Redis大容量或高性能的业务需求

可以实现一套Sentinel监控和一组Redis数据节点或多组数据节点

缺点

部署相对于Redis主从复制模式要复杂

浪费资源,Redis数据节点中的slave节点作为备份节点不再提供服务

Redis Sentinel主要是针对Redis数据节点中的主节点的高可用切换,对Redis数据节点的失败判定为主观下线和客观下线两种,对于Redis的从节点有对节点做主观下线操作,并不执行故障转移

不能解决读写分离,实现相对复杂

高可用集群模式(Cluster)

Redis Cluster是社区推出的Redis分布式集群解决方案,主要解决Redis分布式 方面的需求,(单机内存、并发、流量等瓶颈的时候),Redis Cluster能起到很好的负载均衡的目的。Redis Cluster的最小配置为6个节点以上(3主3从),其中主节点提供读写操作,从节点作为备用节点,不提供请求,之作故障转移使用。Redis Cluster采用虚拟槽分区,所有的键根据哈希函数映射到0 ~ 16383个整数槽内,每个节点负责维护一部分槽及槽所映射的键值数据

优点

去中心化架构

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

可扩展性,节点可动态添加或删除

高可用性,部分节点不可用时,集群仍可用。通过增加Slave和standby数据副本,能够是实现故障自动failover,节点之间通过gossip协议交换状态信息,用投票机制 完成Slave到Master的角色提升

降低运维成本,提高系统的扩展性和可用性

缺点

Client实现复杂,驱动要求实现Smart Client,缓存slots mapping信息并及时更新,提高了开发难度,客户端的不成熟影响业务的稳定性。目前仅JedisCluster相对成熟

节点会因某些原因发生阻塞(阻塞时间大于cluster-node-timeout),被判断下线,这种failover是没有必要的

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

多个业务使用同一套集群时,无法根据统计区分冷热数据,资源隔离性差,容易出现相互影响的情况

Slave在集群中充当“冷备”,不能缓解读取压力,当然可以通过SDK的合理设计来提高Slave的资源利用率

Key批量操作限制,如使用mset,mget目前支持具有相同slot值的Key执行批量操作。对于映射为不同slot的Key,由于Keys不支持跨slot查询,所以执行mset,mget,sunion等操作支持不友好

Key事务操作支持有限,只支持多key在同一个节点上的事务操作,当多个Key分布于不同的节点上时无法使用事务功能

Key作为数据分区的最小粒度,不能将一个很大的键值对象如hash、list等映射到不同的节点上

不支持多数据库空间,单机Redis可以支持到16个数据库,集群模式下只能使用1个数据库,即db0

复制结构只支持一层,从节点只能复制主节点,不支持嵌套树状复制结构

避免产生hot-key,导致主节点成为系统的短板

避免产生big-key,导致网卡撑爆、慢查询等

重试时间应大于cluster-node-time时间

Redis Cluster不建议使用pipeline和muti-keys操作,减少max redirect产生的场景

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值