25怎么保证高可用

高可用:最终一致,解决主备延迟

延迟来源

  • 备库机器性能差
  • 备库压力大
    在备库执行运行数据分析等,忽视备库压力控制
    解决:一主多从(备库适合做备份)、输送到外部系统 比如hadoop,让外部系统提供计算统计查询能力
  • 大事务
    一次性删除大量数据、大表DDL
  • 备库并行复制能力

切换策略

  • 可靠性优先策略
    有延迟
  • 可用性优先策略
    数据不一致(不推荐使用,binlog还未同步完成)

可靠性优先策略

  1. 判断备库B现在的seconds_behind_master,如果小于某个值(比如 5 秒)继续下一步,否则持续重试这一步;
  2. 把主库A改成只读状态,即把readonly设置为 true;
  3. 判断备库B的 seconds_behind_master的值,直到这个值变成 0 为止;
  4. 把备库B改成可读写状态,也就是把readonly设置为 false;
  5. 把业务请求切到备库 B。

可用性优先策略

直接切换,不等待seconds_behind_master
如果延迟太小,故障切换等待的时间就会越短
使用row格式binlog更容易发现不一致问题