Redis 哨兵模式实现主从故障互切换

    All rights reserved.No part of this article may be reproduced or distributed by any means,or stored in a database or retrieval system,without the prior written permission of persistenceGoing author
https://blog.****.net/persistencegoing/article/details/84376427

 

      redis Sentinel 是一个分布式系统, 你可以在一个架构中运行多个 Sentinel 进程(progress), 这些进程使用流言协议(gossip protocols)来接收关于主服务器是否下线的信息, 并使用投票协议(agreement protocols)来决定是否执行自动故障迁移, 以及选择哪个从服务器作为新的主服务器。

虽然 Redis Sentinel 释出为一个单独的可执行文件 redis-sentinel , 但实际上它只是一个运行在特殊模式下的 Redis 服务器, 你可以在启动一个普通 Redis 服务器时通过给定 --sentinel 选项来启动 Redis Sentinel 。

多个Sentinel 系统用于管理多个 Redis 服务器(instance), 该系统执行以下三个任务:

  •  监控(Monitoring): Sentinel 会不断地检查你的主服务器和从服务器是否运作正常。
  •  提醒(Notification): 当被监控的某个 Redis 服务器出现问题时, Sentinel 可以通过 API 向管理员或者其他应用程序发送通知。
  •  自动故障迁移(Automatic failover): 当一个主服务器不能正常工作时, Sentinel 会开始一次自动故障迁移操作, 它会将失效主服务器的其中一个从服务器升级为新的主服务器, 并让失效主服务器的其他从服务器改为复制新的主服务器; 当客户端试图连接失效的主服务器时, 集群也会向客户端返回新主服务器的地址, 使得集群可以使用新主服务器代替失效服务器。

 

 

搭建哨兵模式最好一主二从,因为当主redis挂了,经过投票会从剩下的从服务器中投票选出一个新的成为主服务器

如果不会redis主从搭建的,可以先搭建

https://blog.****.net/u010648555/article/details/79427606

如果你的redis设置了密码,请注意修改配置,不然启动会报错,修改注意点请看下面的博客

https://blog.****.net/persistencegoing/article/details/92788659

主从搭建好之后,启动搭建好的一主二从三台redis

现在我们就开始配置Sentinel

首先新建sentinel.conf空文件,新建的位置

Redis 哨兵模式实现主从故障互切换

然后内容为下

#当前Sentinel服务运行的IP
bind 127.0.0.1
#当前Sentinel服务运行的端口
port 26380
#其中mymaster是监控的这一套master-slave的名字,2是2个sentinel认为master有问题就故障转移 127.0.0.1masterIP,
#第一行配置指示 Sentinel 去监视一个名为 mymaster 的主服务器, 这个主服务器的 IP 地址为 127.0.0.1 , 端口号为 6379 ,
#而将这个主服务器判断为失效至少需要 2 个 Sentinel 同意 (只要同意 Sentinel 的数量不达标,自动故障迁移就不会执行)。
#票数在本文中:redis集群中有3个sentinel实例,其中master挂掉啦,这里设置票数为2,表示有2个sentinel认为master挂掉啦,
#才能被认为是正真的挂掉啦。
sentinel monitor mymaster 127.0.0.1 6380 2
#(设置成:protected-mode no;保护模式关闭,如果你不关闭保护模式,启动哨兵的时候,无法正常运行)
protected-mode no
# 3s内mymaster无响应,则认为mymaster宕机了
sentinel down-after-milliseconds mymaster 3000
# 每个时间点只有1个slave对新master进行复制,不并发
sentinel parallel-syncs mymaster 1
#如果10秒后,mysater仍没启动过来,则启动failover
sentinel failover-timeout mymaster 10000
#redis的密码(123456)
sentinel auth-pass mymaster 123456

请注意,如果你的redis没有密码,则不需要sentinel auth-pass mymaster 123456这行。

分别在每个redis下面都新建这个文件,注意修改端口,三个sentinel的端口得不一样,26381,26382

我们之前已经把所有redis都启动好了,现在我们分别启动sentinel

启动命令都是

Redis 哨兵模式实现主从故障互切换

启动后的样子

Redis 哨兵模式实现主从故障互切换

这样算是搭建好了,可以看到一主二从的配置信息

然后启动剩下的sentinel

最后所有都启动好了有六个cmd框

Redis 哨兵模式实现主从故障互切换

 

妥妥的六个

然后我们可以赋值,看看一主二从是否搭建成功,成功之后我们可以试一试投票设置

我们把master的redis关掉之后,我们可以看当前redis的sentinel

Redis 哨兵模式实现主从故障互切换

有它的相关的投票过程

我们可以看到一个从redis变主redis了 

而且主从复制也是可行的

接下来我们重启之前的主redis,我们发现它已经变成了从redis

如果你的redis设置了密码,从配置不正确,你会发现你之前的主redis重启失败,让你设置redis的密码

unable to auth to master: -err invalid password

 

这个时候你就检查你每个redis的配置

看你每个redis的密码是否正确,在再每个redis中加

masterauth "123456"

然后关掉全部重启

 

 

全部重启的时候

主从和你关闭之前是一致的

比如你测试之前是

A主     B从  C从

关闭A之后    B是主redis

重启A之后   A是从

全部关闭之后

B依旧是主redis  A是从

 

 

希望大家关注我一波,防止以后迷路,有需要的可以加群讨论互相学习java ,学习路线探讨,经验分享与java求职     

群号:721 515 304