redis基础篇~哨兵

一 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 进行自定义脚本实现
  脚本部署 每个哨兵服务器都进行部署

原文地址:https://www.cnblogs.com/danhuangpai/p/13744725.html