二 哨兵模式通信
1 sentinel之间每秒进行健康检测
2 sentinel会每秒针对后端redis服务进行正常检测,如果服务本身没在master-down-after-milliseconds返回一个有效回复,Sentinel 就会将这个服务器标记为主观下线。
3 每10秒会对后端redis服务执行info,获取最新的主从状态
每2秒会通过master节点的channel交换信息(发布/订阅)
三 主观下线和客观下线
1 主观下线 假设主服务器宕机,单个哨兵进程先检测到这个结果,系统并不会马上进行failover过程,仅仅是哨兵1主观的认为主服务器不可用 这个过程称之为主观下线 sdown
2 客观下线 当剩余的哨兵成员也检测到主服务器不可用,并且数量达到QUNUM时,那么哨兵之间就会进行一次投票,投票的结果由一个哨兵发起,进行failover操作。切换成功后,就会通过发布订阅模式,让各个哨兵把自己监控的从服务器实现切换主机,这个过程称为客观下线 odown
四 哨兵模式高可用
1 通过多数哨兵成员判定master已死,投票产生新的master
2 单个哨兵进行故障转移并将其他slave指向new master
3 同时会向所有其他哨兵成员发布订阅最新消息,用以提供健康检测和客户端连接服务
4 当哨兵模式进行切换时会自动修改哨兵和redis的配置文件,自动维护
5 哨兵数量为奇数,qurnum数值为(int(totol/2)+1)
五 配置文件
1 哨兵监控的master,主从配置一样
sentinel monitor master_name(用来在哨兵内控志) master_ip master_port available_member
2 master或slave多长时间(默认30秒)不能使用后标记为s_down状态。
sentinel down-after-milliseconds mymaster 5000(默认单位毫秒)
3 设置master和slaves验证密码
sentinel auth-pass mymaster 123456
4 配置当故障发生时需要执行的脚本
sentinel client-reconfig-script mymaster /var/lib/redis/failover.sh
<master-name> <role> <state> <from-ip> <from-port> <to-ip> <to-port> 可以传递到脚本里的参数
5 redis哨兵在启动后会自动添加一些配置信息重写到配置文件,属于自动生成
六 主动切换主从-新加入从模式
1 slaveof old_master 新主加入集群,作为从进行数据同步 (new_master)
2 config set slave-priority N 调整新主的SLAVE权重,这样切换时会优先成为new_master(new_master)
3 config rewrite 将当前修改写入redis.conf配置文件中 (new_master)
4 sentinel failover old_master 手动触发哨兵进行切换 (sentinel)
5 进行检测集群是否正常提供服务
6 每个哨兵节点执行 sentinel reset new_master 清除掉历史遗留信息 重新进行获取最新配置 (sentinel)
七 命令汇总
sentinel failover master01 执行切换,如果架构正常,再执行可以切换过来(常用)
sentinel reset master01 清理历史信息 (常用)
sentinel remove master01 移除监控 (常用)
sentinel masters 获取所有主从信息
sentinel slaves master01 获取指定集群
sentinel get-master-addr-by-name maste01 获取指定主库的连接信息
八 日志关键字判断服务是否切换
+sdown 进入主观下线
-sdown 退出主观下线
+odown 进入客观下弦
-odown 退出客观下弦
+switch-master 主库地址发生变化
+slave-相关 从库相关