Rdis-Cluster (redis高可用集群)原理
总述
Redis 总发展过程分为4 个阶段,分别是 1、单节点(单机版)、2、主从节点(读写分离)、3、哨兵模式、4、Redis-Cluster (Redis高可用集群),以下我会详细介绍每种结构的原理以及它的优缺点。
1.Redis单机版
Redis 单机版 顾明思议只有一个Redis服务实例
此种模式是最原始的Redis 使用模式、
优点:1、部署方便。
缺点:1、只有一个存储数据节点、造成数据不安全。
2、当Redis实例宕机则程序无法正常使用、造成缓存雪崩。
3、单节点服务访问压力过大,不适用于数据量大、需保障数据安全的应用服务。
2、Redis主从双节点
Redis 主从模式 是在单节点基础上 增加了一个数据备份的服务。
优点:1、此种部署方式 增加了数据的安全性 当主节点数据损坏后我们可以通过手动配置 从节点 变更为主节点 。
2、读写性能受 单机配置的影响,可以主备读写分离。
缺点:
1、故障恢复复杂,如果没有RedisHA系统(需要开发),当主库节点出现故障时,需要手动将一个从节点晋升为主节点,同时需要通知业务方变更配置,并且需要让其它从库节点去复制新主库节点,整个过程需要人为干预,比较繁琐;
2、主库的写能力受到单机的限制,可以考虑分片;
3、原生复制的弊端在早期的版本中也会比较突出,如:Redis复制中断后,Slave会发起psync,此时如果同步不成功,则会进行全量同步,主库执行全量备份的同时可能会造成毫秒或秒级的卡顿;又由于COW机制,导致极端情况下的主库内存溢出,程序异常退出或宕机;主库节点生成备份文件导致服务器磁盘IO和CPU(压缩)资源消耗;发送数GB大小的备份文件导致服务器出口带宽暴增,阻塞请求,建议升级到最新版本。
3.Redis Sentinel哨兵模式
Redis Sentinel是社区版本推出的原生高可用解决方案,其部署架构主要包括两部分:Redis Sentinel集群和Redis数据集群。
其中Redis Sentinel集群是由若干Sentinel节点组成的分布式集群,可以实现故障发现、故障自动转移、配置中心和客户端通知。Redis Sentinel的节点数量要满足2n+1(n>=1)的奇数个。
优点*:1、Redis Sentinel 集群部署简单;
2、能够解决 Redis 主从模式下的高可用切换问题;
3、很方便实现 Redis 数据节点的线形扩展,轻松突破 Redis 自身单线程瓶颈,可极大满足
缺点:
1、资源浪费,Redis 数据节点中 slave 节点作为备份节点不提供服务;
2、Redis Sentinel 主要是针对 Redis 数据节点中的主节点的高可用切换,对 Redis 的数据节点做失败判定分为主观下线和客观下线两种,对于 Redis 的从节点有对节点做主观下线操作,并不执行故障转移。
3、不能解决读写分离问题,实现起来相对复杂。
4、Redis-Cluster(高可用集群)
Redis Cluster 是社区版推出的 Redis 分布式集群解决方案,主要解决 Redis 分布式方面的需求,比如,当遇到单机内存,并发和流量等瓶颈的时候,Redis Cluster 能起到很好的负载均衡的目的。
Redis Cluster 集群节点最小配置 6 个节点以上(3 主 3 从),其中主节点提供读写操作,从节点作为备用节点,不提供请求,只作为故障转移使用。
Redis Cluster 采用虚拟槽分区,所有的键根据哈希函数映射到 0~16383 个整数槽内,每个节点负责维护一部分槽以及槽所印映射的键值数据。
优点:
无中心架构;
数据按照 slot 存储分布在多个节点,节点间数据共享,可动态调整数据分布;
可扩展性:可线性扩展到 1000 多个节点,节点可动态添加或删除;
高可用性:部分节点不可用时,集群仍可用。通过增加 Slave 做 standby 数据副本,能够实现故障自动 failover,节点之间通过 gossip 协议交换状态信息,用投票机制完成 Slave 到 Master 的角色提升;
降低运维成本,提高系统的扩展性和可用性。