一 redis 2,8+版本 多线程模式
二 哨兵模式通信
1 sentinel中各个sentinel也有互相通信,保持健康状态
2 sentinel中各个sentinel 不断地检查你的主服务器和从服务器是否运作正常(默认1Sping一次) 如果一个服务器没有在
master-down-after-milliseconds
选项所指定的时间内, 对向它发送 PING 命令的 Sentinel 返回一个有效回复(valid reply), 那么 Sentinel 就会将这个服务器标记为主观下线。 3 每10秒会对每个master、slave执行info。这样可以:发现slave节点、确认主从关系,确保最新的服务被发现
每1秒,每个sentinel会对其他sentinel、和master、slave执行ping操作。
每2秒,每个sentinel通过master节点的channel交换信息(发布/订阅)
三 主观下线和客观下线
1 主观下线 假设主服务器宕机,单个哨兵进程先检测到这个结果,系统并不会马上进行failover过程,仅仅是哨兵1主观的认为主服务器不可用 这个过程称之为主观下线 sdown
2 客观下线 当剩余的哨兵成员也检测到主服务器不可用,并且数量达到QUNUM时,那么哨兵之间就会进行一次投票,投票的结果由一个哨兵发起,进行failover操作。切换成功后,就会通过发布订阅模式,让各个哨兵把自己监控的从服务器实现切换主机,这个过程称为客观下线 odown
四 哨兵模式高可用
1 通过多数哨兵成员判定master已死,投票产生新的master
2 单个哨兵进行故障转移并将其他slave指向new master
3 同时会向所有其他哨兵成员发布订阅最新消息,用以提供健康检测和客户端连接服务
4 当哨兵模式进行切换时会自动修改哨兵和redis的配置文件,自动维护
5 两种判定方式
每次一个哨兵要做主备切换,首先需要quorum数量的哨兵认为odown,然后选举出一个哨兵来做切换,这个哨兵还得得到majority哨兵的授权,才能正式执行切换
2 如果quorum < majority,比如5个哨兵,majority就是3,quorum设置为2,那么就3个哨兵授权就可以执行切换
3 但是如果quorum >= majority,那么必须quorum数量的哨兵都授权,比如5个哨兵,quorum是5,那么必须5个哨兵都同意授权,才能执行切换
五 哨兵模式重要
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)
七 哨兵配置文件发生异动
1.新的从服务被侦测到,2.当异常发生,有从服务被提升为主服务时,3.新的哨兵被侦测到时。4 哨兵集群采用的是raft协议
八 命令汇总
sentinel failover master01 执行切换,如果架构正常,再执行可以切换过来(常用)
sentinel reset master01 清理历史信息 (常用)
sentinel remove master01 移除监控 (常用)
shutdown 关闭哨兵服务 (常用)
sentinel masters 获取所有主从信息
sentinel slaves master01 获取指定集群
sentinel get-master-addr-by-name maste01 获取指定主库的连接信息
info sentinel 查看具体的哨兵和监控redis实例信息
九 client list详解
一 cmd
1 sentinel 哨兵过滤的话普通IP创建连接会执行这个
2 role
3 ping 哨兵健康检测
4 subscribe 订阅
5 常规客户端命令
二 name
客户端的名字,如果为空一般为程序发起的连接,非哨兵连接
三 1 age和idle分别代表当前客户端已经连接的时间和最近一次的空闲时间
2 age和idle的数字一样就表示空闲连
四 哨兵和redis-server都能执行client list
五 补充 哨兵可以看成一个订阅的redis,所以适用大部分redis命令
十 获取信息
1 info 查看最后一块 2 查看哨兵的相关log日志 注意+monitor +slave +sentinel +sdown(代表出问题,这个需要注意) -sdown代表恢复
当原来的主挂掉后可以重新加入作为集群.只要启动即可 日志中会有-sdown标记
2 程序访问哨兵直接添加哨兵所有集群即可 不用配置VIP
十一 健康检测 与 元信息重置
1 通过info|grep status 判断哨兵是否正常 正常状态是OK
2 redis哨兵每个节点都拥有各自的信息,他们之间的交换会产生并集而并非消极,当迁移哨兵服务器时会发现新的哨兵服务器里出现+sdown slave,这是因为老的配置文件存在历史的slave 变更,属于正常现象 通过
3 将所有的哨兵服务器放置在独立的服务器,节点为三个
4 如果不清除历史文件的信息 通过info统计的哨兵包含所有历史信息,比如原来有3个 迁移过后 就会变成6个
十二 迁移相关
1 当进行哨兵迁移时,DNS指向新的哨兵部署集群,发现原有哨兵集群还有链接,这是正常现象,链接会一直保持ES状态.关闭相关服务即可,不会主动进行释放
十三 切换通知邮件
配置文件 sentinel client-reconfig-script mymaster /usr/local/bin/reconfig.sh
脚本参数 args=(<master-name> <role> <state> <from-ip> <from-port> <to-ip> <to-port>) 然后根$1-$7 进行自定义脚本实现
脚本部署 每个哨兵服务器都进行部署