数据库
首页 > 数据库> > 从零单排学Redis【铂金二】

从零单排学Redis【铂金二】

作者:互联网

前言

好的,今天我们要上【铂金二】了,如果还没有上铂金的,赶紧先去蹭蹭经验再回来(不然不带你上分了):

在上篇中抛出了一个问题:

抛个问题:如果从服务器挂了,没关系,我们一般会有多个从服务器,其他的请求可以交由没有挂的从服务器继续处理。如果主服务器挂了,怎么办?因为我们的写请求由主服务器处理,只有一台主服务器,那就无法处理写请求了?

Redis提供了哨兵(Sentinel)机制供我们解决上面的情况。如果主服务器挂了,我们可以将从服务器升级为主服务器,等到旧的主服务器(挂掉的那个)重连上来,会将它(挂掉的主服务器)变成从服务器。

在正常的情况下,主从加哨兵(Sentinel)机制是这样子的:

正常情况下

主服务器挂了,主从复制操作就中止了,并且哨兵系统是可以察觉出主服务挂了。:

Sentinel可以察觉主服务掉线,复制操作中止。

Redis提供哨兵机制可以将选举一台从服务器变成主服务器

选举一台从服务器变成主服务器

然后旧的主服务器如果重连了,会变成从服务器:

旧的主服务器如果重连了,会变成从服务器

这篇文章主要讲讲Redis的哨兵(Sentinel)机制的一些细节。希望看完对大家有所帮助~

一、哨兵(Sentinel)机制

High Availability: Redis Sentinel is the official high availability solution for Redis.

哨兵(Sentinel)机制主要用于实现Redis的高可用性,主要的功能如下:

下面来具体讲讲Sentinel是如何将从服务器提升为主服务器的。

tips:Sentinel可以让我们的Redis实现高可用,Sentinel作为这么一个组件,自身也必然是高可用的(不可能是单点的)

1.1 启动和初始化Sentinel

首先我们要知道的是:Sentinel本质上只是一个运行在特殊模式下的Redis服务器。因为Sentinel做的事情和Redis服务器是不一样的,所以它们的初始化是有所区别的(比如,Sentinel在初始化的时候并不会载入AOF/RDB文件,因为Sentinel根本就不用数据库)。

然后,在启动的时候会将普通Redis服务器的代码替换成Sentinel专用代码。(所以Sentinel虽然作为Redis服务器,但是它不能执行SET、DBSIZE等等命令,因为命令表的代码被替换了)

接着,初始化Sentinel的状态,并根据给定的配置文件初始化Sentinel监视的主服务器列表

初始化

最后,Sentinel会创建两个连向主服务器的网络连接

创建网络连接

1.2 获取和更新信息

Sentinel通过主服务器发送INFO命令来获得主服务器属下所有从服务器的地址信息,并为这些从服务器创建相应的实例结构。

更新实例结构

当发现有新的从服务器出现时,除了创建对应的从服务器实例结构,Sentinel还会创建命令连接和订阅连接。

创建连接

在Sentinel运行的过程中,通过命令连接会以每两秒一次的频率向监视的主从服务器_sentinel_:hello频道发送命令(主要发送Sentinel本身的信息,监听主从服务器的信息),并通过订阅连接接收_sentinel_:hello频道的信息。

1.3 判断主服务器是否下线了

判断主服务器是否下线有两种情况:

在多少毫秒内无效回复才认定主服务器是主观下线的,以及多少个Sentinel认为主服务器是下线的,才认定为客观下线。这都是可以配置

1.4 选举领头Sentinel和故障转移

当一个主服务器认为为客观下线以后,监视这个下线的主服务器的各种Sentinel会进行协商,选举出一个领头的Sentinel,领头的Sentinel会对下线的主服务器执行故障转移操作。

选举领头Sentinel的规则也比较多,总的来说就是先到先得(哪个快,就选哪个)

选举出领头的Sentinel之后,领头的Sentinel会对已下线的主服务器执行故障转移操作,包括三个步骤:

挑选某一个从服务器作为主服务器也是有策略的,大概如下:

最后

这篇文章主要讲解了Sentinel的作用和工作的基本过程(我觉得已经基本OK了),其中也涉及到了很多的细节,这里我就没有一一整理出来了。想要深入学习的同学最好自己看看书或者文档~~

tips:目前为止的主从+哨兵架构可以说Redis是高可用的,但要清楚的是:Redis还是会丢失数据

丢失数据有两种情况:

可以通过以下两个配置尽量减少数据丢失的可能:

min-slaves-to-write 1
min-slaves-max-lag 10

从零单排学Redis【铂金三】,敬请期待~

参考资料:

标签:Redis,单排,铂金,Sentinel,服务器,哨兵,下线,连接
来源: https://blog.csdn.net/zl1zl2zl3/article/details/89057578