【手把手】教你搭建Redis中Sentinel高可用

导读:本篇文章讲解 【手把手】教你搭建Redis中Sentinel高可用,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

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

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

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

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

—————————– 以上摘自Redis中文网站对于Redis中Sentinel的介绍 ——————————

在上一篇文章当中,我们介绍了Redis的主从复制,也手把手的教大家搭建了一下Redis的这个主从复制是如何搭建起来的,但是存在的一个问题就是在文章的最后当6379主机宕机了以后,我们是通过手工的方式来将6380重新开启作为主机,然后让6381去跟随6380,那这个问题就在于这个人工。我们都知道人工是这个世界上最不可靠的东西,因为人会生病,人会偷懒,人会请假,人会各种各样的理由不干活。所以我们就需要一个技术或者说一个程序能够主动的去进行这个转移,这项技术就是Sentinel(哨兵),那么接下来我们就还是以同样的环境来进行哨兵的演示。

1、准备Sentinel配置文件

【手把手】教你搭建Redis中Sentinel高可用

第2行配置指示Sentinel端口号为26379,第2行配置指示 Sentinel 去监视一个名为 mymaster 的主服务器, 这个主服务器的 IP 地址为 127.0.0.1 , 端口号为 6379 ,而将这个主服务器判断为失效至少需要 2 个 Sentinel 同意 (只要同意 Sentinel 的数量不达标,自动故障迁移就不会执行)。这样就已经完成了最简单的哨兵配置文件,那么同样的6380和6381的哨兵我们也创建同样的配置文件。

【手把手】教你搭建Redis中Sentinel高可用

 【手把手】教你搭建Redis中Sentinel高可用

这里要注意,6380和6381的哨兵的配置文件,修改的只是哨兵本身的端口号,而这三个哨兵同时监控的都是6379这个Redis的实例,所以6380和6381的哨兵配置文件里面,对于6379的监控不改变。 

2、启动Redis实例

将6379作为主机启动

redis-server ~/test/6379.conf

【手把手】教你搭建Redis中Sentinel高可用

6380和6381作为从机追随6379

redis-server ~/test/6380.conf –replicaof 127.0.0.1 6379

【手把手】教你搭建Redis中Sentinel高可用

redis-server ~/test/6381.conf –replicaof 127.0.0.1 6379 

【手把手】教你搭建Redis中Sentinel高可用

 3、启动Sentinel

在Redis的源码目录中,编译完以后的src/目录下,有Sentinel启动的命令

cd /usr/local/source/redis-6.2.5/src/

【手把手】教你搭建Redis中Sentinel高可用

 但是在安装的目录下只有一个软链接指向redis-server

cd /opt/feenix/redis6/bin/

【手把手】教你搭建Redis中Sentinel高可用

 也就是说,我们其实是可以用redis-server这个命令来启动Sentinel,只需要在后面加上相应的参数–sentinel即可。

redis-server ~/test/26379.conf –sentinel

【手把手】教你搭建Redis中Sentinel高可用

从启动日志中我们就可以看到这个哨兵在启动完以后,它已经发现了6380和6381这两个从机。但是我们在哨兵的配置文件中只指定了6379这一个主机,我们并没有指定6380和6381这两个从机,那么这个哨兵为什么会知道6380和6381这两个从机呢?因为6379这个主机,他知道他自己被哪些从机所跟随,那么当哨兵监控6379这个主机的时候,它也就知道这个主机的从机了。那么这是怎么实现的呢?这个其实就是基于Redis的发布订阅所实现的。

现在再启动另外一个哨兵26380

redis-server ~/test/26380.conf –sentinel

【手把手】教你搭建Redis中Sentinel高可用

 此时通过前台就可以看到这个哨兵不止能发现主机的两台从机,它还知道另外哨兵的存在。

redis-server ~/test/26381.conf –sentinel

果然26381这个哨兵启动以后,它也会和26379和26380这两个哨兵互为通信,这样每个哨兵不仅能够知道所监控的主机的从机,还会知道其他哨兵的存在。

4、模拟Redis实例宕机

当哨兵都启动好以后,我们可以模拟一下主机宕机以后会发生什么事情

【手把手】教你搭建Redis中Sentinel高可用

从机立马就知道主机已经宕机,和主机的通信已经断掉。 但是哨兵并没有立马将别的从机转为主机,这是为什么呢?因为这是防止误宕机所导致的,也就是说有可能是因为主机与哨兵之间的通信有延迟,而不是真正的宕机,哨兵会设定一个阈值,超过这个阈值,我才认为你是真的宕机。

【手把手】教你搭建Redis中Sentinel高可用

过了一段时间以后,就可以发现哨兵已经将6380转成主机,并且自动的将6379和6381都追随到6380。此时在6380中操作,就会将数据自动同步到6381。

【手把手】教你搭建Redis中Sentinel高可用

【手把手】教你搭建Redis中Sentinel高可用 

而在故障转移的过程中,哨兵不仅仅只是做了这么一件事情,哨兵它还会动自己的配置文件。

【手把手】教你搭建Redis中Sentinel高可用

之前在这边写的是6379,那么当6379宕机以后,主机转为6380,哨兵也会在配置文件中将监控的主机改为6380。

5、哨兵是如何知道有其它哨兵的存在?

上面我们说到哨兵知道其他的哨兵是基于Redis的发布订阅功能,那么下面我们来详细讨论一下,这个发布订阅是怎么实现的?

psubscribe *

【手把手】教你搭建Redis中Sentinel高可用

 我们可以看到在Redis中有这么一个通道:__sentinel__:hello,在这个通道中,26379,26380和26381这几个都在相互说话。也就是说,其实是所有的哨兵都怼到master身上,然后通过发布订阅来知道有其他哨兵的存在。

【手把手】教你搭建Redis中Sentinel高可用

 6、Sentinelo配置文件解析

其实在Redis源码目录下是有原始的哨兵配置文件

cd /usr/local/source/redis-6.2.5/

【手把手】教你搭建Redis中Sentinel高可用

 【手把手】教你搭建Redis中Sentinel高可用

指定Sentinel的端口号为26379

【手把手】教你搭建Redis中Sentinel高可用

是否为前台阻塞启动,yes是前台阻塞启动,no是后台运行启动。

【手把手】教你搭建Redis中Sentinel高可用

监视一个名为 mymaster 的主服务器, 这个主服务器的 IP 地址为 127.0.0.1 , 端口号为 6379 ,而将这个主服务器判断为失效至少需要 2 个 Sentinel 同意 (只要同意 Sentinel 的数量不达标,自动故障迁移就不会执行) 。

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/111951.html

(0)
Java光头强的头像Java光头强

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!