Redis 主从哨兵集群
TIP
生产环境中单机 Redis 存在单点故障风险。Redis 提供了主从复制 + Sentinel 高可用方案和 Cluster 集群方案。
主从复制
主节点负责写,从节点同步数据负责读。
bash
# 从节点配置(redis.conf)
replicaof 192.168.1.100 6379 # 指定主节点
replica-read-only yes # 从节点只读
# 或者运行时设置
SLAVEOF 192.168.1.100 6379主从同步原理
1. 从节点发送 SYNC 请求
2. 主节点执行 BGSAVE 生成 RDB
3. 主节点将 RDB 发送给从节点
4. 从节点加载 RDB
5. 后续增量同步(命令传播)Sentinel 哨兵
实现自动故障转移(主节点宕机时自动选举新主节点)。
bash
# sentinel.conf
port 26379
sentinel monitor mymaster 192.168.1.100 6379 2
sentinel down-after-milliseconds mymaster 5000
sentinel failover-timeout mymaster 60000
# 启动哨兵
redis-sentinel sentinel.confSentinel 工作原理
1. 哨兵定期 ping 主节点
2. 主节点下线 → 哨兵集群投票
3. 选举新主节点 → 通知从节点切换
4. 通知客户端新主节点地址Cluster 集群
Redis Cluster 是官方分布式方案,自动分片、去中心化。
bash
# redis.conf 开启集群模式
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 15000
# 创建集群(至少6个节点:3主3从)
redis-cli --cluster create 192.168.1.1:6379 192.168.1.2:6379 192.168.1.3:6379 192.168.1.4:6379 192.168.1.5:6379 192.168.1.6:6379 --cluster-replicas 1分片原理
数据分片:16384 个哈希槽(CRC16(key) % 16384)
每个节点负责一部分哈希槽方案对比
| 方案 | 数据分布 | 高可用 | 自动故障转移 | 适用场景 |
|---|---|---|---|---|
| 主从 | 全量 | 手动 | 否 | 读写分离 |
| Sentinel | 全量 | 自动 | 是 | 高可用场景 |
| Cluster | 分片 | 自动 | 是 | 大数据量场景 |