核心概念
- 高可用性(HA):确保系统在高于平均水平的时间内保持约定的运行性能水平,通常指正常运行时间。
- Redis:内存数据库,数据存储在内存中,避免单点故障是关键。
Redis 高可用手段
-
Redis 主从复制
- 功能:多个 Redis 节点组成集群,主节点操作数据,从节点同步并提供查询。
- 同步类型 :
- 全量复制:首次数据同步。
- 增量复制:网络断连后继续同步。
-
Redis 哨兵模式
- 功能:监控 Redis 节点,自动故障转移,配置提供者,通知功能。
- 实现 :
- 监控:检查主从实例状态。
- 自动故障转移:主实例不可用时,从节点升级为主节点。
- 配置提供者:客户端通过哨兵获取主节点地址。
- 通知:故障转移结果通知客户端。
-
Redis 集群(Cluster)
- 功能:分布式数据库方案,通过分片管理数据,具备复制、故障转移和流量调度能力。
- 特点:允许水平扩展,数据划分为16384个哈希槽。
主从复制详解
-
全量复制流程:
- 建立主从关系 :通过
replicaof
命令。 - 主从库间建立连接、协商同步 :
- 从库发送
psync
命令,包含主库的runID
和offset
。
- 从库发送
- 主库将所有数据同步给从库 :
- 主库执行
bgsave
生成 RDB 文件,发送给从库。 - 从库清空当前数据库,加载 RDB 文件。
- 主库记录写操作到
replication buffer
。
- 主库执行
- 主库发送写命令给从库 :
- 发送
replication buffer
中的修改操作。
- 发送
- 建立主从关系 :通过
-
增量复制:
- 网络断连后采用,控制复制成本。
- 使用
replication buffer
和replication_backlog
缓冲区。
哨兵模式详解
- 监控:哨兵检查主从实例状态。
- 自动故障转移 :
- 主观下线:哨兵未收到有效响应。
- 客观下线:多个哨兵同意主实例不可用。
- Leader 选举:选出 leader 进行故障转移。
- 故障转移 :
- 选择新主节点,更新其他节点配置。
- 将旧主节点变成新主节点的从节点。
Redis 集群详解
-
集群介绍:
- 数据分片,每个节点管理部分数据。
- 使用 Gossip 协议交互节点信息。
-
扩展方式:
- 纵向扩展(scale up):提升单个实例硬件资源。
- 横向扩展(scale out):增加实例数,分摊数据。
总结
- 高可用性:数据尽量不丢失,服务尽可能可用。
- 数据持久化:AOF 和 RDB 保证数据安全。
- 多节点:提高服务吞吐量和容量。
- 读写分离:增加 Redis 的读负载能力。
- 哨兵模式:实现故障自动转移,适用于业务规模扩展。
- Redis Cluster:解决大数据量存储问题,便于横向扩展。