云数据库高可用—— Series1:MySQL主从复制原理背景

1 引言

高可用是系统架构设计中必须考虑的因素之一,主要目标是消除基础架构中的单点故障,通常表示为一个百分比,表示在给定时间段内特定系统或组件的正常运行时间,其中100%表示系统永不失效。而任何的单机系统因受限于软硬件的限制,如硬件损坏、操作系统I 1 @ r z崩溃、软件BUG| , U、业务压力过大等原因,都不可能保证系统100%可用。一3 J g ` I f旦出现此类问题,如何能快速恢复& x ( l z用户业务,将影响程度减至最低,降低故障RTO(Recovery Tiz x ( T Q K Hme Objective,恢复时间目标)成为我们所要考虑的问题。

对于数据库系统来说,比较通用的解决方案是将单机程序部署在多台主机上,组成一个集群共同对外提供服务` d # i N。在MySQL中,最常见的一种部署方式为主从复制,这种部署方式一方面满足了故障恢复的场景,又能够在一m N m k D W 定程序上分担主库的压力,做到了业务的读写分离。相较于Oracle的RAC(real application clusters,实时应用集群)来讲,一不需要共C V @享存储,二不需x c [ W f S _ a Q要内存同步,也无需VIP(Virtual IP Address,虚拟IP地址)。因此MySQL的主从部署更为便捷,实t v j t _ _现原理也简单。本文将对MySQG C @ 9 #L主从复制的实现原理进行介绍。

2 一主一从/ D 8 : 2 t p复制实现原理

数据库实现技术中,最基本的、必须要满足的一个特性便是ACID,即事务的原子性(Atomicity)、一致性(Consistency)、隔离性(Is5 Q [ e L b } -olation)、持久性(Durability)。为了实现ACID,MySQL引入了B8 5 2 G vinlog(二进制日志),数据库中所有的DML、DDL] w [ 9 ` ; # f u语句都将记录在Binlog当中。如用户在主库上执行了一条update语句,那么在Binlog中便会记录这条update语句,这样就可以使用Binlog来进行K P i s 8 G 4 [ o实例间的数据同j w Z 9 ` c n r m步,Binlog也成为MySQL主从复制的实现基础,能够达到增量数据同步的目的,具体实现原理如下图所示。
云数据库高可用—— Series1:MySQL主从复制原理背景

图1:MySQL一主一从复制实现原理图

  • 主库所有的DML、DDL操作语句记录到Binlog日志中。
  • 从库中的IO线程会实时捕获主库中B$ Z 3 @ % & B pinlog的变化内容,并写到从库的中继日志Rel| M -ay log里。Relay log会持久化到本地文件中。
  • 从库中的SQL? f V线程负责从Relay log日志里取出Binlog内d & W t容,并把所/ 6 } N ) : x ! )有的语句按先后顺序在从库中执行一遍,这M W ~ D n i样就实现了主从间数据的一致性。
    以上便是MySQL主从库实现增量数据同步的步骤和原理。

3 一主一从部I 1 C b

在实际部署过程中,需要先做全量数据的同步,保证从库中存在与主库相同的基础数据,然后再进行增量同步。一般0 _ H $ | C G v使用3 C K w 0 x f数据库全库的备份恢复来做主从间的全量同步,即先在主库上做一次全量备份,然后把备份传到从库中进行全量恢复。这里会有一个问题,主库不会一直是静止状态,数据备份和恢复需要一定的时间,这个时间长短完全取决于m 2 ( :数据量的大小以及主从间的传输带宽,从库执行完全量恢复后可能已经落后主库一段时间,这 * ~ l N P段时间的增量数 B S ^ } y - c =据就需要Binlog来追。所以在从库上需要} 2 L X执行一个change master的命令来告诉从库需要从哪个位置来同步主库的Biv S ~ [ S .nlog日志,同时从库上会启动IO线程和SQ^ V h 5 ,L线程,IO线程从指定位置开始读取Binlog,SQL线程用来回放日志。当从J B k v 6 ` t库追平主库时,便完成了主从部署和搭建。

以上便是MySQL基于Binlog进行主从复制的相关内容,不过这种机制是100%可靠的么?会不会有例外情况?读者可思考一下,下期我们将继续S ] 4 V进行介绍。

作者:张西来

阿里云智能GTS-SRE团队技术服务经理

曾就职于某国产数据库厂商,有10多年数据库技术支持工作经验,精通多款数据库产品,为国内多个大中银行核心数据库提供技术支持。目前就职于阿里云智能GTS-SRE团队,负责云数据库的高效运维V G 0 J G ) B 0 w和管理工作。

我们是阿里云智能全球技术服务-SRE团队,我们致力成为一个以技术为基础、面向服务、保障业务系统高可用的工程师团队;提供专% $ z # H业、体系化的SRE服务,帮助广大客户更好地使用云、基于云构建更加稳定可靠的业务系统,提升业务稳定性。我们期望G ] y 2能够分享更多帮助企业客户上云、用好D 4 : - } N云,让客户云上业务运行更加稳定可靠的技术,您可用钉c h m Y 2钉扫描下方二维码,加入阿里云SRE技术学院钉钉圈子D 6 ) + y 5 v R O,和更多云上人交流关于云平台的那些事。

云数据库高可用—— Series1:MySQL主从复制原理背景