Skip to content

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.conf

Sentinel 工作原理

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分片自动大数据量场景