崔志伟博客

Redis的哨兵模式(主从复制)

在讲哨兵模式之前,我们有必要先来介绍一下 Redis 另外两种复制策略:
在讲哨兵模式之前,我们有必要先来介绍一下 Redis 另外两种复制策略:
1. 一主二仆,这种结构有一个明显的弊端,那就是过于中心化,所有的请求都来自一个主机,主机的负担太重,很正常的我们会想到,可不可以创建一种链式结构来解决这个问题呢?当然是可以的啦!再 redis 中通常情况下一个slaver会跟随一个master,但是slaver也可以连接另外一个slaver,作为另外那个slaver的master,当然他并不是真正意义上的master,只是相对而言是一个master,下图所示:
1. 一主二仆,这种结构有一个明显的弊端,那就是过于中心化,所有的请求都来自一个主机,主机的负担太重,很正常的我们会想到,可不可以创建一种链式结构来解决这个问题呢?当然是可以的啦!再 redis 中通常情况下一个slaver会跟随一个master,但是slaver也可以连接另外一个slaver,作为另外那个slaver的master,当然他并不是真正意义上的master,只是相对而言是一个master,下图所示:
依然是使用slaveof语句,只不过6381端口的redis目标是6380,所以,81的相对主机是80,80的相对主机是79,很简单。
依然是使用slaveof语句,只不过6381端口的redis目标是6380,所以,81的相对主机是80,80的相对主机是79,很简单。
2. 反客为主:顾名思义,他的意思就是说从机代替原来主机的位置变成了新的master,我现在恢复一主二仆的结构,然后将主机退出,按照上一篇讲的内容可以知道主机断开连接之后,他的从机会原地待命,,这个时候,如果主机迟迟不能恢复工作,那么我们就必须寻求一种方法来是系统能够继续正常运行,理所当然的是从这些从机之中选择一个成为新的主机,然后将其余的从机连接到这个新的主机上面,构成一个新的体系。
2. 反客为主:顾名思义,他的意思就是说从机代替原来主机的位置变成了新的master,我现在恢复一主二仆的结构,然后将主机退出,按照上一篇讲的内容可以知道主机断开连接之后,他的从机会原地待命,,这个时候,如果主机迟迟不能恢复工作,那么我们就必须寻求一种方法来是系统能够继续正常运行,理所当然的是从这些从机之中选择一个成为新的主机,然后将其余的从机连接到这个新的主机上面,构成一个新的体系。
 
将从机变成主机使用到的命令式slaveof  on one ,将其他从机连接到这个主机使用的命令依然是slaveof:
将从机变成主机使用到的命令式slaveof  on one ,将其他从机连接到这个主机使用的命令依然是slaveof:
 
可以看到,新的体系已经构建完成,有一主一从两个服务器。
可以看到,新的体系已经构建完成,有一主一从两个服务器。
需要注意的是,此时如果主机恢复工作,那么他将再这个新体系之外,单独的一个服务,本身是master,没有任何slaver。
需要注意的是,此时如果主机恢复工作,那么他将再这个新体系之外,单独的一个服务,本身是master,没有任何slaver。
好了,下面我们要说说哨兵模式了,哨兵模式说白了就是将反客为主的一些列动作自动化,他会在后台有一个监控,监控当前的主机,巡逻主机下面的从机,如果某一时刻主机挂掉了,那么他会通过一种投票的机制从从机之中选举一台作为新的主机,并且,其余的从机将会连接到这个新的主机上面。下面演示一下他的工作流程:
好了,下面我们要说说哨兵模式了,哨兵模式说白了就是将反客为主的一些列动作自动化,他会在后台有一个监控,监控当前的主机,巡逻主机下面的从机,如果某一时刻主机挂掉了,那么他会通过一种投票的机制从从机之中选举一台作为新的主机,并且,其余的从机将会连接到这个新的主机上面。下面演示一下他的工作流程:
1. 首先,在/myredis下面新建一个sentinel.conf文件:touch sentinel.conf在其中设置监控的主机以及投票策略,其格式为:
1. 首先,在/myredis下面新建一个sentinel.conf文件:touch sentinel.conf在其中设置监控的主机以及投票策略,其格式为:
sentinel monitor 主机名 主机ip 主机端口 票数n         票数多余n的从机作为主机
sentinel monitor 主机名 主机ip 主机端口 票数n         票数多余n的从机作为主机
然后通过redis-sentinel命令执行这个文件,为主机开启哨兵:
然后通过redis-sentinel命令执行这个文件,为主机开启哨兵:
 
可以看到这个就是类似于哨兵的日志打印,每当哨兵有动作执行的时候都会打印到这里,下面我们再一个master的结构下让主机挂掉,来看看会发生什么:
可以看到这个就是类似于哨兵的日志打印,每当哨兵有动作执行的时候都会打印到这里,下面我们再一个master的结构下让主机挂掉,来看看会发生什么:
 
正常情况下,主机挂了之后,从机的角色依然是slaver,但是此时,有了哨兵之后,主机挂了,哨兵会投票选举一个从机作为新的master,可以看到,稍微等待几秒钟之后,81端口的从机成为了新的主机,同时,80端口成为了81端口的从机,我们来看看哨兵打印的日志:
正常情况下,主机挂了之后,从机的角色依然是slaver,但是此时,有了哨兵之后,主机挂了,哨兵会投票选举一个从机作为新的master,可以看到,稍微等待几秒钟之后,81端口的从机成为了新的主机,同时,80端口成为了81端口的从机,我们来看看哨兵打印的日志:
 
可以看到整个投票选举的过程。
可以看到整个投票选举的过程。
那么现在,我再次启动主机又会发生什么呢?
那么现在,我再次启动主机又会发生什么呢?
启动主机之后,可以看到(稍微等几秒)81端口主机从一个连接数变成了两个,没错,就是恢复了的旧主机变成了81端口的从机,如下是哨兵的日志打印:
启动主机之后,可以看到(稍微等几秒)81端口主机从一个连接数变成了两个,没错,就是恢复了的旧主机变成了81端口的从机,如下是哨兵的日志打印:
 
即:原来的主机恢复了以后,就会自动的转为从机跟随新主机。
即:原来的主机恢复了以后,就会自动的转为从机跟随新主机。
redis入职机制的缺点:
redis入职机制的缺点:
有延迟,从机越多,延迟多严重
有延迟,从机越多,延迟多严重

 

来源:原创

来源:技术君

上一篇: MAP遍历的四种方法

下一篇: dubbo+zookeeper分布式项目环境搭建