【Redis】使用Redis Sentinel实现Redis HA

阅读目录


简单介绍

使用Redis Sentinel实现Redis HA。
阅读此文前,先阅读文章:《【Redis】配置redis主从复制》http://www.cnblogs.com/ssslinppp/p/5661419.html 
作者:ssslinppp

配置redis主从IP和port:
master and slaveipport
master127.0.0.16379
slave1127.0.0.1
6380
slave2127.0.0.1
6381

一、配置Sentinel.conf

上文中已经创建的主从设备,截图如下:

如上图所示:
  • master:6379
  • slave1:6380
  • slave2:6380

sentinel配置文件如下:
  1. #sentinel monitor <master-name> <ip> <redis-port> <quorum>
  2. sentinel monitor mymaster 127.0.0.1 6379 1
  3. sentinel down-after-milliseconds mymaster 30000
  4. sentinel failover-timeout mymaster 18000
  5. sentinel parallel-syncs mymaster 1

解释说明如下:
>>> sentinel monitor mymaster 127.0.0.1 6379 1
  • mymaster :为master redis的名称;
  • ip和port指定了6379端口的Redis为master;
  • quorum:一般情况下会启动多个redis sentinel作为分布式使用,当master挂掉之后,需要从若干个slave中推选出1个slave作为新的master,并将其他slave的slaveof设置指向这个新的master。而判断master redis是否挂掉,需要sentinel 说了算,只有不少于quorum个sentinel认为master redis挂掉,才会进行failover。因为这里只启动了一个sentinel,所以配置quorum为1,若是启动了多个sentinel用于分布式,可以将quorum设置>1。
>>> sentinel down-after-milliseconds mymaster 30000
表示当master redis 30s 没有应答时,就可以断定master挂掉了,但需要结合上面配置的quorum一起。
>>> sentinel failover-timeout mymaster 18000
若sentinel在该配置时间内没有完成failover操作(即故障时master/slave自动切换),则认为本次failover失败。
>>> sentinel parallel-syncs mymaster 1
指定在failover过程中,同时被sentinel reconfigure的最大slave实例数。由于reconfigure过程中,对应的slave会中断响应客户的请求,故为避免所有的slave同时不可用,该值需适当配小。

二、启动Redis Sentinel

  1. ./src/redis-sentinel sentinel.conf

从上可以看出,master redis 为6379,而slave又两个,分别为:6380和6381.
此时在去观察sentinel.conf,会发现sentinel.conf发生了变化,如下所示:

三、关闭master redis,测试failover


大约过去半分钟,后会看到如下:
  • slave 6380的日志记录:
  • 再看看sentinel的提示信息:

  • 再来观察sentinel.conf

可以对比最初的sentinel.conf

此时再分别看看6379/6380/6381的redis.conf:
  • 6379的redis.conf
分2种情况
情况1:当6379(原先的master redis)关闭后,还未重启,此时的redis.conf文件内没有slaveof的配置;
情况2:当6379服务启动后,会在redis.conf的最后添加slaveof的配置,如下:

同时可以看到sentinel输出如下信息:
e
此时看看6379的日志信息:


  • 6380的redis.conf


  • 6381的redis.conf

已经将slaveof自动修改为:6380(新的master)

测试新的同步信息:

从上面的输出结果可以看出,redis 主从复制依然有效。

四、重新切换为最初的master

前面我们看到了当master挂掉时,sentinel会自动的从slave中挑选出一个作为master,并重新配置各redis实例的配置文件。
当之前挂掉的master又重启后,如果希望还是还原到原先的主从配置,可以通过如下操作来进行:

登录到sentinel,使用命令:
  1. redis-cli -h 127.0.0.1 -p 26379 #26379为sentinel的端口
执行语句:
  1. sentinel failover mymaster

接下来我们来看看是否还原到之前的主从配置:
  • 先看看sentinel的输出信息:


查看sentinel的配置文件:


接下来看看3个redis.conf是否自动变化了(reconfigure)
  • 6379的redis.conf
全文搜索slaveof,没有此配置选项,说明已经发生了变化,因为6379此时就是master redis。
  • 6380的redis.conf

在最后添加了:slaveof 127.0.0.1 6379;
说明6380已经从master重新变化为slave了。
  • 6381的redis.conf


还可以通过如下方式进行说明:




五、参考链接

《【Redis】配置redis主从复制》http://www.cnblogs.com/ssslinppp/p/5661419.html 
《Redis Sentinel Documentation》 http://redis.io/topics/sentinel 
《Windows下Redis Sentinel部署》http://bbs.redis.cn/forum.php?mod=viewthread&tid=715 






原文地址:https://www.cnblogs.com/ssslinppp/p/5663788.html