Redis哨兵模式

  哨兵模式在Redis中是一个很重的知识,基本上面试问到Redis相关的都会问哨兵模式,接下来就讲讲关于Redis哨兵模式的一些知识
  

概述

  当主服务器宕机后,需要手动吧一台服务切换为主服务,这需要人工干预,费时费力,还会造成一段时间内服务不可用,为了解决这个问题,Redis从2.8版本正式提供Sentinel 哨兵 架构来解决这个问题
  哨兵模式是一种特殊的模式,首先Redis提供哨兵的命令,哨兵是一个独立的进程,它能独立运行,其原理:哨兵通过发送命令,等待Redis服务器响应,从而监控运行的多个Redis示例
在这里插入图片描述
  这里哨兵有两个作用

  1. 通过发送命令,让Redis服务器返回运行状态,包括主从机
  2. 当哨兵检测到主机宕机,会自动将从机切换为主机,然后通过发布订阅模式通知其他从服务器,修改配置文件,让它们切换主机
      但还是会有一个问题,如果哨兵进程挂了,就没办法在监控Redis服务器了,所以在企业中,通常是使用多个哨兵进行监控,各个哨兵之间还会进行监控,形成多哨兵模式
    在这里插入图片描述
    假设主服务器宕机,哨兵1先检测到这个结果,系统并不会马上进行failover过程,仅仅是哨兵1主观认为主服务器不可用,这个现象称为主观下线。当后面的哨兵也检测到主服务器不可用,并且达到一定的数量,name哨兵会进行一次投票,投票的结果由一个哨兵发起,进行failover操作,切换成功后,会通过发布订阅模式,让各哨兵吧自己监控的从服务器切换主机,这个过程称为客观下线

  接下来开启一个单哨兵模式的Redis,编写一个核心的哨兵配置就可以了

# 编写一个文件名 sentinel.conf 的配置文件
# 这个文件就是哨兵的配置,先只写一个核心的配置进行演示
sentinel monitor <master-name> <ip> <redis-port> <quorum>
# 通过这个配置文件启动哨兵
redis-sentinel sentinel.conf

哨兵模式启动后,会自动检测配置的主服务器,并且检测到有两个从服务器
在这里插入图片描述
现在来模拟一个故障,将主服务器关机,等待一段时间时候,哨兵在这期间没有接受到来自主服务器的运行状态,就会判定主服务器故障,然后进行故障转移
在这里插入图片描述
然后查看Redis服务器的信息,发现将81的服务器变为主服务器,并且将80挂到81下面。当主服务器宕机后,哨兵会随机选择一个来当主机,并将其余的从机挂载到他下面
在这里插入图片描述

  那么,如果宕机了的主机现在有重新上线了,会怎么样呢?
从哨兵的日志可以看出,哨兵将这个Redis服务器变为了从机,然后挂到主机下面了,并且查看这个服务器的信息,可以看到是真的变为了从机,所以,哨兵就很智能的解决当主机宕机后自动切换的问题
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
  

优点

那么,相对于主从复制,哨兵模式有什么优点呢?

  1. 哨兵集群,基于主从复制,主从复制有的它都有
  2. 主从可以切换,故障可以转移,系统的可用性更好
  3. 主从自动切换
缺点

当然,哨兵模式还是有缺点的

  1. Redis不好在线扩容,如果集群容量到达上限,在线扩容十分麻烦
  2. 哨兵模式配置繁琐,有很多的选择
      
哨兵模式的配置

哨兵模式的配置文件在压缩文件下,解压文件就可以获得,在使用时通过修改进行使用

# 绑定IP
bind 127.0.0.1
# 是否开启保护模式
protected-mode no
# 端口
port 26379
# 是否后台运行
daemonize no
# pid文件
pidfile /var/run/redis-sentinel.pid
# 日志文件名
logfile ""
# 通过NAT,可以从外部通过非本地地址访问
sentinel announce-ip <ip>
sentinel announce-port <port>
# 工作目录,默认 dir /tmp
dir <working-directory>
# 监控的节点,默认 sentinel monitor mymaster 127.0.0.1 6379 2
sentinel monitor <master-name> <ip> <redis-port> <quorum>
# 有密码需要配置密码
sentinel auth-pass <master-name> <password>
# 延迟操作,默认30秒
sentinel down-after-milliseconds <master-name> <milliseconds>
# 故障转移的操作
sentinel parallel-syncs <master-name> <numreplicas>
# 故障转移的超时时间,默认3分钟
sentinel failover-timeout <master-name> <milliseconds>
# 配置某一事件发生时执行的脚本,需要会shell
sentinel notification-script <master-name> <script-path>
# 重写配置主节点脚本,主节点发生故障转移时会调用指定的脚本
sentinel client-reconfig-script <master-name> <script-path>
# 避免脚本重置,默认值yes
sentinel deny-scripts-reconfig yes
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

華小灼

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值