redis哨兵

redis哨兵

redis哨兵介绍:http://www.redis.cn/topics/sentinel.html

哨兵模式简介

   Sentinel哨兵是redis官方提供的高可用方案,可以用它来监控多个Redis服务实例的运行情况。Redis Sentinel 是一个运行在特殊模式下的Redis服务器。Redis Sentinel是在多个Sentinel进程环境下互相协作工作的。

Sentinel系统有三个主要任务:

  • 监控:Sentinel不断的检查master和slave是否按照预期正常工作。
  • 提醒:被监控的Redis出现问题时,Sentinel会通知管理员或其他应用程序。
  • 自动故障转移:监控的主Redis不能正常工作,Sentinel会开始进行故障迁移操作。将一个slave升级新的主服务器。 让其他slave挂到新的主服务器。同时向客户端提供新的master地址。

   Sentinel进程是用于监控redis集群中Master主服务器工作的状态,在Master主服务器发生故障的时候,可以实现Master和Slave服务器的切换,保证系统的高可用,其已经被集成在redis2.6+的版本中,Redis的哨兵模式到了2.8版本之后就稳定了下来。一般在生产环境也建议使用Redis的2.8版本的以后版本。哨兵(Sentinel) 是一个分布式系统,可以在一个架构中运行多个哨兵(sentinel) 进程,这些进程使用流言协议(gossip protocols)来接收关于Master主服务器是否下线的信息,并使用投票协议(Agreement Protocols)来决定是否执行自动故障迁移,以及选择哪个Slave作为新的Master。每个哨兵(Sentinel)进程会向其它哨兵(Sentinel)、Master、Slave定时发送消息,以确认对方是否”活”着,如果发现对方在指定配置时间(可配置的)内未得到回应,则暂时认为对方已掉线,也就是所谓的”主观认为宕机” ,主观是每个成员都具有的独自的而且可能相同也可能不同的意识,英文名称:Subjective Down,简称SDOWN。有主观宕机,肯定就有客观宕机。当“哨兵群”中的多数Sentinel进程在对Master主服务器做出SDOWN 的判断,并且通过 SENTINEL is-master-down-by-addr 命令互相交流之后,得出的Master Server下线判断,这种方式就是“客观宕机”,客观是不依赖于某种意识而已经实际存在的一切事物,英文名称是:Objectively Down, 简称ODOWN。通过一定的vote算法,从剩下的slave从服务器节点中,选一台提升为Master服务器节点,然后自动修改相关配置,并开启故障转移(failover)。

redis哨兵实现
redis哨兵实现拓扑图
  • sentinel只监控master
  • ②sentinel可以在部署别的服务器,但是一般为了节省服务器,一般在redis服务器上部署。
sentinel实现的配置

配置文件说明:

[root@redis-s1 etc]# grep "^[a-Z]" /apps/redis/etc/sentinel.conf 
bind 0.0.0.0 
port 26379 
daemonize yes 
pidfile "redis-sentinel.pid" 
logfile "sentinel_26379.log" 
dir "/apps/redis" 
sentinel monitor mymaster 192.168.38.17 2           #法定人数限制(quorum),即有几个slave认为 master down了就进行故障转移 
sentinel auth-pass mymaster 123456 
sentinel down-after-milliseconds mymaster 30000     #(SDOWN)主观下线的时间 
sentinel parallel-syncs mymaster 1                  #发生故障转移时候同时向新master同步数据的slave数量,数字越小总同步时间越长 
sentinel failover-timeout mymaster 180000           #所有slaves指向新的master所需的超时时间 
sentinel deny-scripts-reconfig yes                  #禁止修改脚本

redis master的sentinel.conf配置:

  • master:192.168.38.17
[root@centos7-17 etc]# grep "^[a-Z]" /apps/redis/etc/sentinel.conf 
port 26379
bind 192.168.38.17
daemonize yes 
dir "/apps/redis/sentinel"
pidfile "redis-sentinel.pid" 
logfile "sentinel_26379.log" 
sentinel monitor mymaster 192.168.38.17 6379 2
sentinel auth-pass mymaster 123456
sentinel deny-scripts-reconfig yes

redis slave的sentinel.conf配置:

  • slave :192.168.38.27
port 26379
bind 192.168.38.27
daemonize yes 
dir "/apps/redis/sentinel"
pidfile "redis-sentinel.pid" 
logfile "sentinel_26379.log" 
sentinel monitor mymaster 192.168.38.17 6379 2
sentinel auth-pass mymaster 123456
sentinel deny-scripts-reconfig yes

redis slave的sentinel.conf配置:

  • slave :192.168.38.37
port 26379
bind 192.168.38.37
daemonize yes 
dir "/apps/redis/sentinel"
pidfile "redis-sentinel.pid" 
logfile "sentinel_26379.log" 
sentinel monitor mymaster 192.168.38.17 6379 2
sentinel auth-pass mymaster 123456
sentinel deny-scripts-reconfig yes
启动哨兵
  • 三台均启动哨兵
redis-sentinel /apps/redis/etc/sentinel.conf
master宕机

master修复后重启
[root@centos7-37 etc]# tail -f /apps/redis/sentinel/sentinel_26379.log
6949:X 15 Nov 15:03:33.538 * +convert-to-slave slave 192.168.38.17:6379 192.168.38.17 6379 @ mymaster 192.168.38.27 6379
  • 重启之后,原本的master变为了新master的slave。
当前sentinel状态
  • 在sentinel状态中尤其是最后一行,涉及到masterIP是多少,有几个slave,有几个sentinels,必须是符合全部服务器数量的。
master0:name=mymaster,status=ok,address=192.168.38.17:6379,slaves=2,sentinels=3
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值