Skip to content

哨兵与集群 ​

哨兵(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 1

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

Go 客户端 ​

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 yes

Docker 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",
    },
})

选择建议 ​

场景推荐
数据量小,高可用哨兵
数据量大,水平扩展集群
生产环境集群

在下一章中,我们将学习缓存设计。