首页 > 编程知识 正文

redis哨兵不切换,redis哨兵出现切换原因

时间:2023-05-05 01:00:14 阅读:159277 作者:4242

Redis哨兵模式(原理分析)前言一、核心模式概述二、哨兵模式配置1 .哨兵配置1.1优点: 1.2缺点:总结

首先,在Redis中主从复制解决高可用性的方案是,主节点服务器宕机后,需要将一台服务器手动切换为主节点服务器,手动实现boss选举,费时费力,在一定时间内无法使用服务。 在实际的企业开发中大部分都优先考虑哨兵模式。

一、Sentinel模式概述哨兵模式是一种特殊的模式,首先Redis提供哨兵指令,哨兵是一个独立的过程,作为一个独立的过程运行。 其原理是哨兵通过发送命令,等待Redis服务器的响应,监控多个正在运行的Redis实例。

哨兵模式的架构图:

哨兵的作用:

1 .通过发送命令,向Redis服务器返回包括主服务器和从服务器在内的监控的执行状态。

2、哨兵监控主服务器停机后,自动将slave切换到主服务器,通过发布订阅模式通知其他从服务器,修改配置文件,通过自动选举切换到主服务器。

企业开发哨兵配置通常是多个:

假设主节点瘫痪,哨兵1首先检测到主节点瘫痪,系统并不立即采取重新选举行为。 哨兵1只是认为当前主场不能使用,这种现象被称为主观下划线,后面的哨兵也检测到这个主场不能使用,当数量达到一定值时,哨兵1、2、3之间进行一次选举行为的选举通过后,最新的

二.部署哨兵模式在我们的机器上,部署一台哨兵和一台主从Redis服务器来演示这个过程。

服务器IP类型端口Redis47.95.7.159主设备6379Redis47.95.7.159从6380Redis47.95.7.159到63811 .哨兵配置前提条件:配置好主从模式,启动好三台机器。

首先配置Redis哨兵服务器,然后创建一个新的sentinel.conf文件,如下所示:

[ root @ izhkyje 12 i9 nrezdtconfig ] # vim sentinel.conf编辑配置如下:

#默认端口port 26379# sentinel monitor要监视的名称host port1sentinelmonitormymaster 127.0.0.16379注意: 127.0.0.1是此计算机的本地名称如果使用的是sprining

启动哨兵:

redis-sentinel dtconfig/sentinel.conf

哨兵在监视我们的主机6379。 我们断开主机后,将重新选出主机。 如果后面的主机回来了,就只能是从机了。

1.1优点:哨兵集群基于主从复制模式,有所有主从复制的优点,都有。 可以切换主从、转移故障和提高系统可用性。 哨兵模式是主从模式的升级,由手动变为自动,更坚固1.2缺点:实现哨兵模式配置其实很麻烦,其中有很多配置项目,Redis很难在线上扩展,集群容量达到上限就在线上

# Example sentinel.conf #哨兵sentinel实例运行的端口缺省为26379port 26379 #哨兵sentinel的工作目录dir /tmp #哨兵sentinel监视的redinel 可以命名master-name # quorum这些quorum的数量当sentinel哨兵认为master主节点失联时,客观上认为主节点失联了# sentinelmonitormaster-nameipredis-portquorumsentinelmonitormymaster 127.0.0.16379 # redis实例上的require pass fobars fobar ed验证路径#设置哨兵sentinel连接主从站的密码注意#主要需要设置相同的认证密码sentinel auth-pass master-namepasswordsentinelauth-passmymastermysupupster 指定了多少毫秒后,哨兵主观判断主节点没有响应哨兵,sentinel down-after-milliseconds master-namemillisecondssentineldown-after-milliseconds

主备切换时最多可以有多少个slave同时对新的master进行 同步,这个数字越小,完成failover所需的时间就越长,但是如果这个数字越大,就意味着越 多的slave因为replication而不可用。可以通过将这个值设为 1 来保证每次只有一个slave 处于不能处理命令请求的状态。# sentinel parallel-syncs <master-name> <numslaves>sentinel parallel-syncs mymaster 1# 故障转移的超时时间 failover-timeout 可以用在以下这些方面: #1. 同一个sentinel对同一个master两次failover之间的间隔时间。#2. 当一个slave从一个错误的master那里同步数据开始计算时间。直到slave被纠正为向正确的master那里同步数据时。#3.当想要取消一个正在进行的failover所需要的时间。 #4.当进行failover时,配置所有slaves指向新的master所需的最大时间。不过,即使过了这个超时,slaves依然会被正确配置为指向master,但是就不按parallel-syncs所配置的规则来了# 默认三分钟# sentinel failover-timeout <master-name> <milliseconds>sentinel failover-timeout mymaster 180000 # SCRIPTS EXECUTION #配置当某一事件发生时所需要执行的脚本,可以通过脚本来通知管理员,例如当系统运行不正常时发邮件通知相关人员。#对于脚本的运行结果有以下规则:#若脚本执行后返回1,那么该脚本稍后将会被再次执行,重复次数目前默认为10#若脚本执行后返回2,或者比2更高的一个返回值,脚本将不会重复执行。#如果脚本在执行过程中由于收到系统中断信号被终止了,则同返回值为1时的行为相同。#一个脚本的最大执行时间为60s,如果超过这个时间,脚本将会被一个SIGKILL信号终止,之后重新执行。 #通知型脚本:当sentinel有任何警告级别的事件发生时(比如说redis实例的主观失效和客观失效等等),将会去调用这个脚本,#这时这个脚本应该通过邮件,SMS等方式去通知系统管理员关于系统不正常运行的信息。调用该脚本时,将传给脚本两个参数,#一个是事件的类型,#一个是事件的描述。#如果sentinel.conf配置文件中配置了这个脚本路径,那么必须保证这个脚本存在于这个路径,并且是可执行的,否则sentinel无法正常启动成功。#通知脚本# sentinel notification-script <master-name> <script-path> sentinel notification-script mymaster /var/redis/notify.sh # 客户端重新配置主节点参数脚本# 当一个master由于failover而发生改变时,这个脚本将会被调用,通知相关的客户端关于master地址已经发生改变的信息。# 以下参数将会在调用脚本时传给脚本:# <master-name> <role> <state> <from-ip> <from-port> <to-ip> <to-port># 目前<state>总是“failover”,# <role>是“leader”或者“observer”中的一个。 # 参数 from-ip, from-port, to-ip, to-port是用来和旧的master和新的master(即旧的slave)通信的# 这个脚本应该是通用的,能被多次调用,不是针对性的。# sentinel client-reconfig-script <master-name> <script-path>sentinel client-reconfig-script mymaster /var/redis/reconfig.sh 总结

sentinel可以让redis实现主从复制,当一个集群中的master失效之后,sentinel可以选举出一个新的master用于自动接替master的工作,集群中的其他redis服务器自动指向新的master同步数据。一般建议sentinel采取奇数台,防止某一台sentinel无法连接到master导致误切换。

Redis-Sentinel是Redis官方推荐的高可用性(HA)解决方案,当用Redis做Master-slave的高可用方案时,假如master宕机了,Redis本身(包括它的很多客户端)都没有实现自动进行主备切换,而Redis-sentinel本身也是一个独立运行的进程,它能监控多个master-slave集群,发现master宕机后能进行自动切换。Sentinel由一个或多个Sentinel 实例 组成的Sentinel 系统可以监视任意多个主服务器,以及这些主服务器微笑的小猫咪的所有从服务器,并在被监视的主服务器进入下线状态时,自动将下线主服务器微笑的小猫咪的某个从服务器升级为新的主服务器。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。