Redis Sentinel实现Failover

redis版本:2.8.17

服务器规划:

10.50.13.34(6379 master)

10.50.13.35(6379 slave)

10.50.13.36(6379 slave)

10.50.13.37(6379 slave)

一、安装redis

tar zxf redis-2.8.17.tar.gz

cd redis-2.8.17

make

make install

mv redis-2.8.17 /app/sinova/redis

cd /app/sinova/redis

mkdir {bin,conf,rdb,log}

mv redis.conf sentinel.conf conf

find -maxdepth 1 -type f -delete

cd src

mv mkreleasehdr.sh redis-benchmark redis-sentinel redis-server redis-cli redis-check-aof redis-check-dump ../bin/

二、配置redis

redis.conf配置文件修改如下内容:

master配置:

daemonize yes

pidfile /app/sinova/redis/redis.pid

logfile  /app/sinova/redis/log/redis.log

dir /app/sinova/redis/rdb

slave配置:

daemonize yes

pidfile /app/sinova/redis/redis.pid

logfile  /app/sinova/redis/log/redis.log

dir /app/sinova/redis/rdb

slaveof 10.50.13.34 6379

 

三、配置sentinel

daemonize yes

logfile "/app/sinova/redis/log/sentinel.log"

sentinel monitor mymaster 10.50.13.34 6379 2

sentinel down-after-milliseconds mymaster 30000

sentinel failover-timeout mymaster 60000

sentinel parallel-syncs mymaster 1

 

四、启动redis

先启动master,然后再启动slave,命令相同,如下:

/app/sinova/redis/bin/redis-server /app/sinova/redis/conf/redis.conf

 

启动后查看主从状态:

redis-cli info Replication
# Replication
role:master
connected_slaves:3
slave0:ip=10.50.13.35,port=6379,state=online,offset=29,lag=0
slave1:ip=10.50.13.36,port=6379,state=online,offset=29,lag=0
slave2:ip=10.50.13.37,port=6379,state=online,offset=29,lag=0
master_repl_offset:29
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:2
repl_backlog_histlen:28

 

五、启动sentinel

先启动master,然后再启动slave,命令相同,如下:

/app/sinova/redis/bin/redis-sentinel /app/sinova/redis/conf/sentinel.conf

 

在master上查看/app/sinova/redis/log/sentinel.log   #slave下也有此日志,可以看到内容有变化

$ cat sentinel.log
                _._                                                  
           _.-``__ ‘‘-._                                             
      _.-``    `.  `_.  ‘‘-._           Redis 2.8.17 (00000000/0) 64 bit
  .-`` .-```.  ```\/    _.,_ ‘‘-._                                   
 (    ‘      ,       .-`  | `,    )     Running in sentinel mode
 |`-._`-...-` __...-.``-._|‘` _.-‘|     Port: 26379
 |    `-._   `._    /     _.-‘    |     PID: 16995
  `-._    `-._  `-./  _.-‘    _.-‘                                   
 |`-._`-._    `-.__.-‘    _.-‘_.-‘|                                  
 |    `-._`-._        _.-‘_.-‘    |           http://redis.io        
  `-._    `-._`-.__.-‘_.-‘    _.-‘                                   
 |`-._`-._    `-.__.-‘    _.-‘_.-‘|                                  
 |    `-._`-._        _.-‘_.-‘    |                                  
  `-._    `-._`-.__.-‘_.-‘    _.-‘                                   
      `-._    `-.__.-‘    _.-‘                                       
          `-._        _.-‘                                           
              `-.__.-‘

[16995] 15 Sep 15:30:11.226 # Sentinel runid is cac946f212073a0e7c353e058dc7c83c9c62a161
[16995] 15 Sep 15:30:11.226 # +monitor master mymaster 10.50.13.34 6379 quorum 2
[16995] 15 Sep 15:30:11.228 * +slave slave 10.50.13.35:6379 10.50.13.35 6379 @ mymaster 10.50.13.34 6379
[16995] 15 Sep 15:30:11.228 * +slave slave 10.50.13.36:6379 10.50.13.36 6379 @ mymaster 10.50.13.34 6379
[16995] 15 Sep 15:30:11.228 * +slave slave 10.50.13.37:6379 10.50.13.37 6379 @ mymaster 10.50.13.34 6379
[16995] 15 Sep 15:30:13.264 * +sentinel sentinel 10.50.13.35:26379 10.50.13.35 26379 @ mymaster 10.50.13.34 6379
[16995] 15 Sep 15:30:13.306 * +sentinel sentinel 10.50.13.37:26379 10.50.13.37 26379 @ mymaster 10.50.13.34 6379
[16995] 15 Sep 15:30:13.312 * +sentinel sentinel 10.50.13.36:26379 10.50.13.36 26379 @ mymaster 10.50.13.34 6379

 

六、测试

停掉master上的redis

$ redis-cli shutdown

查看日志:

[16995] 15 Sep 15:33:54.131 # +sdown master mymaster 10.50.13.34 6379

[16995] 15 Sep 15:33:54.139 # +new-epoch 1

[16995] 15 Sep 15:33:54.145 # +vote-for-leader c6e609a1978e5cdb68ead8983ba88568aa85180d 1

[16995] 15 Sep 15:33:54.215 # +odown master mymaster 10.50.13.34 6379 #quorum 4/2

[16995] 15 Sep 15:33:54.215 # Next failover delay: I will not start a failover before Tue Sep 15 15:35:54 2015

[16995] 15 Sep 15:33:55.339 # +config-update-from sentinel 10.50.13.36:26379 10.50.13.36 26379 @ mymaster 10.50.13.34 6379

[16995] 15 Sep 15:33:55.339 # +switch-master mymaster 10.50.13.34 6379 10.50.13.36 6379

[16995] 15 Sep 15:33:55.339 * +slave slave 10.50.13.37:6379 10.50.13.37 6379 @ mymaster 10.50.13.36 6379

[16995] 15 Sep 15:33:55.344 * +slave slave 10.50.13.35:6379 10.50.13.35 6379 @ mymaster 10.50.13.36 6379

[16995] 15 Sep 15:33:55.350 * +slave slave 10.50.13.34:6379 10.50.13.34 6379 @ mymaster 10.50.13.36 6379

可以看到新的master为10.50.13.36

原来的master恢复后,会加入slave的行列:

查看sentinel.log:

[16995] 15 Sep 15:40:33.897 # -sdown slave 10.50.13.34:6379 10.50.13.34 6379 @ mymaster 10.50.13.36 6379

Sentinel在实现Failover过程中,会自动修改redis.conf和sentinel.conf的配置。

时间: 2025-01-18 06:24:52

Redis Sentinel实现Failover的相关文章

Redis Sentinel:集群Failover解决方案(转载)

本文转载自:http://shift-alt-ctrl.iteye.com/blog/1884370 文中的配置例子,还有failover过程中触发的订阅事件具有很好的参考价值. Redis sentinel(哨兵)模块已经被集成在redis2.4+的版本中,尽管目前不是release,不过可以尝试去使用和了解,事实上sentinel还是有点复杂的.   sentinel主要功能就是为Redis M-S(master,slaves)集群提供了1)master存活检测 2)集群中M-S服务监控 3

redis sentinel 主从切换(failover)解决方案,详细配置

主从复制简单来说就是把一台redis数据库中的数据同步到另一台redis数据库,并且按照数据流向,数据的发送者我们称作master,数据的接受者我们称作slave(master/slave的划分并不是那么一定的,譬如B可以作为A的slave,但同时也可以作为C的master),下面就从slave和master的角度分别说明主从复制流程. 首先是slave端,对于slave端来说,主从复制主要经历四个阶段: 第一阶段:与master建立连接 第二阶段:向master发起同步请求(SYNC) 第三阶

redis演练(7) redis Sentinel实现故障转移

书接上文<redis演练(6) redis主从模式搭建>. <redis演练(6) redis主从模式搭建>中仅仅配置了redis主从环境.分别配置了2个主从结构. 分别是1.有向无环,2星型模型.配置起来非常简单.但是,遗留了一个尾巴,没有阐述.如果master宕掉了怎么办?redis如何实现fail-over故障转移?本文,就重点说一下这块.主要内容 手动实现fail-over效果 sentinel实现自动fail-over效果 手动实现fail-over效果 #有向无环模型(

利用Redis Sentinel实现redis主从自动切换

redis主从配置很简单,只需要在slave的配置里加slaveof 192.168.0.100 6379(master的ip和端口) 如果master有密码再设置 masterauth password.主从设置以后要提高可靠性就要用到Sentinel. Sentinel主要作用有 监控.Sentinel不断检查Master和Slave是否工作正常. 通知.Sentinel可以通过API通知系统管理员,另一台计算机程序,受监控的Redis实例有问题. 自动故障切换.如果主机不按预期工作,Sen

Redis Sentinel实现的机制与原理详解

序言 Redis-Sentinel是Redis官方推荐的高可用性(HA)解决方案.实际上这意味着你可以使用Sentinel模式创建一个可以不用人为干预而应对各种故障的Redis部署. 它的主要功能有以下几点 监控:Sentinel不断的检查master和slave是否正常的运行. 通知:如果发现某个redis节点运行出现问题,可以通过API通知系统管理员和其他的应用程序. 自动故障转移:能够进行自动切换.当一个master节点不可用时,能够选举出master的多个slave中的一个来作为新的ma

Redis Sentinel环境下的Key过期事件消息订阅

一.Redis Sentinel Sentinel是Redis 2.8之后官方发布的HA解决方案,通过Sentinel可以保障整个Redis系统的高可用性.当Redis系统中的Master在异常情况下停止服务后,若干Sentinel会及时察觉并主观判断Master down(Subjectively Down),并且随后由一定数量的Sentinel共同确定Master确实客观已down(Objectively Down),这个时候Sentinel们会选举出一个新的Master继续提供服务.Red

Redis Sentinel高可用架构

Redis目前高可用的架构非常多,比如keepalived+redis,redis cluster,twemproxy,codis,这些架构各有优劣,今天暂且不说这些架构,今天主要说说redis sentinel高可用架构. 它的主要功能有以下几点 不时地监控redis是否按照预期良好地运行; 如果发现某个redis节点运行出现状况,能够通知另外一个进程(例如它的客户端); 能够进行自动切换.当一个master节点不可用时,能够选举出master的多个slave(如果有超过一个slave的话)中

redis sentinel

1.redis sentinel 的简介 Redis Sentinel是redis自带的集群管理工具,主要功能有 ·监控(Monitoring): Redis Sentinel实时监控主服务器和从服务器运行状态. ·提醒(Notification):当被监控的某个 Redis 服务器出现异常时, Sentinel 会通过 API 向其程序发送通知. ·自动故障转移(Automatic failover): 若master 实例故障,sentinel会重新选主并启动自动故障切换:选择slave-p

Redis Sentinel机制与用法(一)

概述 Redis-Sentinel是Redis官方推荐的高可用性(HA)解决方案,当用Redis做Master-slave的高可用方案时,假如 master宕机了,Redis本身(包括它的很多客户端)都没有实现自动进行主备切换,而Redis-sentinel本身也是一个独立运行的进程,它 能监控多个master-slave集群,发现master宕机后能进行自懂切换. 它的主要功能有以下几点 不时地监控redis是否按照预期良好地运行; 如果发现某个redis节点运行出现状况,能够通知另外一个进程