1.实现三高的手段
(1).复制

  • 目的:数据冗余
  • 手段:binlog传送
  • 收获:并发量提升,可用性提升
  • 问题:占用更多的硬件资源

(2).扩展

  • 目的:扩展数据库容量
  • 手段 :数据分库、分表
  • 收获 :性能、并发量提升
  • 问题:可能降低可用性

(3).切换

  • 目的:提高可用性
  • 手段 :主从身份切换
  • 收获 :并发量提升
  • 问题:丢失切换时期数据

2.三高架构简介
(1).高并发
同时处理的事务数高,通过复制和扩展手段达成,将数据分散至多节点。

(2).高性能
事务或者SQL执行的速度高,通过扩展和扩展手段达成,复制提升速度,扩展提升容量。

(3).高可用
系统可用时间高,通过切换手段达成,节点间身份切换保证随时可用。

3.复制原理

4.复制理论_提交事务

  1. 主节点有一个生成binlog线程dump_thread,并发送给从节点
  2. 从节点有一个接收binlog,并将其保存为relay log的线程io_thread
  3. 然后从节点还有一个读取执行relay log的线程sql_thread
  4. 从节点执行relay log,也会产生自己的binlog

4.复制类型

(1).异步复制

4.复制理论_java_02

  1. 客户端在主节点execute一个SQL
  2. 主节点产生一个binlog,并通过dump_thread发送给从节点,同时主节点也会提交事务
  3. 从节点通过io_thread接收binlog,并转为relay log,执行并产生自己的binlog,并提交事务

主节点发送binlog和提交事务是异步的,所以可能导致数据丢失。

(2).半同步复制

4.复制理论_java_03

  1. 客户端在主节点execute一个SQL
  2. 主节点产生一个binlog,并通过dump_thread发送给从节点,同时主节点也会提交事务,但是不会立刻成功,需要等待从节点反馈
  3. 从节点通过io_thread接收binlog,并转为relay log,成功之后,向主节点发送ACK,然后执行并产生自己的binlog,最后提交事务

当主节点超过10秒没有收到从节点的ACK确认,即退化为异步复制。

5.如何在备库读到最新数据
(1).简介
因为binlog传送转relay log以及执行relay log都需要时间,所以备库延时理论上无法消灭,只能减弱。可以通过对比binlog执行位点position,来判断备库是否延时。

(2).业务对数据实时性要求比较高,响应要快,比如充值业务
强制读主库。

(3).业务对数据实时性要求比较高,响应需求不那么高
强制延时,需要计算备库一般延时时间。