Redis Sentinel
Redis Sentinel 在不使用Redis Cluster时为 Redis 提供高可用性。
Redis Sentinel 还提供其他附带任务,例如监控、通知并充当客户端的配置提供程序。
这是宏观层面(即大图)的 Sentinel 功能的完整列表:
监控。Sentinel 不断检查您的主实例和副本实例是否按预期工作。
通知。Sentinel 可以通过 API 通知系统管理员或其他计算机程序,其中一个受监控的 Redis 实例出现问题。
自动故障转移。如果 master 没有按预期工作,Sentinel 可以启动一个故障转移过程,其中一个副本被提升为 master,其他额外的副本被重新配置为使用新的 master,并且使用 Redis 服务器的应用程序被告知要使用的新地址连接时。
配置提供商。Sentinel 充当客户端服务发现的权威来源:客户端连接到 Sentinels 以询问负责给定服务的当前 Redis master 的地址。如果发生故障转移,Sentinels 将报告新地址。
搭建 Redis Sentinel 集群
Redis Sentinel 配置文件
# sentinel monitor <master-group-name> <ip> <port> <quorum>
sentinel monitor master-alpha redis-alpha 6379 2
配置 Docker Compose 文件
version: '3'
services:
redis-alpha:
image: redis:latest
restart: unless-stopped
container_name: redis-alpha
networks:
redis_net:
ipv4_address: 172.20.0.2
ports:
- 6379:6379
volumes:
- ./data_alpha:/data
redis-bravo:
image: redis:latest
restart: unless-stopped
container_name: redis-bravo
networks:
redis_net:
ipv4_address: 172.20.0.3
ports:
- 6380:6379
volumes:
- ./data_bravo:/data
redis-charli:
image: redis:latest
restart: unless-stopped
container_name: redis-charli
networks:
redis_net:
ipv4_address: 172.20.0.4
ports:
- 6381:6379
volumes:
- ./data_charli:/data
redis-sentinel-alpha:
image: redis:latest
restart: unless-stopped
container_name: redis-sentinel-alpha
networks:
redis_net:
ipv4_address: 172.20.0.5
ports:
- 26379:26379
volumes:
- ./redis_sentinel_alpha.conf:/sentinel.conf
command: redis-sentinel /sentinel.conf
redis-sentinel-bravo:
image: redis:latest
restart: unless-stopped
container_name: redis-sentinel-bravo
networks:
redis_net:
ipv4_address: 172.20.0.6
ports:
- 26380:26379
volumes:
- ./redis_sentinel_bravo.conf:/sentinel.conf
command: redis-sentinel /sentinel.conf
redis-sentinel-charli:
image: redis:latest
restart: unless-stopped
container_name: redis-sentinel-charli
networks:
redis_net:
ipv4_address: 172.20.0.7
ports:
- 26381:26379
volumes:
- ./redis_sentinel_charli.conf:/sentinel.conf
command: redis-sentinel /sentinel.conf
networks:
redis_net:
ipam:
driver: default
config:
- subnet: "172.20.0.0/24"
启动后中断 redis-alpha
等待故障恢复
redis-sentinel-bravo | 1:X 22 Dec 2022 09:57:03.107 # +promoted-slave slave 172.20.0.4:6379 172.20.0.4 6379 @ master-alpha 172.20.0.2 6379
redis-sentinel-bravo | 1:X 22 Dec 2022 09:57:03.107 # +failover-state-reconf-slaves master master-alpha 172.20.0.2 6379
redis-sentinel-bravo | 1:X 22 Dec 2022 09:57:03.111 * +slave-reconf-sent slave 172.20.0.3:6379 172.20.0.3 6379 @ master-alpha 172.20.0.2 6379
redis-sentinel-bravo | 1:X 22 Dec 2022 09:57:03.886 # -odown master master-alpha 172.20.0.2 6379
redis-sentinel-bravo | 1:X 22 Dec 2022 09:57:04.218 * +slave-reconf-inprog slave 172.20.0.3:6379 172.20.0.3 6379 @ master-alpha 172.20.0.2 6379
redis-sentinel-bravo | 1:X 22 Dec 2022 09:57:04.218 * +slave-reconf-done slave 172.20.0.3:6379 172.20.0.3 6379 @ master-alpha 172.20.0.2 6379
redis-sentinel-bravo | 1:X 22 Dec 2022 09:57:04.309 # +failover-end master master-alpha 172.20.0.2 6379
redis-sentinel-bravo | 1:X 22 Dec 2022 09:57:04.309 # +switch-master master-alpha 172.20.0.2 6379 172.20.0.4 6379
redis-sentinel-bravo | 1:X 22 Dec 2022 09:57:04.309 * +slave slave 172.20.0.3:6379 172.20.0.3 6379 @ master-alpha 172.20.0.4 6379
redis-sentinel-bravo | 1:X 22 Dec 2022 09:57:04.309 * +slave slave 172.20.0.2:6379 172.20.0.2 6379 @ master-alpha 172.20.0.4 6379
恢复 redis-alpha
127.0.0.1:6379> info replication
# Replication
role:slave
master_host:172.20.0.4 # redis-charli
master_port:6379
master_link_status:up
master_last_io_seconds_ago:0
master_sync_in_progress:0
slave_read_repl_offset:57562
slave_repl_offset:57562
slave_priority:100
slave_read_only:1
replica_announced:1
connected_slaves:0
master_failover_state:no-failover
master_replid:d07fd0bc536e934a8a7369f8fe2cf320a072f482
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:57562
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:53050
repl_backlog_histlen:4513
最后更新于