Redis系列-08高可用(Redis Sentinel)

173 阅读2分钟

主从复制-master宕机故障处理

image-20200606063344307

  1. master节点宕机
  2. 选择slave 1 执行命令 slave no oneslave 1成为新的 master
  3. 对剩下的 slave 2执行 slaveof new master
  4. 后续访问就会指向新的master

image-20200606065900632

上述解决方案有一下问题

  1. 如何判断master节点不可用

  2. 处理过程中执行的命令,如何保证事物

  3. redis如何通知客户端访问新的master节点

Redis Sentinel

Redis Sentinel是一个分布式架构,包含若干个Sentinel节点和Redis数据节点,每个Sentinel节点会对数据节点和其余Sentinel节点进行监控,当发现节点不可达时,会对节点做下线标识。 如果被标识的是主节点,他还会选择和其他Sentinel节点进行选举,当大多数的Sentinel节点都认为主节点不可达时,他们会重新选举出一个Sentinel节点来完成自动故障转移工作,同时将这个变化通知给Redis应用方。 整个过程完全自动,不需要人工介入,所以可以很好解决Redis的高可用问题。

redis sentinel架构

image-20200606155206702

redis sentinel 故障迁移

image-20200606155402735

主从配置

master 和 slave 配置文件

image-20200606094727532

通过docker启动redis

启动redis-7000(master) 并进入

image-20200606094927618

image-20200606095006454

启动reids-7001(slave-0) 并进入

image-20200606095219772

image-20200606095256022

启动 redis-7002(slave-1) 并进入

image-20200606095608514

最后看一下 master的主从信息

image-20200606095915755

验证主从

image-20200606100330251

Redis Sentinel 集群搭建

sentinel.conf配置文件

Sentinel-26379.conf

port 26379
# senetinel monitor <master-name> <master-redis-ip>:主库ip <master-redis-port>:主库port <quorum>:最小投票数,由于有三台redis-sentinel实例,所以可以设置成2
sentinel monitor mymaster 192.168.124.15 7000 2

Sentinel-26380.conf

port 26380
sentinel monitor mymaster 192.168.124.15 7000 2

Sentinel-26381.conf

port 26381
sentinel monitor mymaster 192.168.124.15 7000 2

docker 启动 sentinel容器

image-20200606160945888

进入任意一个 sentinel内部执行info命令

image-20200606161229819

可以看到监控到

  • 1个master节点: 192.168.124.15:7000
  • 2个slave节点
  • 3个sentinel节点

测试

进入 redis-7000即 master节点,执行 redis-cli -p 7000 DEBUG sleep 60,让 主库进入60秒的休眠期,然后再进入两个slave节点 redis-7001和redis-7002内分别执行 info replication命令,会发现其中一个(redis-7001)slave节点的 role会由slave变成master

image-20200606162430899

然后进入redis-7000(原master)节点

image-20200606163054594

会发现,该节点已经变成了 slave节点,且master指向了redis-7001