Redis 主从复制可将主节点数据同步给从节点,从节点此时有两个做用:程序员
主从复制同时存在如下几个问题:redis
Redis的哨兵机制就是解决咱们以上主从复制存在缺陷(选举问题),保证咱们的Redis高可用,实现自动化故障发现与故障转移。服务器
该系统执行如下三个任务:架构
Redis 源码中包含了一个名为 sentinel.conf 的文件, 这个文件是一个带有详细注释的 Sentinel 配置文件示例。spa
运行一个 Sentinel 所需的最少配置以下所示:.net
1)sentinel monitor mymaster 192.168.10.202 6379 2 Sentine监听的maste地址,第一个参数是给master起的名字,第二个参数为master IP,第三个为master端口,第四个为当该master挂了的时候,若想将该master判为失效, 在Sentine集群中必须至少2个Sentine赞成才行,只要该数量不达标,则就不会发生故障迁移。 2)sentinel down-after-milliseconds mymaster 30000 表示master被当前sentinel实例认定为失效的间隔时间,在这段时间内一直没有给Sentine返回有效信息,则认定该master主观下线。 只有在足够数量的 Sentinel 都将一个服务器标记为主观下线以后, 服务器才会被标记为客观下线,将服务器标记为客观下线所需的 Sentinel 数量由对主服务器的配置决定。 3)sentinel parallel-syncs mymaster 2 当在执行故障转移时,设置几个slave同时进行切换master,该值越大,则可能就有越多的slave在切换master时不可用,能够将该值设置为1,即一个一个来,这样在某个 slave进行切换master同步数据时,其他的slave还能正常工做,以此保证每次只有一个从服务器处于不能处理命令请求的状态。 4)sentinel can-failover mymaster yes 在sentinel检测到O_DOWN后,是否对这台redis启动failover机制 5)sentinel auth-pass mymaster 20180408 设置sentinel链接的master和slave的密码,这个须要和redis.conf文件中设置的密码同样 6)sentinel failover-timeout mymaster 180000 failover过时时间,当failover开始后,在此时间内仍然没有触发任何failover操做,当前sentinel将会认为这次failoer失败。 执行故障迁移超时时间,即在指定时间内没有大多数的sentinel 反馈master下线,该故障迁移计划则失效 7)sentinel config-epoch mymaster 0 选项指定了在执行故障转移时, 最多能够有多少个从服务器同时对新的主服务器进行同步。这个数字越小, 完成故障转移所需的时间就越长。 8)sentinel notification-script mymaster /var/redis/notify.sh 当failover时,能够指定一个"通知"脚本用来告知当前集群的状况。 脚本被容许执行的最大时间为60秒,若是超时,脚本将会被终止(KILL) 9)sentinel leader-epoch mymaster 0 同时一时间最多0个slave可同时更新配置,建议数字不要太大,以避免影响正常对外提供服务。
1.每一个 Sentinel 以每秒一次的频率向它所知的主服务器、从服务器以及其余 Sentinel 实例发送一个 PING 命令。3d
2.若是一个实例距离最后一次有效回复 PING 命令的时间超过指定的值, 那么这个实例会被 Sentinel 标记为主观下线。code
3.正在监视这个主服务器的全部 Sentinel 要以每秒一次的频率确认主服务器的确进入了主观下线状态。blog
4.有足够数量的 Sentinel 在指定的时间范围内赞成这一判断, 那么这个主服务器被标记为客观下线。图片
5.每一个 Sentinel 会以每 10 秒一次的频率向它已知的全部主服务器和从服务器发送 INFO 命令。当一个主服务器被 Sentinel 标记为客观下线时, Sentinel 向下线主服务器的全部从服务器发送 INFO 命令的频率会从 10 秒一次改成每秒一次。在民工哥技术之路公众号后台回复关键字 Redis手册 免费获取一份redis最佳实践与实战指南电子书。
6.Sentinel 和其余 Sentinel 协商主节点的状态,若是主节点处于 SDOWN 状态,则投票自动选出新的主节点。将剩余的从节点指向新的主节点进行数据复制。
7.当没有足够数量的 Sentinel 赞成主服务器 下线时, 主服务器的客观下线状态就会被移除。当主服务器从新向 Sentinel 的 PING 命令返回有效回复时,主服务器的主观下线状态就会被移除。
一个 Sentinel 能够与其余多个 Sentinel 进行链接, 各个 Sentinel 之间能够互相检查对方的可用性,并进行信息交换。
你无须为运行的每一个 Sentinel 分别设置其余 Sentinel 的地址,由于 Sentinel 能够经过发布与订阅功能来自动发现正在监视相同主服务器的其余 Sentinel。
一次故障转移操做由如下步骤组成:
做者:须臾之余
https://my.oschina.net/u/3995...