Redis中的哨兵模式如何实现

37次阅读
没有评论

共计 1741 个字符,预计需要花费 5 分钟才能阅读完成。

这篇文章主要介绍 Redis 中的哨兵模式如何实现,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!

Redis Sentinel 哨兵模式 是一个分布式系统,你可以在一个架构中运行多个 Sentinel 进程(progress),这些进程使用流言协议(gossip protocols) 来接收关于主服务器是否下线的信息,并使用投票协议(agreement protocols)来决定是否执行自动故障迁移,以及选择哪个从服务器作为新的主服务器。【相关推荐:Redis 视频教程】

Redis 的 Sentinel 系统用于管理多个 Redis 服务器(instance),系统执行以下三个任务:

监控(Monitoring):Sentinel 会不断地检查你的主服务器和从服务器是否运作正常。

提醒(Notification):当被监控的某个 Redis 服务器出现问题时,Sentinel 可以通过 API 向管理员或者其他应用程序发送通知。

自动故障迁移(Automatic failover):当一个主服务器不能正常工作时,Sentinel 会开始一次自动故障迁移操作,它会将失效主服务器的其中一个从服务器升级为新的主服务器,并让失效主服务器的其他从服务器改为复制新的主服务器;当客户端试图连接失效的主服务器时,集群也会向客户端返回新主服务器的地址,使得集群可以使用新主服务器代替失效服务器。

Sentinel 工作机制

每个 sentinel 以每秒钟一次的频率向它所知的 master,slave 以及其他 sentinel 实例发送一个 PING 命令

如果一个实例距离最后一次有效回复 PING 命令的时间超过 down-after-milliseconds 选项所指定的值,则这个实例会被 sentinel 标记为主观下线。

如果一个 master 被标记为主观下线,则正在监视这个 master 的所有 sentinel 要以每秒一次的频率确认 master 的确进入了主观下线状态

当有足够数量的 sentinel(大于等于配置文件指定的值)在指定的时间范围内确认 master 的确进入了主观下线状态,则 master 会被标记为客观下线

在一般情况下,每个 sentinel 会以每 10 秒一次的频率向它已知的所有 master,slave 发送 INFO 命令

当 master 被 sentinel 标记为客观下线时,sentinel 向下线的 master 的所有 slave 发送 INFO 命令的频率会从 10 秒一次改为 1 秒一次

若没有足够数量的 sentinel 同意 master 已经下线,master 的客观下线状态就会被移除;
若 master 重新向 sentinel 的 PING 命令返回有效回复,master 的主观下线状态就会被移除

Sentinel 模式搭建

环境

master:127.0.0.1:6379 【初始化 master】slave:127.0.0.1:6380 127.0.0.1:6381
sentinel:127.0.0.1:26379 127.0.0.1:26380 127.0.0.1:26381

修改配置:

这里省略安装了 redis,直接修改 sentinel 配置文件。对应文件夹 Redis6379-Redis6381

#  监控节点,且超过 2 个 sentinel  任务故障,方可执行故障转移
sentinel monitor mymaster 127.0.0.1 6379 2
#  如果节点在  30000 毫秒内未回应,就认为故障
sentinel down-after-milliseconds mymaster 30000
#  如果故障转移后,同时进行主从复制数为  1
sentinel parallel-syncs mymaster 1
#  故障转移的超时时间
sentinel failover-timeout mymaster 180000
sentinel deny-scripts-reconfig yes

启动命令

./src/redis-sentinel ./config/redis-sentinel-6379.conf(同样启动 6380 6381)

以上是“Redis 中的哨兵模式如何实现”这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注丸趣 TV 行业资讯频道!

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-07-17发表,共计1741字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)