1.实现三高的手段
(1).复制
- 目的:数据冗余
- 手段:binlog传送
- 收获:并发量提升,可用性提升
- 问题:占用更多的硬件资源
(2).扩展
- 目的:扩展数据库容量
- 手段 :数据分库、分表
- 收获 :性能、并发量提升
- 问题:可能降低可用性
(3).切换
- 目的:提高可用性
- 手段 :主从身份切换
- 收获 :并发量提升
- 问题:丢失切换时期数据
2.三高架构简介
(1).高并发
同时处理的事务数高,通过复制和扩展手段达成,将数据分散至多节点。
(2).高性能
事务或者SQL执行的速度高,通过扩展和扩展手段达成,复制提升速度,扩展提升容量。
(3).高可用
系统可用时间高,通过切换手段达成,节点间身份切换保证随时可用。
3.复制原理
- 主节点有一个生成binlog线程dump_thread,并发送给从节点
- 从节点有一个接收binlog,并将其保存为relay log的线程io_thread
- 然后从节点还有一个读取执行relay log的线程sql_thread
- 从节点执行relay log,也会产生自己的binlog
4.复制类型
(1).异步复制
- 客户端在主节点execute一个SQL
- 主节点产生一个binlog,并通过dump_thread发送给从节点,同时主节点也会提交事务
- 从节点通过io_thread接收binlog,并转为relay log,执行并产生自己的binlog,并提交事务
主节点发送binlog和提交事务是异步的,所以可能导致数据丢失。
(2).半同步复制
- 客户端在主节点execute一个SQL
- 主节点产生一个binlog,并通过dump_thread发送给从节点,同时主节点也会提交事务,但是不会立刻成功,需要等待从节点反馈
- 从节点通过io_thread接收binlog,并转为relay log,成功之后,向主节点发送ACK,然后执行并产生自己的binlog,最后提交事务
当主节点超过10秒没有收到从节点的ACK确认,即退化为异步复制。
5.如何在备库读到最新数据
(1).简介
因为binlog传送转relay log以及执行relay log都需要时间,所以备库延时理论上无法消灭,只能减弱。可以通过对比binlog执行位点position,来判断备库是否延时。
(2).业务对数据实时性要求比较高,响应要快,比如充值业务
强制读主库。
(3).业务对数据实时性要求比较高,响应需求不那么高
强制延时,需要计算备库一般延时时间。