数据库读写分离后的数据同步方式

本文涉及的产品
云数据库 Tair(兼容Redis),内存型 2GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
简介: 【6月更文挑战第5天】该文介绍了应对大并发请求的数据库解决方案,主要涉及MySQL的主从同步和读写分离。根据业务对数据一致性和延迟的容忍度选择合适模式,读写分离则能进一步优化数据库负载。

1 简介

本文章讨论了全同步、半同步和异步复制三种模式,全同步保证数据实时性但对服务器要求高,半同步允许一定延时,而异步复制牺牲实时性换取性能。

在遇到大并发的请求场景时。采用主从同步+读写分离,去实现数据的读写加速是主流的操作,那么分析一下业务,适合哪个同步模式(全同步,半同步,异步)就非常必要了,比如有如下问题:

遇到单点故障,服务不可用
无法处理大量的并发数据请求,数据丢失将会造成很大损失

image.png

2 方案

增加MySQL数据库服务器,对数据进行备份,形成主备,确保主备MySQL数据库服务器数据是一样的。

主服务器宕机了,备份服务器继续工作,数据有保障,MySQL主从复制与读写分离是密切相关的。

通过主从复制的方式来同步数据,再通过读写分离来提升数据库的并发负载能力。

使用代理同步:

一个以MySQL为底层数据存储,并对应用提供MySQL协议接口的proxy,外号变形虫(Amoeba)
读取请求发送给从服务器时,采用轮询调度算法.主服务器挂掉,采用MHA解决。

这将涉及到的账号权限:

    主从同步账号
    节点服务器开放调度账号
    Amoeba代理账号

注意点:

1 主服务器需要开一个主从复制权限账户, 第一个账户

2 代理服务把写的操作给master,读的操作给slave,轮询从数据库服务

3 读写分离账户,第二个账户

4 client 照amoeba进行访问,访问amoeba账号

3 主从复制类型

基于语句的复制(默认)

    在主服务器上执行的语句,从服务器执行同样的语句

基于行的复制

把改变的内容复制到从服务器

混合类型的复制

一旦发现基于语句无法精确复制时,就会采用基于行的复制

4 主从同步过程:

先找位置,匹配到位置后I/o线程去找二进制日志,进行读取更新,再写入中继日志,从服务器读取中继日志,从而进行相对应操作.

  • 操作步骤:

      1 关闭防火墙
      2 建立时间同步环境
      3 编译安装mysql
      4 配置mysql 主服务器
      5 配置两个从服务器
      6 测试
    
  • 读写分离

在表Myisam或行innodb被锁定时,
只能读不能写,或者只能写不能读都需要读写分离。

读写分离就是主服务写,从服务读
数据库复制被用来把事务性查询变更同步到集群的从数据库。

  主从同步+读写分离 全同步,半同步,异步 

5 强同步

数据实时性要求高,不能丢失使用全同步,服务器的要求比较高,全部slave返回。

master在执行完更新操作后立即向slave复制数据,slave接受到数据并执行完后才向master返回成功的信息,master必须接收到slave的成功信息后再向应用程序响应。

因master向slave复制数据是同步进行的,master每次更新操作都需要保证slave也成功执行,因此强同步复制能最大限度保障主从数据的一直性。

但因每次master更新操作都强依赖于slave的返回,因此slave如果仅此一台,它不可用将极大影响master上的正常操作。

某些(腾讯)云数据库MySQL强同步复制采用一主两从的架构,仅需其中一台slave成功执行即可返回,避免了单台slave不可以用影响master上操作的问题,提高了强同步复制集群的可用性。

6 半同步

数据可有一定延时,不能丢失,只需某一个slave返回即可。

应用发起数据更新(含insert、update、delete操作)请求,master在执行完更新操作后立即向slave复制数据,slave接收到数据并写到relaylog中(不需要执行)后才向master返回成功的信息。

master必须在接收到slave的成功信息后再向应用程序返回响应。

仅在数据复制发生异常(slave节点不可以用或者数据复制所用的网络发生异常)的情况下,master会暂停(MySQL默认10s左右)对应用的响应,将复制方式降为异步复制。

当数据复制恢复正常,将恢复为半同步复制。(腾讯云数据库MySQL半同步复制采用一主一从的架构)

7 异步,丢失可找回

数据可延迟同步,强调的是最终一致性,有较高的性能。

应用发起CRUD请求,master在执行完更新操作后立即向应用程序返回响应,然后master在向slave同步数据。

数据更新过程中master不需要等待slave的响应,因此异步复制的数据库实例通常具有较高的性能,且slave不可以用并不影响master对外提供服务。

但因数据并不是实时同步到slave,而master在slave有延迟的情况下发生故障则有较小的概率会引起数据不一致。

8 小结

通过主从复制确保数据备份,使用代理如Amoeba进行读写操作分配,以提高并发处理能力。如果需要考虑主从分库,并且细致地考虑同步的方式,可以参考这些内容。

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
4月前
|
SQL Oracle 关系型数据库
实时计算 Flink版产品使用问题之Oracle数据库是集群部署的,怎么进行数据同步
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
6月前
|
消息中间件 SQL 关系型数据库
数据库如何实现读写分离以应对高并发?
【6月更文挑战第17天】数据库如何实现读写分离以应对高并发?
85 1
|
7月前
|
SQL 存储 负载均衡
关系型数据库读写分离与主从复制
【5月更文挑战第2天】关系型数据库读写分离与主从复制
64 5
关系型数据库读写分离与主从复制
|
7月前
|
Oracle 关系型数据库 Java
java操作多数据源将oracle数据同步达梦数据库
java操作多数据源将oracle数据同步达梦数据库
|
Java 关系型数据库 MySQL
数据库系列课程(04)-SpringBoot整合MySQL读写分离
数据库系列课程(04)-SpringBoot整合MySQL读写分离
113 0
|
SQL Oracle 关系型数据库
数据库系列课程(02)-MyCat读写分离
数据库系列课程(02)-MyCat读写分离
80 0
|
存储 Java 数据库连接
Spring Boot 配置主从数据库实现读写分离
Spring Boot 配置主从数据库实现读写分离
429 0
|
7月前
|
存储 数据库
云数据库如何处理数据迁移和数据同步?
云数据库如何处理数据迁移和数据同步?
163 0
|
数据库 流计算
Flink CDC的工作原理是通过监听数据库的binlog来实现实时数据同步的
Flink CDC的工作原理是通过监听数据库的binlog来实现实时数据同步的
477 1
|
27天前
|
SQL 关系型数据库 MySQL
12 PHP配置数据库MySQL
路老师分享了PHP操作MySQL数据库的方法,包括安装并连接MySQL服务器、选择数据库、执行SQL语句(如插入、更新、删除和查询),以及将结果集返回到数组。通过具体示例代码,详细介绍了每一步的操作流程,帮助读者快速入门PHP与MySQL的交互。
34 1