手把手教你搭哨兵——哨兵的概念搭建原理解析

Redis哨兵机制实现原理

1.Redis主从机制

1.1主从复制的概念

我们在实际应用中不可能只有一台redis服务器,因为如果这一台redis服务器宕机了,那么就可能导致redis不可用,同时还有可能发生数据丢失。所以这时候我们必须要有从redis做备份。

手把手教你搭哨兵——哨兵的概念搭建原理解析_第1张图片

Redis主机既能读又能写,而Redis的从机只能读不能写,当向Redis主机写入数据时必须将数据同步到Redis从服务器上,从而保证数据的一致性。这里要注意一下,保证数据一致性一定是弱一致性,不是强一致性。强一致性要求我向主机写入数据之后数据必须实时的同步到Redis从服务器上。弱一致性强调的是最终一致性,在数据同步的过程中肯定会受到网络等方面的影响,所以几乎不可能实现强一致性。

主从复制帮助我们实现了:Redis集群,数据的备份,读写分离。

1.2主从复制的过程

1.需要在从redis服务器配置在slaveof执行主redis服务的IP地址和端口号。

2.从Redis服务器和主Redis服务器建立Socket长连接,因为需要经常同步数据所以需要长连接

3.采用全量和增量形式将数据同步给从Redis服务器。

全量: 从Redis首次启动的时候(通过二进制执行dump文件) rdb

增量:主Redis每次有新的set请求的时候 aof日志文件

1.3主从复制存在的问题

如果是一主多从的话那么在开启的时候主机可能会对所有的从机作全量同步这样做及其低效。为了解决这个问题我们可以这样做。
手把手教你搭哨兵——哨兵的概念搭建原理解析_第2张图片

变成如右图所示的树状结构那么主机一开始增量同步的时候只同步到底下的两个从机,然后依次类推这样就大大地提高了效率。

1.4在Redis中配置一主多从

首先我们准备三台主机分别作为主机和从机如图所示

手把手教你搭哨兵——哨兵的概念搭建原理解析_第3张图片

这里面.3作为主机剩下两个.7.9作为从机。我们要实现的效果是

手把手教你搭哨兵——哨兵的概念搭建原理解析_第4张图片

我们让主机对.7这台从机做数据同步,.7对.9做数据同步。主机不用做任何配置,我们只需要让从机指向主机即可,所以我们要更改redis的配置文件。

手把手教你搭哨兵——哨兵的概念搭建原理解析_第5张图片

主服务器和从服务器之间要发送连接所以一定要关闭他们的防火墙systemctl stop firewalld然后我们启动3和7这对主从通过info replication查看一下他们的状态。

手把手教你搭哨兵——哨兵的概念搭建原理解析_第6张图片

这是主机role表明了他是master,然后slaves数量为1。

手把手教你搭哨兵——哨兵的概念搭建原理解析_第7张图片

role说明了他是slave,然后下面两行说了他的主节点的IP地址和端口号。然后我们再将9这台机器配置为7这台机器的从(和上述步骤一样不演示了),然后我们试一下从节点能不能做写的操作。

手把手教你搭哨兵——哨兵的概念搭建原理解析_第8张图片

如图所示从节点无法做写的操作会提示权限不足。

但是我们在主服务器可以写,同时我们在从服务器也可以读这就完成了读写分离。

手把手教你搭哨兵——哨兵的概念搭建原理解析_第9张图片
手把手教你搭哨兵——哨兵的概念搭建原理解析_第10张图片

1.4主从复制存在的缺陷

如果主节点宕机可能会导致整个redis服务不能实现写的操作,需要人为设置一个主。这就引出了哨兵机制,哨兵机制可以帮助我们从剩余的从节点中选举出一个主节点。

2.哨兵集群的架构设计原理

之前的主从复制,一旦主节点挂了,那么整个集群就只能读不能写, 所以我们需要主节点出事之后马上从剩下的从节点当中选举一个主节点。完成这个选举功能的就是哨兵。哨兵机制如图所示

手把手教你搭哨兵——哨兵的概念搭建原理解析_第11张图片

首先一点就是我们的哨兵也必须是一个集群不能说我就放一个哨兵然后这个哨兵挂了,然后就全完了。

我们的哨兵每隔10s就会监听我们的masterRedis服务器,就可以用递归的形式获取到整个Redis服务列表,因为我只要获得了主Redis服务器就能通过info replication的方式拿到全部从节点。

哨兵们通过订阅相同的主题来实现一个集群,多个哨兵都会同时监听到同一个master节点,订阅相同的主题,有新的哨兵加入就会将自己的服务器发送到主题中,随后相互建立长连接。如图所示

手把手教你搭哨兵——哨兵的概念搭建原理解析_第12张图片

首先哨兵1先订阅到了这个主题然后向这个主题里面发布自己的服务器信息,然后哨兵2进来由于他们监听的是同一个master节点,所以他们会订阅相同的主题所以也会向同一个主题下面发布自己的服务器信息,同时也会订阅到哨兵1的服务器信息,于是他们就会建立一个长连接。哨兵3也一样。所以最终哨兵会相互注册然后形成一个集群。

3.master宕机之后如何选举

单个哨兵会向master节点发送ping命令如果这个时候master节点没有及时的响应的话,这时候单个哨兵会认为该master主观不可用状态;这个时候单个哨兵会通知其他的哨兵去确认该master节点是否会宕机如果有超过>=配置文件中配置的数量,那么就会认为这个master节点已经宕机需要重新选举。

4.配置哨兵集群

首先我们要将我们解压出来的redis目录里面将sentinel.conf复制到redis的bin目录下。

手把手教你搭哨兵——哨兵的概念搭建原理解析_第13张图片

然后我们要对哨兵集群进行配置让他们都监听同一个master。如下图所示每一个都要做这样的配置。

手把手教你搭哨兵——哨兵的概念搭建原理解析_第14张图片

配置成功之后我们先启动redis服务器,然后再执行这个命令开启哨兵。./redis-sentinel ./sentinel.conf。然后分别看一下主机和从机的info。

手把手教你搭哨兵——哨兵的概念搭建原理解析_第15张图片

我们能看到info里面它有一个slave。

手把手教你搭哨兵——哨兵的概念搭建原理解析_第16张图片

然后看看这个从机他是slave,然后也有主机的信息,然后他底下还有一个从机。

手把手教你搭哨兵——哨兵的概念搭建原理解析_第17张图片

最后这个9主机是7底下没有从机了。

然后我们把主机宕掉看看选举的结果。看看这个哨兵机制有没有生效。

手把手教你搭哨兵——哨兵的概念搭建原理解析_第18张图片

我们可以惊奇的发现之前7这个小伙儿已经翻身农奴把歌唱了。一下当家做主了。这就是哨兵机制的作用在原来的主节点宕机之后在剩下的从节点随机选一个作为主节点。

然后我们再重新启动原来的主节点看看之后他会是什么什么角色

手把手教你搭哨兵——哨兵的概念搭建原理解析_第19张图片

原来的主人变成了slave了。因为这个时候这个7已经上位成功了,3再想上去把7踢下去不是那么容易。选举的过程中sentinel.conf的文件会被修改sentinel monitor myamaster 会被改成192.168.247.7然后9这台机器就知道了master是7,7最终成了master,9最终成了slave。

你可能感兴趣的:(redis大全,后端,sql,redis,分布式,架构)