Zer0e's Blog

浅谈数据库主从复制

字数统计: 1k阅读时长: 3 min
2020/07/04 Share

前言

之前陆陆续续写了几篇高并发架构的文章,本篇文章是浅谈高并发架构系列的最后一篇。
前面说过,单点故障是影响整个高并发系统的重要原因,在单点的服务出现故障时有可能影响整个系统的运行。而数据库作为数据存放的服务,是最底层的服务,使用的频率也是非常高的。因此有必要将单点数据库系统进行多节点复制,以至于在一个节点出现故障时,另一个节点能够提供正常的数据库服务,这种方式也被称为容灾。
今天这篇文章讲的是将数据库进行多节点复制,也就是数据库的主从复制,从而达到多个数据库服务同时存在和正常运行的目的。

正文

主从复制的作用

前面说过,主从复制的一个优点就是做数据的备份,当主数据库故障后,可以马上切换数据库,防止数据的丢失。其次,可以加快数据库的存储与写入,例如不同的数据库负责不同的事物,例如读写分离,提升单机的性能。

原理

我们这里就使用mysql作为数据库。
mysql服务中,有一个文件叫做二进制日志文件(binary log file),通常这个文件需要手动开启,这个文件记录着所有执行的操作,如果一台服务器启用这个文件后,那另一台服务器就可以通过读取这个文件,将master的所有操作都复制到自己身上,从而达到数据库的主从复制。
通常情况下,可以分为以下几个步骤执行:

  1. 主库启用bin log,所有事件都会写入到日志当中。
  2. 从库启用slave服务,连接到主库。
  3. 从库创建一个I/O线程,从主库读取到bin log内容并写入relay log中。
  4. 从库创建一个SQL线程,从relay log中读取内容,并将更新内容写入到从库。

值得一提的是,老版本的mysql其实读取与执行操作是由一个线程完成的,导致复制bin log与执行操作是一个串行的过程,性能受到限制。后来为了提高性能,便将这个两个操作交由两个线程完成。

深入了解

从上面我们可以知道主从复制的基本原理与操作,接下来我们讲讲常见的主从配置。

一主多从

这个配置是最常见的,也是最简单的架构,slave之前并不通信,而是只与master进行通信。这种架构广泛应用在读压力较大的场景中。

主主复制

这个情况下,两个数据库即是master,又是相互的slave。这样任何一方有变更,便会同步到另一方的数据库中。这个架构其实可以变为主动-被动mm架构与带从服务器的mm架构。

  • 主动-被动模式的Master-Master(Master-Master in Active-Passive Mode)
    这种模式是一种具有容错与高可用的架构,即一个节点故障之后马上会有另一个节点接替服务,也就是我们上文所提到的可实现高可用的架构。
  • 带从服务器的Master-Master(Master-Master with Slaves)
    这种模式提供了冗余,即在保证高可用架构的同时,将读请求放在slave上,提高数据库的整体性能。

总结

本文重点讲述了mysql主从复制的原理与几种主从架构,但是对如何配置并没有详细讲解,之后在项目中遇到会稍微写写。
那这个浅谈高并发架构就告一段落了,如果有更深入的理解,我也会第一时间写出来。

CATALOG
  1. 1. 前言
  2. 2. 正文
    1. 2.1. 主从复制的作用
    2. 2.2. 原理
    3. 2.3. 深入了解
      1. 2.3.1. 一主多从
      2. 2.3.2. 主主复制
  3. 3. 总结