Redis主备自动切换

Sentinel(哨兵)是用于监控redis集群中Master状态的工具.

一、Sentinel作用
  1、Master状态检测 
  2、如果Master异常,则会进行Master-Slave切换,将其中一个Slave作为Master,将之前的Master作为Slave;
  3、Master-Slave切换后,master_redis.conf、slave_redis.conf和sentinel.conf的内容都会发生改变,即master_redis.conf中会多一行slaveof的配置,sentinel.conf的监控目标会随之调换;

二、Sentinel工作方式 

1、每个Sentinel以每秒钟一次的频率向它所知的Master,Slave以及其他 Sentinel 实例发送一个 PING 命令
  2、如果一个实例(instance)距离最后一次有效回复 PING 命令的时间超过 down-after-milliseconds 选项所指定的值, 则这个实例会被 Sentinel 标记为主观下线。
  3、如果一个Master被标记为主观下线,则正在监视这个Master的所有 Sentinel 要以每秒一次的频率确认Master的确进入了主观下线状态。
  4、当有足够数量的 Sentinel(大于等于配置文件指定的值)在指定的时间范围内确认Master的确进入了主观下线状态, 则Master会被标记为客观下线
  5、在一般情况下, 每个 Sentinel 会以每 10 秒一次的频率向它已知的所有Master,Slave发送 INFO 命令
  6、当Master被 Sentinel 标记为客观下线时,Sentinel 向下线的 Master 的所有 Slave 发送 INFO 命令的频率会从 10 秒一次改为每秒一次
  7、若没有足够数量的 Sentinel 同意 Master 已经下线, Master 的客观下线状态就会被移除。 若 Master 重新向 Sentinel 的 PING 命令返回有效回复, Master 的主观下线状态就会被移除。

主观下线和客观下线
   主观下线:Subjectively Down,简称 SDOWN,指的是当前 Sentinel 实例对某个redis服务器做出的下线判断;
   客观下线:Objectively Down, 简称 ODOWN,指的是多个 Sentinel 实例在对Master Server做出 SDOWN 判断,并且通过 SENTINEL is-master-down-by-addr 命令互相交流之后,得出的Master Server下线判断,然后开启failover.
   SDOWN适合于Master和Slave,只要一个 Sentinel 发现Master进入了ODOWN, 这个 Sentinel 就可能会被其他 Sentinel 推选出, 并对下线的主服务器执行自动故障迁移操作。
  ODOWN只适用于Master,对于Slave的 Redis 实例,Sentinel 在将它们判断为下线前不需要进行协商, 所以Slave的 Sentinel 永远不会达到ODOWN。

三、Sentinel配置实现主备自动切换

Sentinel中只需要在各节点(包括Master节点)中配置sentinel monitor为master的信息即可,不需要再配置slave的信息。在每一个redis节点中的Sentinel.conf文件中。

slave的sentinel.conf配置:

port 26379

#master2

sentinel monitor master2 192.168.15.129 6379 1  ---master地址 名字为哨名的名字,不同服务器上可以取得不一样

sentinel down-after-milliseconds master2 5000

sentinel failover-timeout master2 900000

#sentinel can-failover master2 yes

sentinel parallel-syncs master2 2

Master机器上sentinel.conf配置


属性



描述


port


16379


监视哨端口


daemonize


yes


启动的进程为后台进程


logfile


“/opt/oracle/redis-2.8.19/logs/sentinel.log”


日志文件


sentinel monitor <master-name>   <ip> <redis-port> <quorum>


sentinel monitor mymaster 127.0.0.1   6379 1


IP和端口为Master的IP地址和端口,mymaster为集群名称,可以修改为想要的名称,客户端访问时需要这个名称


sentinel down-after-milliseconds   <master-name> 30000


sentinel down-after-milliseconds mymaster 30000


master-name为一个统一的集群名称


sentinel failover-timeout   <master-name> 180000


sentinel failover-timeout mymaster 180000


sentinel parallel-syncs   <master-name> <numslaves>


sentinel parallel-syncs mymaster 1

 

Slave机器上sentinel配置

 slave上的sentinel配置与Master上的配置相同,只需要将master-name修改即可

启动顺序如下:

1、redis-server redis.conf 启动Master主机;

2、redis-server redis.conf 启动Slave主机 ;

3、redis-sentinel sentinel.conf 启动Master主机上的监视哨;

4、redis-sentinel sentinel.conf 启动Slave主机上的监视哨

注意:首次启动时,必须先启动Master
        若Master已经被判定为下线,Sentinel已经选择了新的Master,也已经将old Master改成Slave,但是还没有将其改成new Master。若此时重启old Master,则Redis集群将处于无Master状态,此时只能手动修改配置文件,然后重新启动集群

四、示例如下:
master:192.168.15.129,

slave  :192.168.15.128

master的配置文件正常,slave的配置文件添加一行:

slaveof 192.168.15.129 6379

master的sentinel.conf配置(此处我的文件名称为sentinel-test.conf):

port 26379

#master1

sentinel monitor master1 192.168.15.129 6379 1

sentinel down-after-milliseconds master1 5000

sentinel failover-timeout master1 900000

#sentinel can-failover master1 yes

sentinel parallel-syncs master1 2

slave的sentinel.conf配置(此处我的文件名称为sentinel-test.conf):

port 26379

#master2

sentinel monitor master2 192.168.15.129 6379 1

sentinel down-after-milliseconds master2 5000

sentinel failover-timeout master2 900000

#sentinel can-failover master2 yes

sentinel parallel-syncs master2 2

分别启动master和slave的redis服务和sentinel服务

[[email protected]src]#./redis-server../redis.conf

[[email protected]src]#./redis-sentinel../sentinel-test.conf

然后根据以下场景切换主备,切换成功,当测试都通过时,才算是配置完成

测试主备切换场景:

主:129,备:128,sen:128,129

关闭129的redis和sen,看是否能够切换到128上面,在128上面删除数据,启动129的redis和sen,看是否数据会同步,再关闭128的redis和sen,看是否会切换为129

运行如下命令,连接客户端查看Slave状态:./redis-cli -h IP -p Port

时间: 2024-12-26 05:09:11

Redis主备自动切换的相关文章

keepalived实现对mysql主从复制的主备自动切换

备注:君子性非议也,善假于物也. 温故而知新,可以为师矣. 使用MySQL+keepalived是一种非常好的解决方案,在MySQL-HA环境中,MySQL互为主从关系,这样就保证了两台 MySQL数据的一致性,然后用keepalived实现虚拟IP,通过keepalived自带的服务监控功能来实现MySQL故障时自动切换. 实验环境中用两台主机搭建了一个mysql主从复制的环境,两台机器分别安装了keepalived,用一个虚IP实现mysql服务器的主备自动切换功能. 模拟环境: VIP:1

redis主备部署方案

Redis部署方式采用主备的方式,通过keepalived来对外提供虚IP,并实现主备自动切换功能. 主实例A:192.168.20.30 备实例B:192.168.20.232 虚IP:192.168.20.110 正常工作时,虚IP在主实例A上,主实例A上的数据自动同步到备实例B上,当主实例A挂掉之后,备实例B将自动接管虚IP,并将redis转换为主模式,待原主实例A恢复后,A将自动切换成备模式,从B上同步数据,主备角色互换,实现融灾备份. 安装部署步骤如下: 1.       安装keep

思科核心交换主备引擎切换与测试

某省级大型国企业,某项目涉及到引擎切换测试.做了些记录还有心得与大家共享.注:现场实际环境 1,设备硬件 Cisco WS-C6509-E Component name Description 板卡1 WS-X6724-SFP 24 port 1000mb SFP 板卡2 WS-X6748-GE-TX 48 port 10/100/1000mb Ethernet 板卡1 WS-X4648-GE-TX 48 port 10/100/1000mb Ethernet 引擎1 WS-SUP720-3B

搭建和测试 Redis 主备和集群

本文章只是自我学习用,不适宜转载. 1. Redis主备集群 1.1 搭建步骤 机器:海航云虚机(2核4GB内存),使用 Centos 7.2 64bit 操作系统,IP 分别是 192.168.100.5(主) 和 192.168.100.6(备). Redis 版本:3.2.3 1.1.1 在主备节点上,做如下安装 sudo yum update sudo yum install epel-release sudo yum update sudo yum install redis sudo

如何将两个Redis主备实例建立全球灾备

华为云分布式缓存服务DCS,具有强大的功能,现在小编教大家如何在DCS管理控制台将两个Redis主备实例建立全球灾备.建立全球灾备,会对主实例和备实例进行升级,实例进程会重启,连接会中断.同时备实例会从主实例同步数据,原有的数据会被覆盖,需要谨慎操作.创建了全球灾备后,不同区域的实例可以相互同步数据.当前,该功能只在华北.华东.华南三个区域支持,请以控制台实际情况为准. 1 前提条件 已经创建了主实例和备实例,且实例要求如下:i. 缓存引擎类型,支持Redis 3.x.ii. 缓存实例类型,支持

阿里云ECS部署Redis主备哨兵集群遇到的问题

一.部署 详细部署步骤:https://blog.csdn.net/lihongtai/article/details/82826809 Redis5.0版本需要注意的参数配置:https://www.cnblogs.com/ibethfy/p/9965902.html 二.遇到的问题 1.bind公网IP地址时,会出现异常:[Cannot assign requested address] 首先理解bind的含义:https://blog.csdn.net/cw_hello1/article/

keepalived实现redis主备切换

试验目标: 1:主redis发生故障时,从redis自动切换为主redis. 2:主redis恢复正常后,自动降级为从redis. 试验环境: 主redis:192.168.189.138 从redis:192.168.189.131 VIP:192.168.189.123 主从redis均安装了keepalived与redis,redis已配置好主从.Redis端口44444. 1:制作redis监控与主备切换脚本: Redis监控脚本:(监控redis是否正常) # cat /usr/loc

MySQL主备库切换演练与总结

演练包括被动切换和主动切换两部分.被动切换是主库宕机,主动切换是人工手动触发. 演练步骤大致如下: 1 先停掉主库,模拟主库宕机 2 mha将vip切到备库,备库变成主库,应用可以正常读写数据库 3 重新启动宕机的原主库 4 在原主库上建立同步关系(根据宕机时,日志记录的binlog的文件名和偏移量,恢复从这里开始) 5 mha手动切换主库,还原到最初状态,应用可以正常读写数据库 6 演练结束 演练过程问题总结: 1 mha每次自动切换之后都会结束自身进程,并在日志目录如/app/mha/xxx

Zookeeper 05 示例代码-主备节点切换

主备节点的切换,是分布式应用的基本要求.现在用 Zookeeper 实现主备节点自动切换功能. 基本思路: 1 多个服务启动后,都尝试在 Zookeeper中创建一个 EPHEMERAL 类型的节点,Zookeeper本身会保证,只有一个服务会创建成功,其他服务抛出异常. 2 成功创建节点的服务,作为主节点,继续运行 3 其他服务设置一个Watcher监控节点状态, 4 如果主节点消失,其他服务会接到通知,再次尝试创建EPHEMERAL 类型的节点. public class Master im