@TOC
1. 三高简介
1.1 什么是三高
1.2 实现三高的手段
1. 复制
2. 扩展
- 如果一个扩展的数据库挂了,会有数据不完整的风险
3. 切换
- 为了解决扩展的问题,当一个数据库不可用,能够切换到从数据库(备份数据库),但有丢失切换时期的数据风险
1.3 三高实现
2. 三高实现1-复制
2.1 复制的基本原理
binlog
传送,先保存到relay log
, 然后,进行重放,重新生成binlog
,这样,下次可以继续同步slave
2.2 复制的类型
1. 异步复制
2. 半同步复制
- 客户端需要接收到
ACK
通知,即确定从库同步到relay log
,就可以提交了,剩下的交给从库异步做 - 即,只关心日志同步过来没有,但执行结果如何不做强要求
- 有一定等待时间,如果一直没有同步到从库,超过一定时间,会脱库,主库不再阻塞,继续执行提交,切换成异步复制状态,保证主库的可用性
3. 组复制
- 保证强一致性
- 从库也可以执行事务,地位同步
3. binlog格式
4. 备库延迟问题
4.1 延迟的原因和解决办法
4.2 并行复制的策略
难点是如何分配中继日志,比如前一条是插入数据,后一条是修改这条数据,这样,不能同时并发执行
1.按库分发
2.按照事务组并行分发
事务组概念
binlog
刷盘步骤
- 事务组概念
优化:
- 因为,1,2,3三个事务操作的是同一个
binlog
文件,第一步都是刷到内存中,最终只有一个事务将最终内存中的日志保存到磁盘中,这三个事务属于一个事务组
参数设置
4.3. 备库如何读到最新数据
1 强制走主库
- 一种思路是,如果想读到实时最新的数据,查询主库的数据一定是最新的
2 如何判断备库已经追上
GTID
:事务的id,在从库上查询是否中继日志重放好了
5. 实现简单的高可用架构
主-主复制架构
配置测试
主-主架构的问题