【Redis】10.哨兵
一.为什么要用到哨兵?
刚刚前面提到了主从复制,当时是手动输入命令来配置的,费时费力。所以Redis从2.8开始正式提供了Sentnel(哨兵)架构来解决这个问题。
二.原理
哨兵通过发送命令,等待Redis服务器响应,从而监控运行的多个Redis实例。
三.作用
- 通过发送命令,让Redis服务器返回监控其运行状态
- 当哨兵检测到master宕机,会自动将slave切换回master,通过发布订阅模式通知其他的从服务器,修改配置文件,让他们切换主机
四.多哨兵模式
五.简单测试
1.简单配置,创建sentinel.conf文件
Version:0.9 StartHTML:0000000105 EndHTML:0000029486 StartFragment:0000000141 EndFragment:0000029446
# Example sentinel.conf# 哨兵 sentinel 实例运行的端口 默认 26379port 26379# 哨兵 sentinel 的工作目录dir /tmp# 哨兵 sentinel 监控的 redis 主节点的 ip port# master-name 可以自己命名的主节点名字 只能由字母 A-z 、数字 0-9 、这三个字符 ".-_" 组成。# quorum 配置多少个 sentinel 哨兵统一认为 master 主节点失联 那么这时客观上认为主节点失联了# sentinel monitor <master-name> <ip> <redis-port> <quorum>sentinel monitor mymaster 127 .0.0.1 6379 2# 当在 Redis 实例中开启了 requirepass foobared 授权密码 这样所有连接 Redis 实例的客户端都要提供密码# 设置哨兵 sentinel 连接主从的密码 注意必须为主从设置一样的验证密码# sentinel auth-pass <master-name> <password>sentinel auth-pass mymaster MySUPER--secret-0123passw0rd# 指定多少毫秒之后 主节点没有应答哨兵 sentinel 此时 哨兵主观上认为主节点下线 默认 30 秒# sentinel down-after-milliseconds <master-name> <milliseconds>sentinel down-after-milliseconds mymaster 30000# 这个配置项指定了在发生 failover 主备切换时最多可以有多少个 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># SCRIPTS EXECUTION# 配置当某一事件发生时所需要执行的脚本,可以通过脚本来通知管理员,例如当系统运行不正常时发邮件通知相关人员。# 对于脚本的运行结果有以下规则:# 若脚本执行后返回 1 ,那么该脚本稍后将会被再次执行,重复次数目前默认为 10# 若脚本执行后返回 2 ,或者比 2 更高的一个返回值,脚本将不会重复执行。# 如果脚本在执行过程中由于收到系统中断信号被终止了,则同返回值为 1 时的行为相同。# 一个脚本的最大执行时间为 60s ,如果超过这个时间,脚本将会被一个 SIGKILL 信号终止,之后重新执行。# 通知型脚本 : 当 sentinel 有任何警告级别的事件发生时(比如说 redis 实例的主观失效和客观失效等等),将会去调用这个脚本,这时这个脚本应该通过邮件, SMS 等方式去通知系统管理员关于系统不正常运行的信息。调用该脚本时,将传给脚本两个参数,一个是事件的类型,一个是事件的描述。如果 sentinel.conf 配置文件中配置了这个脚本路径,那么必须保证这个脚本存在于这个路径,并且是可执行的,否则 sentinel 无法正常启动成功。# 通知脚本# shell 编程# 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 # 一般都是由运维来配置!
2.启动哨兵
3.79挂掉,哨兵监听并选择80为master,79重新启动,80也是master
学习来自B站狂神说