介绍存储高可用架构

存储高可用架构

MySQL 的双机架构

MySQL 支持主备架构、主从架构、主主架构。
MySQL 的双机架构支持 M-S结构,也支持 M-M 结构(双 M 结构)

  • M-S结构指的是:两个节点,其中一个是主机,其中一个是备机。在主备切换时,需要手动修改主备关系
  • M-M 结构指的是:两个节点互为主备关系。在主备切换时,不需要再修改主备关系。

M-S结构,如下图所示:
MySQL 主备切换流程 -- M-S结构
M-M 结构,如下图所示:
MySQL 主备切换流程 -- M-M结构

MySQL 的数据同步过程

接下来,我们再看看节点 A 到 B 的数据同步的内部流程。
下图就是一个 update 语句在节点 A 执行,然后数据同步到节点 B 的完整流程图。
MySQL 的存储高可用架构 - 图3
主库接收到客户端的 update 更新请求后,执行事务的更新逻辑,同时写 binlog。
备库 B 跟主库 A 之间维持了一个长连接。主库 A 内部有一个线程(dump_thread),专门用于服务备库 B 的这个长连接。
一个事务数据同步的完整过程是这样的:

  1. 在备库 B 上通过 change master 命令,设置主库 A 的 IP、端口、用户名、密码,以及要从哪个位置开始请求 binlog,这个位置包含文件名和日志偏移量。
  2. 在备库 B 上执行 start slave 命令,这时候备库会启动两个线程,就是图中的 io_thread 和 sql_thread。其中 io_thread 负责与主库建立连接。
  3. 主库 A 校验完用户名、密码后,开始按照备库 B 传过来的位置,从本地读取 binlog,发给 B。
  4. 备库 B 拿到 binlog 后,写到本地文件,称为中转日志(relay log)。
  5. sql_thread 读取中转日志,解析出日志里的命令,并执行。

这里需要说明,后来由于多线程复制方案的引入,sql_thread 演化成为了多个线程。

MySQL 是如何应对复制延迟的

不同的优先策略
备库并行复制
25 | MySQL是怎么保证高可用的?
26 | 备库为什么会延迟好几个小时?

MySQL 是如何应对复制中断的

MySQL 的多机架构

MySQL 存储高可用实操

change master

参考资料

24 | MySQL是怎么保证主备一致的?
25 | MySQL是怎么保证高可用的?
26 | 备库为什么会延迟好几个小时?
27 | 主库出问题了,从库怎么办?
28 | 读写分离有哪些坑?
29 | 如何判断一个数据库是不是出问题了?