Redis 哨兵模式

Redis 哨兵模式

前景

如果redis主从架构中出现宕机怎么办?

  • 从Redis 宕机

a)这个相对而言比较简单,在Redis中从库重新启动后会自动加入到主从架构中,自动完成同步数据;

b)如果从库在断开期间,主库的变化不大,从库有做持久化的前提下,再次启动后,会实现增量复制。

  • 主Redis 宕机

i.第一步,在从数据库中执行SLAVEOF NO ONE命令,断开主从关系并且提升为主库继续服务;

ii.第二步,将主库重新启动后,执行SLAVEOF命令,将其设置为其他库的从库,这时数据就能更新回来;

但是这需要手动操作,麻烦不说,还容易出错,那有什么好的办法呢?

哨兵原理

Redis提供了sentinel(哨兵)机制,通过sentinel模式启动redis后,自动监控master/slave的运行状态,基本原理是:心跳机制+投票裁决

每个sentinel会向其它sentinal、master、slave定时发送消息,以确认对方是否“活”着,如果发现对方在指定时间(可配置)内未回应,则暂时认为对方已挂(所谓的“主观认为宕机” Subjective Down,简称SDOWN)。

若"哨兵群"中的多数sentinel,都报告某一master没响应,系统才认为该master"彻底死亡"(即:客观上的真正down机,Objective Down,简称ODOWN),通过一定的vote算法,从剩下的slave节点中,选一台提升为master,然后自动修改相关配置。

哨兵模式配置

先在redis根目录下创建conf子目录,新建配置文件sentinel.conf,或者拷贝解压的redis源文件的根目录下有sentinel.conf,内容如下

port 26379
dir /tmp
sentinel monitor master 192.168.1.103 6379 1
sentinel down-after-milliseconds master 30000
sentinel parallel-syncs master 1
sentinel failover-timeout master 180000
logfile "/var/log/sentinel_log.log"

配置说明:

1、prot 当前Sentinel服务运行的端口

2、dir Sentinel 服务运行时使用的临时文件夹

3、sentinel monitor master 192.168.110.101 6379 2

Sentinel去监视一个名为master的主redis实例,这个主实例的IP地址为本机地址192.168.1.103,端口号为6379,
而将这个主实例判断为失效至少需要1个 Sentinel进程的同意,只要同意Sentinel的数量不达标,自动failover就不会执行

4、sentinel down-after-milliseconds master 30000

指定了Sentinel认为Redis实例已经失效所需的毫秒数。当实例超过该时间没有返回PING,或者直接返回错误,
那么Sentinel将这个实例标记为主观下线。只有一个 Sentinel进程将实例标记为主观下线并不一定会引起实例的自动故障迁移:只有在足够数量的Sentinel都将一个实例标记为主观下线之后,实例才会被标记为客观下线,这时自动故障迁移才会执行

5、sentinel parallel-syncs master 1

指定了在执行故障转移时,最多可以有多少个从Redis实例在同步新的主实例,在从Redis实例较多的情况下这个数字越小,同步的时间越长,完成故障转移所需的时间就越长

6、sentinel failover-timeout master 180000

如果在该时间(ms)内未能完成failover操作,则认为该failover失败

操作步骤

  1. 配置主从复制
  2. 修改各个redis服务器中的 Sentinel的配置文件
  3. 启动redis服务,
  4. 启动Sentinel
  5. 启动顺序: 主Redis -> 从Redis -> Sentinel

你可能感兴趣的:(redis)