一、数据库主从库概念
是指在一个数据库系统中,将一个主数据库(Master)与一个或多个从数据库(Slave)相连接的架构。主库负责处理所有的写入操作,而从库则通过复制主库的数据来保持数据的一致性,主要用于负载均衡和高可用性。
二、主从库架构同步原理
MySQL支持集群,MySQL主从复制也是解决单台实例瓶颈问题,业务量增大后,IO密集,单台实例是不能支撑的,多库存储,降低磁盘IO次数,提高单台机器的IO访问性能。
主从同步的作用:容灾备份,用于故障切换,可创建读写分离,减少单个数据库压力。
主从同步实现原理:MySQL主从同步是一个异步的复制过程,从Master主节点复制到Slave从节点,整个过程需要由Master主节点上的IO进程和Slave从节点上Sql进程和IO进程共同完成。首先Master主节点必须打开binary log(bin-log),整个复制过程实际上就是Slave从节点从Master主节点获取相应的二进制日志,然后在本地完全顺序的执行日志中所记录的各种操作。
主从同步过程:
(1)Slave 端的 IO 进程连接上 Master,向 Master 请求指定日志文件的指定位置(或者从最开始的日志)之后的日志内容。
(2) Master 接收到来自 Slave 的 IO 进程的请求后,负责复制的 IO 进程根据 Slave 的请求信息,读取相应日志内容(二进制数据流),返回给 Slave 的IO进程,并将本次请求读取的 bin-log 文件(二进制文件)名及位置一起返回给 Slave 端。
(3)Slave 端的 IO 进程接收到信息后,将接收到的日志内容依次添加到 Slave 端的 relay-log(中继日志) 文件的最末端,并将读取到的 Master 端的 bin-log 的文件名和位置记录到 master-info 文件中,以便在下一次读取的时候能够清楚的告诉 Master :”我需要从某个 bin-log 的哪个位置开始往后的日志内容,请发给我”。
(4)Slave 端的 Sql 进程检测到 relay-log (中继日志)中新增加了内容后,会马上解析 relay-log 的内容成为在 Master 端真实执行时候的那些可执行的内容,并在本地执行。
主从同步关键组成部分:
(1)IO线程:负责连接主节点获取二进制日志(bin-log),将这些日志文件写入从节点的中继日志中。
(2)Log Dump线程:Master 节点上,每个Slave从节点都有一个 log dump 线程,是用来读取和发送日志文件( binlog) 给 slave 的。
(3)SQL线程:负责将中继日志在Slave从节点上执行,保证数据一致性。
主从同步方式:
(1)同步复制:主服务器在执行写操作后,等待所有从服务器都确认收到并执行了该操作后,才返回成功响应。
(2)半同步复制:主服务器在执行写操作后,等待至少一个从服务器接收到该操作的日志信息,然后才返回成功响应。
(3)异步复制:主服务器在执行写操作后立即返回成功响应,而不等待从服务器接收和执行这些写操作。
主从同步复制技术:
传统复制:默认是通过pos复制(postion),就是说在日志文档里,将用户进行的每一项操作都进行编号(pos),每一个event都有一个起始编号,一个终止编号。
并行复制:并行复制的核心思想是将事务并行处理,而不是串行处理。通过这种方式,从库可以在接收到多个事务时同时执行,从而减少了数据同步的延迟。从库启动多个应用线程(worker threads),并行处理中继日志中的事务。每个应用线程可以独立地执行从主库接收到的事务。
GDIT(Group Data In Time):是一种用于增强数据复制的技术,特别是在分布式系统中,旨在提供高可用性和数据一致性。