哨兵与集群
哨兵(Sentinel)
Redis Sentinel 提供高可用性,监控、通知和自动故障转移。
架构
┌──────────┐ ┌──────────┐ ┌──────────┐
│ Sentinel │ │ Sentinel │ │ Sentinel │
└────┬─────┘ └────┬─────┘ └────┬─────┘
│ │ │
└─────────────┼─────────────┘
│ monitor
┌────────┴────────┐
▼ ▼
┌──────────┐ ┌──────────┐
│ Master │──────▶│ Slave │
└──────────┘ └──────────┘配置
conf
# sentinel.conf
port 26379
sentinel monitor mymaster 192.168.1.100 6379 2
sentinel down-after-milliseconds mymaster 5000
sentinel failover-timeout mymaster 60000
sentinel parallel-syncs mymaster 1Docker Compose
yaml
version: '3.8'
services:
redis-master:
image: redis:7.2.4
ports: ["6379:6379"]
redis-slave:
image: redis:7.2.4
ports: ["6380:6379"]
command: redis-server --replicaof redis-master 6379
sentinel:
image: redis:7.2.4
ports: ["26379:26379"]
command: redis-sentinel /etc/redis/sentinel.confGo 客户端
go
import "github.com/redis/go-redis/v9"
rdb := redis.NewFailoverClient(&redis.FailoverOptions{
MasterName: "mymaster",
SentinelAddrs: []string{"sentinel:26379"},
})集群(Cluster)
Redis Cluster 提供数据分片和高可用。
架构
┌──────────┐ ┌──────────┐ ┌──────────┐
│ Master 0 │ │ Master 1 │ │ Master 2 │
│ 槽位 0-5460│ │槽位5461-10922│ │槽位10923-16383│
└────┬─────┘ └────┬─────┘ └────┬─────┘
│ │ │
┌────┴────┐ ┌────┴────┐ ┌────┴────┐
│ Slave 0 │ │ Slave 1 │ │ Slave 2 │
└─────────┘ └─────────┘ └─────────┘配置
conf
# cluster.conf
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
cluster-require-full-coverage yesDocker Compose
yaml
version: '3.8'
services:
redis-cluster:
image: redis:7.2.4
command: redis-server --cluster-enabled yes
ports: ["6379:6379"]Go 客户端
go
rdb := redis.NewClusterClient(&redis.ClusterOptions{
Addrs: []string{
"node1:6379",
"node2:6379",
"node3:6379",
},
})选择建议
| 场景 | 推荐 |
|---|---|
| 数据量小,高可用 | 哨兵 |
| 数据量大,水平扩展 | 集群 |
| 生产环境 | 集群 |
在下一章中,我们将学习缓存设计。