【Redis笔记02】Redis运行环境之Sentinel哨兵模式

有目标就不怕路远。年轻人.无论你现在身在何方.重要的是你将要向何处去。只有明确的目标才能助你成功。没有目标的航船.任何方向的风对他来说都是逆风。因此,再遥远的旅程,只要有目标.就不怕路远。没有目标,哪来的劲头?一车尔尼雷夫斯基

导读:本篇文章讲解 【Redis笔记02】Redis运行环境之Sentinel哨兵模式,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com,来源:原文

这篇文章,主要介绍Redis运行环境之Sentinel哨兵模式。

目录

一、Sentinel哨兵模式

1.1、哨兵模式原理

1.2、哨兵环境搭建

(1)搭建主从模式

(2)创建sentinel配置文件

(3)启动sentinel哨兵结点

(4)查看sentinel结点信息

(5)模拟故障转移

1.3、哨兵模式原理

(1)通信机制

(2)主观下线

(3)客观下线

(4)选举策略


一、Sentinel哨兵模式

1.1、哨兵模式原理

上一篇文章介绍了主从模式,主从模式虽然可以提高Redis的读写性能,但是仍然会存在不可用的情况,当master结点出现故障时候,主从模式就没办法正常对外提供服务,这个时候整个项目中和redis写操作的相关功能就没法使用。

为了解决主从模式不可用的问题,我们就需要在master结点出现故障之后,主动的将master结点重新启动,或者选择一个slave结点将其变成新的master结点,这种方式需要人为的干预,才能够让Redis主从模式恢复正常。

有没有什么方式是不需要人为干预,就可以自动的让master主结点重新工作呢???这就需要介绍Sentinel哨兵模式,哨兵模式其实就是采用一个应用程序来代替人为干预的这个过程,这个应用程序就叫做:哨兵进程。

哨兵模式大致原理如下所示:

  • 首先仍然是主从模式架构,只不过这个时候会引入一个哨兵进程。
  • 哨兵进程是单独的redis服务进程,它的主要作用就是:监控所有的master和slave结点的运行状态。
  • 当哨兵进程发现master结点出现故障时候,此时会采用某种策略,从所有的slave从结点里面选择一个结点作为新的master结点。
  • 然后将其他slave从结点重新连接到新的master结点上面,原先那个master结点会变成新master结点的从结点。

有人可能会问,那如果哨兵进程也发生故障了,那这个主从模式不是一样不可用了吗???

  • 所以为了保证哨兵进程的高可用,一般情况下,哨兵结点都会设置多个,并且设置成奇数个,例如:3个、5个。
  • 一般的模式是:【一主二从三哨兵】。

【Redis笔记02】Redis运行环境之Sentinel哨兵模式

下面介绍如何搭建哨兵模式。

1.2、哨兵环境搭建

这里采用【一主二从三哨兵】的模式搭建Sentinel哨兵环境。

Sentinel哨兵模式(一主二从三哨兵)
结点名称 IP地址 启动端口
master主结点 127.0.0.1 6379
slave从结点1 127.0.0.1 6380
slave从结点2 127.0.0.1 6381
sentinel哨兵结点1 127.0.0.1 26379
sentinel哨兵结点2 127.0.0.1 26380
sentinel哨兵结点3 127.0.0.1 26381

哨兵模式是基于主从模式之上搭建的,所以这里主从模式的环境就不再重复搭建了,如果不会搭建的可以看下这篇文章【主从模式】。

(1)搭建主从模式

首先搭建一个主从模式,参考【Redis主从模式】文章。

(2)创建sentinel配置文件

在Redis的安装目录下,创建三个sentinel配置文件,文件名称分别是:

  • sentinel26379.conf、sentinel26380.conf、sentinel26381.conf。

配置文件的内容如下所示:

# 启动端口
port 26379
# 禁止保护模式
protected-mode no
# 配置监听的主服务器,这里sentinel monitor代表监控
# master-name代表主结点服务器的名称,可以自定义
# master-ip代表监控的主服务器,master-port代表端口
# quornum代表只有quornum个以上的哨兵认为主服务器不可用的时候,才会进行failover故障转移操作。
# sentinel monitor <master-name> <master-ip> <master-port> <quornum>
sentinel monitor custom-master 127.0.0.1 6379 2
# sentinel auth-pass定义服务的密码,custom-master是服务名称,123456是Redis服务器密码
# sentinel auth-pass <master-name> <password>
# sentinel auth-pass custom-master 123456
# 设置 sentinel 的唯一ID标识,不设置会自动生成一个,不同的sentinel结点的ID不同
sentinel myid 24daf4ea2601497b129141742020b34fd749021c

注意:三个sentinel配置文件除了port端口和myid不同之外,其他的是相同的。

(3)启动sentinel哨兵结点

windows打开CMD命令行窗口,采用【redis-server.exe sentinel26379.conf –sentinel】目录启动sentinel结点。依次启动三个sentinel哨兵服务,如下所示:

【Redis笔记02】Redis运行环境之Sentinel哨兵模式

(4)查看sentinel结点信息

哨兵结点启动成功之后,可以连接哨兵结点【redis-cli.exe -h 127.0.0.1 -p 26379】,然后通过【info sentinel】命令查看结点信息。

【Redis笔记02】Redis运行环境之Sentinel哨兵模式

注意:先启动主从模式中的master和slave结点,然后再查看sentinel哨兵结点信息。

(5)模拟故障转移

前面几个步骤已经成功将Sentinel哨兵模式环境搭建好啦,下面就模拟一下master主结点宕机时候,哨兵是否会主动将slave结点提升为新的master主结点。

  • windows下,通过【Ctrl+C】方式将master主结点服务结束掉。

【Redis笔记02】Redis运行环境之Sentinel哨兵模式

  • 连接一个sentinel哨兵结点,然后通过【info sentinel】命令查看结点信息。

【Redis笔记02】Redis运行环境之Sentinel哨兵模式

  •  当重新启动原先那个master结点,可以发现,这个原先的master结点会变成新的master结点的从结点。

【Redis笔记02】Redis运行环境之Sentinel哨兵模式

1.3、哨兵模式原理

(1)通信机制

sentinel哨兵结点的核心作用:就是监听所有的redis主从结点,当master发生故障时候,选择一个slave结点成为master结点。如何才能够知道某个结点是否发生故障呢???

sentinel哨兵结点会每秒钟向所有的redis结点发送一个【ping】命令,如果结点是正常的,那么这个结点就会返回一个【PONG】响应给sentinel结点,哨兵结点接收到PONG响应之后,就知道当前这个结点是正常工作的。

【Redis笔记02】Redis运行环境之Sentinel哨兵模式

(2)主观下线

当sentinel哨兵结点在规定的时间(默认是30秒)里面,没有接收到某个redis结点返回的PONG响应,那么当前这个sentinel哨兵结点就会认为这个redis结点服务不可用了,就将这个redis结点标记为不可用状态,即:下线状态,这种将redis结点标记为下线状态的方式叫做:主观下线。

主观下线并不会立即将redis结点下线,只是会修改当前sentinel哨兵结点中维护的结点状态,sentinel哨兵结点还需要询问其他的sentinel哨兵结点,才能够最终确定这个redis结点是否真的下线了。

(3)客观下线

单独某个sentinel结点认为某个redis结点下线,这种情况是不太准确的,太主观了,所以当某个sentinel哨兵发现redis结点下线之后,它会向其他的sentinel哨兵结点发送一个命令,用于判断当前这个redis结点是否处于下线状态,其他的sentinel哨兵结点接收到命令之后,会检测redis结点的状态,如果超过半数以上的sentinel哨兵结点都认为这个redis结点是下线状态,那么这个时候就真正的会将这个redis结点标记为下线状态,这种下线方式叫做:客观下线。

(4)选举策略

如果sentinel哨兵结点判断出master主结点处于下线状态了,那么这个时候,哨兵结点之间就会采用某种选举策略,从所有可用的slave从结点中挑出一个slave结点,并将slave结点提升为master结点,通过发送订阅的方式,通知其他的slave从结点,关联到新的master结点上面,最后将原先的master结点修改为slave从结点,这样做的好处是,当原先的master结点重新启动之后,可以正常的加入到主从模式里面。

上面这个操作就是故障转移(默认在3分钟内完成,超过3分钟则认为执行失败),故障转移是由一个sentinel哨兵结点来完成的,如何确定由哪个sentinel哨兵结点进行故障转移呢???所有的sentinel哨兵结点会采用某种选举算法,挑选出一个sentinel哨兵结点作为领头结点,这个领头结点就会执行故障转移操作。

到此,Redis中的哨兵模式就介绍完啦。

综上,这篇文章结束了,主要介绍Redis运行环境之Sentinel哨兵模式。

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

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

(0)
飞熊的头像飞熊bm

相关推荐

发表回复

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