主从复制-master宕机故障处理
master节点宕机- 选择
slave 1执行命令slave no one让slave 1成为新的master - 对剩下的
slave 2执行slaveof new master - 后续访问就会指向新的
master
上述解决方案有一下问题
-
如何判断
master节点不可用 -
处理过程中执行的命令,如何保证事物
-
redis如何通知客户端访问新的
master节点
Redis Sentinel
Redis Sentinel是一个分布式架构,包含若干个Sentinel节点和Redis数据节点,每个Sentinel节点会对数据节点和其余Sentinel节点进行监控,当发现节点不可达时,会对节点做下线标识。 如果被标识的是主节点,他还会选择和其他Sentinel节点进行选举,当大多数的Sentinel节点都认为主节点不可达时,他们会重新选举出一个Sentinel节点来完成自动故障转移工作,同时将这个变化通知给Redis应用方。 整个过程完全自动,不需要人工介入,所以可以很好解决Redis的高可用问题。
redis sentinel架构
redis sentinel 故障迁移
主从配置
master 和 slave 配置文件
通过docker启动redis
启动redis-7000(master) 并进入
启动reids-7001(slave-0) 并进入
启动 redis-7002(slave-1) 并进入
最后看一下 master的主从信息
验证主从
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容器
进入任意一个 sentinel内部执行info命令
可以看到监控到
- 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
然后进入redis-7000(原master)节点
会发现,该节点已经变成了 slave节点,且master指向了redis-7001