一文了解Redis哨兵模式

哨兵模式是一种特殊的模式,首先redis提供了哨兵的命令,哨兵是一个独立的进程,作为进程,它会独立运行 。其原理是哨兵通过发送命令,等待Redis服务器响应,从而监控运行的多个Redis实例 。一、介绍主从切换技术的方法是:当主服务器宕机后,需要手动把一台从服务器切换为主服务器,这就需要人工干预,费事费力,还会造成一段时间内服务不可用 。这不是一种推荐的方式,更多时候,我们优先考虑哨兵模式 。
 
在 深入学习Redis(3):主从复制 中曾提到,Redis主从复制的作用有数据热备、负载均衡、故障恢复等;但主从复制存在的一个问题是故障恢复无法自动化 。本文将要介绍的哨兵,它基于Redis主从复制,主要作用便是解决主节点故障恢复的自动化问题,进一步提高系统的高可用性 。
文章主要内容如下:首先介绍哨兵的作用和架构;然后讲述哨兵系统的部署方法,以及通过客户端访问哨兵系统的方法;然后简要说明哨兵实现的基本原理;最后给出关于哨兵实践的一些建议 。文章内容基于Redis 3.0版本 。
二、哨兵模式概述哨兵模式是一种特殊的模式,首先Redis提供了哨兵的命令,哨兵是一个独立的进程,作为进程,它会独立运行 。其原理是哨兵通过发送命令,等待Redis服务器响应,从而监控运行的多个Redis实例 。

一文了解Redis哨兵模式

文章插图
Redis哨兵
 
这里的哨兵有两个作用
  • 通过发送命令,让Redis服务器返回监控其运行状态,包括主服务器和从服务器 。
  • 当哨兵监测到master宕机,会自动将slave切换成master,然后通过发布订阅模式通知其他的从服务器,修改配置文件,让它们切换主机 。
然而一个哨兵进程对Redis服务器进行监控,可能会出现问题,为此,我们可以使用多个哨兵进行监控 。各个哨兵之间还会进行监控,这样就形成了多哨兵模式 。
用文字描述一下故障切换(fAIlover)的过程 。假设主服务器宕机,哨兵1先检测到这个结果,系统并不会马上进行failover过程,仅仅是哨兵1主观的认为主服务器不可用,这个现象成为主观下线 。当后面的哨兵也检测到主服务器不可用,并且数量达到一定值时,那么哨兵之间就会进行一次投票,投票的结果由一个哨兵发起,进行failover操作 。切换成功后,就会通过发布订阅模式,让各个哨兵把自己监控的从服务器实现切换主机,这个过程称为客观下线 。这样对于客户端而言,一切都是透明的 。
三、部署这一部分将部署一个简单的哨兵系统,包含1个主节点、2个从节点和3个哨兵节点 。方便起见:所有这些节点都部署在一台机器上(局域网IP:192.168.92.128),使用端口号区分;节点的配置尽可能简化 。
1.  部署主从节点哨兵系统中的主从节点,与普通的主从节点配置是一样的,并不需要做任何额外配置 。下面分别是主节点(port=6379)和2个从节点(port=6380/6381)的配置文件,配置都比较简单,不再详述 。
#redis-6379.confport 6379daemonize yeslogfile "6379.log"dbfilename "dump-6379.rdb" #redis-6380.confport 6380daemonize yeslogfile "6380.log"dbfilename "dump-6380.rdb"slaveof 192.168.92.128 6379 #redis-6381.confport 6381daemonize yeslogfile "6381.log"dbfilename "dump-6381.rdb"slaveof 192.168.92.128 6379 
配置完成后,依次启动主节点和从节点:
redis-server redis-6379.confredis-server redis-6380.confredis-server redis-6381.conf 
节点启动后,连接主节点查看主从状态是否正常,如下图所示:
一文了解Redis哨兵模式

文章插图
图片
2.  部署哨兵节点哨兵节点本质上是特殊的Redis节点 。
3个哨兵节点的配置几乎是完全一样的,主要区别在于端口号的不同(26379/26380/26381),下面以26379节点为例介绍节点的配置和启动方式;配置部分尽量简化,更多配置会在后面介绍 。
#sentinel-26379.confport 26379daemonize yeslogfile "26379.log"sentinel monitor mymaster 192.168.92.128 6379 2 
其中,sentinel monitor mymaster 192.168.92.128 6379 2 配置的含义是:该哨兵节点监控192.168.92.128:6379这个主节点,该主节点的名称是mymaster,最后的2的含义与主节点的故障判定有关:至少需要2个哨兵节点同意,才能判定主节点故障并进行故障转移 。


推荐阅读