一.为什么要用到哨兵h3>
刚刚前面提到了主从复制,当时是手动输入命令来配置的,费时费力。所以Redis从2.8开始正式提供了Sentnel(哨兵)架构来解决这个问题。
刚刚前面提到了主从复制,当时是手动输入命令来配置的,费时费力。所以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 实例运行的端口 默认 26379 port 26379 # 哨兵 sentinel 的工作目录 dir /tmp # 哨兵 sentinel 监控的 redis 主节点的 ip port # master-name 可以自己命名的主节点名字 只能由字母 A-z 、数字 0-9 、这三个字符 “.-_” 组成。 # quorum 配置多少个 sentinel 哨兵统一认为 master 主节点失联 那么这时客观上认为主节点失联了 # sentinel monitor
sentinel monitor mymaster 127 .0.0.1 6379 2 # 当在 Redis 实例中开启了 requirepass foobared 授权密码 这样所有连接 Redis 实例的客户端都要提供 密码 # 设置哨兵 sentinel 连接主从的密码 注意必须为主从设置一样的验证密码 # sentinel auth-pass sentinel auth-pass mymaster MySUPER–secret-0123passw0rd # 指定多少毫秒之后 主节点没有应答哨兵 sentinel 此时 哨兵主观上认为主节点下线 默认 30 秒 # sentinel down-after-milliseconds sentinel down-after-milliseconds mymaster 30000 # 这个配置项指定了在发生 failover 主备切换时最多可以有多少个 slave 同时对新的 master 进行 同步, 这个数字越小,完成 failover 所需的时间就越长, 但是如果这个数字越大,就意味着越 多的 slave 因为 replication 而不可用。 可以通过将这个值设为 1 来保证每次只有一个 slave 处于不能处理命令请求的状态。 # sentinel parallel-syncs 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 # SCRIPTS EXECUTION # 配置当某一事件发生时所需要执行的脚本,可以通过脚本来通知管理员,例如当系统运行不正常时发邮件通知 相关人员。 # 对于脚本的运行结果有以下规则: # 若脚本执行后返回 1 ,那么该脚本稍后将会被再次执行,重复次数目前默认为 10 # 若脚本执行后返回 2 ,或者比 2 更高的一个返回值,脚本将不会重复执行。 # 如果脚本在执行过程中由于收到系统中断信 被终止了,则同返回值为 1 时的行为相同。 # 一个脚本的最大执行时间为 60s ,如果超过这个时间,脚本将会被一个 SIGKILL 信 终止,之后重新执行。 # 通知型脚本 : 当 sentinel 有任何警告级别的事件发生时(比如说 redis 实例的主观失效和客观失效等等), 将会去调用这个脚本,这时这个脚本应该通过邮件, SMS 等方式去通知系统管理员关于系统不正常运行的信 息。调用该脚本时,将传给脚本两个参数,一个是事件的类型,一个是事件的描述。如果 sentinel.conf 配 置文件中配置了这个脚本路径,那么必须保证这个脚本存在于这个路径,并且是可执行的,否则 sentinel 无 法正常启动成功。 # 通知脚本 # shell 编程 # sentinel notification-script sentinel notification-script mymaster /var/redis/notify.sh # 客户端重新配置主节点参数脚本 # 当一个 master 由于 failover 而发生改变时,这个脚本将会被调用,通知相关的客户端关于 master 地址已 经发生改变的信息。 # 以下参数将会在调用脚本时传给脚本 : # # 目前 总是 “failover”, # 是 “leader” 或者 “observer” 中的一个。 # 参数 from-ip, from-port, to-ip, to-port 是用来和旧的 master 和新的 master( 即旧的 slave) 通 信的 # 这个脚本应该是通用的,能被多次调用,不是针对性的。 # sentinel client-reconfig-script sentinel client-reconfig-script mymaster /var/redis/reconfig.sh # 一般都是由运维来配 置! 2.启动哨兵