Redis主备自动切换

摘要:
Sentinel是一个用于监视Redis集群中主机状态的工具。1.哨兵功能1.主设备状态检测2.如果主设备异常,将执行主从切换,一个从设备作为主设备,上一个主设备作为从设备;3.主从切换后,主_再显示。conf、slave_Redis。conf和sentinel

    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服务

[root@localhostsrc]#./redis-server../redis.conf

[root@localhostsrc]#./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

Redis主备自动切换第1张

免责声明:文章转载自《Redis主备自动切换》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇wow.js – 让页面滚动更有趣,使用方法C# 委托及各种写法下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

简单实现redis实现高并发下的抢购/秒杀功能(转)

简述 抢购/秒杀是如今很常见的一个应用场景,那么高并发竞争下如何解决超抢(或超卖库存不足为负数的问题)呢? 常规写法: 查询出对应商品的库存,看是否大于0,然后执行生成订单等操作,但是在判断库存是否大于0处,如果在高并发下就会有问题,导致库存量出现负数 这里我就只谈redis的解决方案 我们先来看以下php代码是否能正确解决超抢/卖的问题: <?ph...

Linux下常用redis指令

set get 取值赋值,key值区分大小写 mset mget多个的取值和赋值 del 删除一个或多个key 查看key值是否存在,有就返回1,没有就是0 设置一个有存活时间的key值,设置成功返回1 显示key值剩余存活时间 keys显示符合指定条件的key 创建相关数据类型,并使用keys显示对应的数据类型 创建hash类型的数据...

SpringBoot整合redis哨兵主从服务

前提环境:   主从配置  http://www.cnblogs.com/zwcry/p/9046207.html   哨兵配置  https://www.cnblogs.com/zwcry/p/9134721.html 1.配置pom.xml <project xmlns="http://maven.apache.org/POM/4.0.0" xm...

第九部分 代理的使用(代理设置,代理池的搭建,用代理获取微信公众号文章)

网站采取的反爬虫措施有:弹出验证码,需要登录。检测某个IP在单位时间内的请求次数,超过规定的某个值,服务器拒绝服务,返回一些错误信息,这是封IP。既然服务器封IP,可采用某种方式伪装IP,让服务器不能识别由本机发起的请求,这样来避免封IP。这时就需要使用到代理。一、 代理的设置代理有免费代理和付费代理。免费代理多数情况下不好用,付费代理比较靠谱。付费代理不...

spring-boot-starter-data-redis与spring-boot-starter-redis两个包的区别

spring-boot-starter-data-redis: <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-ins...

redis队列的实现

redis中文官网:http://www.redis.cn/ 关于redis队列的实现方式有两种: 1、生产者消费者模式。 2、发布者订阅者模式。 详解: 1、生产者消费者模式。 普通版本: 比如一个队列里面,生产者A push了一个数据进去,消费者B pop 了这个数据,那个这个队列依旧为空。所以是一对一的。 至于是先进先出还是先进后出等,可以依照函数l...