专栏首页Coder Sam的专栏使用MySQL半同步复制保障关键数据可靠性和一致性
原创

使用MySQL半同步复制保障关键数据可靠性和一致性

对于一些关键数据,例如账户数据,对可靠性和一致性的要求非常高。我们宁可牺牲短暂时间内的可用性,也不允许数据出现错误或丢失。所以早期我们会发现业界存在这种现象:DB设置了主备同步,主DB挂了,但是不敢切换到备DB,只能暂停服务。这种现象的主要原因有两点:

  1. 主备DB同步是异步的,将备DB提升为主DB,可能造成未同步数据的丢失。
  2. 即使主备DB同步已全部完成,将备DB提升为主DB后会变成单点。假如新的主DB也发生故障,单点期间的数据可能丢失。

1. Master故障后单点问题

问题二很好解决,只要设置双备机即可(三台机器分布在不同IDC)。当主机故障后,在确认数据同步已全部完成后(只需其中一台备机全部完成即可),将已同步全部数据的备机提升为主机,另一台备机切换同步源为新主机即可。假如新主机再次故障,那么也只能暂停服务。在考虑IDC分布之后,两台机器同时故障的概率比单台机器故障的概率小很多,所以可以大大提升系统可用性。

2. Master故障时数据同步问题

对于问题一,可以使用MySQL 5.5以上版本的半同步复制功能解决。

2.1 MySQL半同步复制机制

image.png

MySQL半同步复制和异步复制的差别如上述架构图所示:在异步复制的情况下,MySQL Master Server将自己的binlog通过复制线程传输出去以后,MySQL Master Sever就自动返回数据给客户端,而不管slave上是否接受到了这个二进制日志。在半同步复制的架构下,当master在将自己binlog发给slave上的时候,要确保slave已经接受到了这个二进制日志以后,才会返回数据给客户端。对比两种架构:异步复制对于用户来说,可以确保得到快速的响应结构,但是不能确保二进制日志确实到达了slave上;半同步复制对于客户的请求响应稍微慢点,但是他可以保证二进制日志的完整性。

利用半同步复制机制,我们就可以保证每条数据提交都能至少同步到一台备机上了。

2.2 半同步复制机制的退化

从上面的描述看,好像是同步复制,那为什么叫做半同步复制呢,主要是因为还有另外一个退化机制,当达到触发条件时,同步复制会退化为异步复制,所以叫做半同步复制。具体退化机制如下:

半同步复制需要设置一个超时时间,在超时时间内,数据采用上述的同步复制模式,只需要有至少一台备机接收了binlog,数据即可提交成功。假如在超时时间内所有备机都没有响应,那么会退化为异步复制模式,并继续提供服务。

由于我们需要的是同步复制(确切的说,是至少一台备机同步复制,其余备机异步复制),那么就应该避免退化的出现,可以通过设置足够长的超时时间来实现。这样,当所有备机都没有响应时,数据提交就会失败,也就避免了数据不一致的现象。至于提交失败的处理,当然是像各银行一样,要求用户稍后再重试了。

相信我,告诉用户系统繁忙,总好过告诉用户他的钱不见了要好!

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • MySQL半同步复制的数据一致性探讨

    MySQL是一个RDBMS(关系型数据库管理系统),由瑞典MySQL AB 公司开发,目前属于 Oracle 旗下产品。由于其体积小、速度快、拥有成本低,尤其是...

    腾讯大讲堂
  • 五大常见的MySQL高可用方案

    关于对高可用的分级在这里我们不做详细的讨论,这里只讨论常用高可用方案的优缺点以及高可用方案的选型。

    菲宇
  • 10款常见MySQL高可用方案选型解读

    关于对高可用的分级我们暂不做详细的讨论,这里只讨论常用高可用方案的优缺点以及选型。

    AI乔治
  • MySQL数据库,简述5种MySQL高可用方案

    我们在考虑MySQL数据库的高可用的架构时,如果数据库发生了宕机或者意外中断等故障,能尽快恢复数据库的可用性,尽可能的减少停机时间,保证业务不会因为数据库的故障...

    用户1289394
  • 分布式数据复制技术,今天就教你真正分身术

    在上一篇文章中(数据分布方式之哈希与一致性哈希,我就是个神算子),我为你讲解了数据分布(也称数据分片)技术,主要用于构建数据索引,是实现“导购”功能的关键技术。...

    架构师修炼
  • PhxSQL设计与实现(详细版)

    之前发表过一篇ppt版的“PhxSQL设计与实现”,本文是在ppt的基础上,加上解说的文字内容,形成一篇详细版。

    用户8964349
  • 高可用 | Xenon:后 MHA 时代的选择

    在 MySQL(5.5 及以下)传统复制的时代,MHA(Master High Availability)在 MySQL 高可用应用中非常成熟。在 MySQL(...

    用户1278550
  • 如何设计和实现高可用的MySQL

    王甲坤,腾讯高级工程师、腾讯云关系型数据库MySQL负责人,拥有多年客户端、数据库研发经验。在IOS客户端、MySQL、PostgreSQL、SQL Serve...

    腾讯云数据库 TencentDB
  • 王甲坤:如何设计和实现高可用的MySQL

    下面开始我们今天的主要内容,今天主要是通过什么、为什么、怎么做,这条思路跟大家呈现MySQL的高可用。

    云加社区技术沙龙
  • 如何设计和实现高可用的MySQL

    作者:王甲坤,腾讯高级工程师、腾讯云关系型数据库MySQL负责人,拥有多年客户端、数据库研发经验。在IOS客户端、MySQL、PostgreSQL、SQL Se...

    腾讯云数据库 TencentDB
  • 系统的高可用(纯理论)

    专注服务端首先要专注的是关于高可用。 有的时候高可用系统并不是简单的技术方案,会包含很多其他的东西。 什么是高可用? 基本来讲是为了让我们的计算机(硬件/软件...

    春哥大魔王
  • 【MySQL】组复制背景

    创建容错系统的最常见方法是创建组件冗余,换句话说,组件可以被移除,而系统应该继续按预期运行。这就造成了一系列的挑战,将这种系统的复杂性提高到一个完全不同的水平。...

    MySQL技术
  • MySQL 数据库的高可用性分析

    MySQL Replication是MySQL官方提供的主从同步方案,用于将一个MySQL实例的数据,同步到另一个实例中。Replication为保证数据安全做...

    后端技术探索
  • MySQL InnoDB Cluster 详解

    这篇文章将详细地介绍MySQL的高可用解决方案—— MySQL InnoDB Cluster。

    MySQLSE
  • 带货直播源码开发采用MySQL有什么优越性

    MySQL是世界上最流行的开源关系数据库,带货直播源码使用MySQL,可实现分钟级别的数据库部署和弹性扩展,不仅经济实惠,而且稳定可靠,易于运维。云数据库 My...

    云豹kj的晨曦
  • 连载 | 深入浅出理解云数据库,年薪百万DBA之路 · 第三回

    为帮助开发者更好的了解和运用数据库,腾讯云数据库团队特出品《深入浅出理解云数据库》系列文章,从数据库的基本概念到云数据库特性及应用,从数据库基础原理知识到腾...

    腾讯云数据库 TencentDB
  • MySQL 数据库的高可用性分析

    MySQL 数据库是目前开源应用最大的关系型数据库,有海量的应用将数据存储在 MySQL 数据库中。存储数据的安全性和可靠性是生产数据库的关注重点。本文分析了目...

    腾讯云数据库团队
  • MySQL主从复制架构及原理

    一、简介 在实际生产中,数据的重要性不言而喻,因此考虑到数据的重要性比如单点故障导致后端数据库奔溃,或者后端数据库访问压力过大等,mysql数据库做主从非常有必...

    小小科
  • 一些关系数据库的架构总结

    ORACLE数据库既能跑OLTP业务,也能跑OLAP业务,能力是商业数据库中数一数二的。支持IBM小机和x86 PC服务器,支持多种OS。同时有多种数据库架构方...

    用户1278550

扫码关注云+社区

领取腾讯云代金券