美文网首页
redis主从 + Sentinel 哨兵模式

redis主从 + Sentinel 哨兵模式

作者: 魔曦帝天 | 来源:发表于2019-11-26 21:30 被阅读0次

环境介绍

docker配置redis主从复制(一主两从),启动Sentinel(哨兵模式,3个sentinel)

image.png sentinel管理多个

redis中master配置要点

(要修改的)
bind 0.0.0.0
daemonize yes  # 后台启动

启动:
redis-server [redis配置文件绝对路径]

从服务器配置

修改
bind 0.0.0.0   #允许任何主机
daemonize yes     #允许后台启动redis
slaveof redis-server 6379    # docker网络解析  redis-server

启动:
redis-server [redis 配置文件绝对路径]
如法炮制创建两个从服务器

Redis Sentinel的主要功能

Sentinel 的主要功能包括 主节点存活检测、主从运行情况检测、
自动故障转移 (failover)主从切换。Redis 的 Sentinel 最小配置是 一主一从

  • 监控
    Sentinel 会不断的检查 主服务器 和 从服务器 是否正常运行

  • 通知
    当被监控的某个 Redis 服务器出现问题,Sentinel 通过 API 脚本 向 管理员 或者其他的 应用程序 发送通知。

  • 自动故障转移
    当 主节点 不能正常工作时,Sentinel 会开始一次 自动的 故障转移操作,它会将与 失效主节点 是 主从关系 的其中一个 从节点 升级为新的 主节点,并且将其他的 从节点 指向 新的主节点

  • 配置提供者
    在 Redis Sentinel 模式下,客户端应用 在初始化时连接的是 Sentinel 节点集合,从中获取 主节点 的信息。

主观下线和客观下线

主观下线

适用于所有 主节点 和 从节点。如果在 down-after-milliseconds 毫秒内,Sentinel 没有收到 目标节点 的有效回复,则会判定 该节点 为 主观下线。(偏见,需要其他sentinel的观点)

客观下线

客观下线 只适用于 主节点。如果 主节点 出现故障,Sentinel 节点会通过 sentinel is-master-down-by-addr命令,向其它 Sentinel 节点询问对该节点的 状态判断。如果超过 <quorum> 个数的节点判定 主节点 不可达,则该 Sentinel 节点会判断 主节点 为 客观下线

Redis Sentinel的工作原理

  • 每个 Sentinel以 每秒钟 一次的频率,向它所知的 主服务器、从服务器 以及其他 Sentinel 实例 发送一个 PING命令

  • 如果一个 实例(instance)距离 最后一次 有效回复 PING 命令的时间超过down-after-milliseconds所指定的值,那么这个实例会被 Sentinel 标记为主观下线

  • 如果一个 主服务器 被标记为 主观下线,并且有足够数量 的 Sentinel(至少要达到 配置文件 指定的数量)在指定的 时间范围 内同意这一判断,那么这个 主服务器 被标记为 客观下线

  • 如果一个 主服务器被标记为 主观下线,那么正在 监视 这个 主服务器 的所有 Sentinel 节点,要以 每秒一次 的频率确认 主服务器 的确进入了 主观下线 状态。

  • 在一般情况下, 每个 Sentinel 会以每 10 秒一次的频率,向它已知的所有 主服务器 和 从服务器 发送 INFO 命令。当一个 主服务器 被 Sentinel 标记为 客观下线 时,Sentinel 向 下线主服务器 的所有 从服务器 发送 INFO 命令的频率,会从 10 秒一次改为 每秒一次

  • Sentinel 和其他Sentinel协商 主节点 的状态,如果 主节点处于SDOWN 状态,则投票自动选出新的 主节点。将剩余的 从节点 指向 新的主节点 进行 数据复制

配置sentinel哨兵

vi /etc/redis-sentinel.conf

protected-mode yes      
bind 0.0.0.0
daemonize yes
sentinel monitor mymaster  172.17.0.3 6379 2
// 名称为 mymaster ,IP 为 127.0.0.1 端口为 6380
// 最后的 2  是指最少有 2 给 Sentinel 实例同意一台 redis 服务器宕机,才会认为 客观下线。
// sentinel monitor  自定义的主节点名称 主节点的 IP  主节点端口   票数 

事例配置文件

protected-mode no  # 设置密码登录
bind 0.0.0.0   # 设置谁能访问
port 16380   # 设置端口
daemonize yes  # 后端启动
sentinel monitor master 127.0.0.1 16379 2  # 监控的master 
sentinel down-after-milliseconds master 5000   # 节点有效回复响应的时间
sentinel failover-timeout master 180000  # ping
sentinel parallel-syncs master 1   #  
sentinel auth-pass master 123456   #  密码
logfile /var/log/redis/sentinel-16380.log  # 日志文件

模拟redis,down掉

redis-cli -h 172.17.0.3 -p 6379 shutdown   #停主
redis-cli info replication     #查看某个从,它成为了主

sentinel配置文件(设置后会对配置文件修改,修改端口以及日志文件)

image.png

redis-cli -p 27001 info查看sentinel状态

image.png
  • redis的master节点down掉


    image.png

哨兵选举

票数和领导者选举有关系

领导者选举的事件发生,必须满足下面的条件

max(票数, (哨兵的个数 / 2) + 1 ) 个哨兵参加选举

才可以选举出领导者,从而完成故障转移。
例子:

比如有 5 个哨兵, 配置的票数是 4

max(4, (5 / 2) + 1)

max(4, 3.5)
4 最大
结果就是`需要 4 个哨兵参与选举才可以,完成故障转移`。

相关文章

网友评论

      本文标题:redis主从 + Sentinel 哨兵模式

      本文链接:https://www.haomeiwen.com/subject/bieewctx.html