`
丁林.tb
  • 浏览: 794807 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

一种MySQL主从同步加速方案-改进

阅读更多

上一篇提出了一种改进主从延迟的方案。虽然能够实现主从无延迟同步,但在维护上比较复杂,还存在网络消耗问题,这里是一个改进的版本。

 

一、之前方案简述及问题分析

方案如图。其中用多个MySQL充当transfer的角色。每个transfer负责同步master的一部分表。在我的试验中有8transfer,也就是有8MySQL实例。

 

问题: 1维护复杂。在从库及其上需要增加8个实例,增加维护成本,而且不利于加表操作。

       2增加网络开销。虽然在transferIO线程作了过滤,减少每个transfer的写盘量和SQL线程的空转,但master还是向每个tranfer发了所有的数据。网络传输的日志量是原来的n倍。

 

二、改进方案

基于上述的两个问题考虑,考虑将transfer多进程改成多线程

如图:

 

    1、用一个MySQL充当transfer transfer设置为master的主库。IO线程负责接收Master传过来的日志。但不是写到一套relay-log文件,而是SLAVE_THREAD每个表的日志固定分配到一套relay-log

   

 

2、相应地起SLAVE_THEADSQL线程,负责读取对应目录下的relaylog,发送给slave

 

 

三、方案对比

从上面描述中看出,master发给transfer的日志总量只有一份。只需要增加SLAVE_THREAD slave信息的配置,维护简单。

两个方案的相同点是使用文件队列(多套relaylog),保证在transfer出现异常时不丢数据。

效果对比,原生版本

 

上个方案

 

 

改进方案

 

 

说明:改进方案也能保证无延迟同步,性能都是原生版本的7倍左右。由于线程更少,从库的QPS表现很稳定,cpu idle也比上个方案高。

 

 

四、两个为什么

 

1、为什么不直接把transferslave用?

    实际上是可以的,作了简单实验发现与“改进方案”的从库QPS相同,好处是减少了一层transfer的逻辑。一般来说这种工具也不会放到和slave一个机器,直接用作slave就少了一个机器。

    不过直接改slave的代码还是推广比较麻烦。而且不得不承认的是,这个方案存在一个硬伤:跨表更新的语句顺序无法严格保证。――这也是这两个方案的应用前提:没有跨表语句或者对这种出现的情况要求不严格。

 

 

2、为什么不直接写一个工具而用MySQL

        其实作transferMySQL并不像想象的那么庞大。不需要的引擎可以都不编译进去,其实只需要框架层的逻辑和一个myisam引擎即可。而它提供了很多管理命令,比如一个现成的客户端,能够方便的stop slavechange master,能够用show slave status看同步状态。这些作为这个工具的基本功能,自己一个个实现重复轮子太多了。

 

好吧,我就是偷懒。。。

 

  • 大小: 27.8 KB
  • 大小: 41.4 KB
  • 大小: 31.1 KB
  • 大小: 39.5 KB
  • 大小: 39.9 KB
  • 大小: 37.9 KB
4
1
分享到:
评论
4 楼 丁林.tb 2012-11-13  
ls3648098 写道
transfer对mysql的版本有要求吧,transfer 2.0现在只支持mysql 5.1吗

如果你用的是Transfer模式,对主库和备库是没有版本要求的,只要主从协议兼容就ok
3 楼 ls3648098 2012-11-13  
transfer对mysql的版本有要求吧,transfer 2.0现在只支持mysql 5.1吗
2 楼 丁林.tb 2011-12-06  
rj03hou 写道
在这个方案中你们修改了mysql的io_thread和sql_thread,io_thread将每个表的更新写入到不同的文件中,然后sql_thread读取不同的文件夹然后更新到另外一个“instance”中,这个instance也可以是远程的?你们会在sql_thread中建立起mysql连接对吗?

是的
1 楼 rj03hou 2011-12-05  
在这个方案中你们修改了mysql的io_thread和sql_thread,io_thread将每个表的更新写入到不同的文件中,然后sql_thread读取不同的文件夹然后更新到另外一个“instance”中,这个instance也可以是远程的?你们会在sql_thread中建立起mysql连接对吗?

相关推荐

    MySQL主从同步配置过程.docx

    MySQL 主从同步配置是指将 MySQL 数据库的数据从一台服务器(主服务器)同步到另一台服务器(从服务器)的过程。这种配置可以实现数据的高可用性和灾难恢复,提高系统的整体性能和安全性。 二、 主从同步配置的基本...

    Linux配置mysql主从同步

    在数据库管理领域,MySQL主从同步是一种常见的数据复制技术,它可以帮助我们构建高可用性和数据冗余性,从而提高系统的稳定性和可靠性。本文将详细介绍如何在Linux环境下配置MySQL的主从同步,并通过具体的步骤演示...

    mysql主从同步搭建修改优化版.pdf

    MySQL主从同步是一种常见的数据库高可用性和数据冗余策略,它允许数据在多个服务器之间实时复制,确保即使在一台服务器故障时,数据仍然可以被访问。以下是对搭建、修改和优化MySQL主从同步过程的详细解释: 1. **...

    Mysql主从同步(复制) - kylinlin - 博客园1

    MySQL主从同步是一种数据库复制技术,它允许数据从一个服务器(主服务器)自动复制到一个或多个其他服务器(从服务器)。这种同步机制提高了系统的可扩展性、数据安全性以及提供了灾难恢复的可能性。 ### 主从同步...

    mysql主从同步配置

    MySQL主从同步是一种数据库复制技术,它允许数据从一个MySQL服务器(称为“主服务器”)实时复制到另一个或多个服务器(称为“从服务器”)。这种配置对于数据备份、负载均衡和高可用性至关重要。在Java开发中,了解...

    mysql主从架构的实现-图灵杨过老师1

    MySQL主从架构是一种常见的数据冗余和负载均衡解决方案,它允许数据在多个服务器之间实时或近实时地复制,以提高系统的可用性和可扩展性。下面将详细讲解如何实现MySQL主从架构,包括一主一从、一主多从以及半同步...

    windows下mysql主从同步备份步骤

    在Windows环境下,MySQL主从同步备份是一种常见的高可用性和数据冗余策略,确保数据的安全性和一致性。以下是详细步骤,适用于MySQL 5.0版本: 1. **创建备份账户**: 在主服务器A上,我们需要创建一个用于复制的...

    Debian系统下MySQL主从同步复制

    在Debian系统中实现MySQL主从同步复制是一种常见的数据库高可用性和负载均衡策略。这种技术可以确保数据的安全性并提高系统的整体性能。接下来,我们将详细介绍如何在Debian环境下配置MySQL的主从同步复制。 #### 1...

    mysql主从同步及canal配置详解.docx

    binlog 是 MySQL 的一种二进制日志文件,它记录了 MySQL 服务器上的所有操作,包括增删改查等。binlog 的格式可以是 Statement、Row 或 Mixed, Statement 格式记录的是 SQL 语句,Row 格式记录的是行级别的操作,...

    Mysql主从半同步配置

    MySQL主从半同步复制是介于异步复制和全同步复制之间的一种模式,它提供了更好的数据安全性和一致性,同时也尽可能地减少了性能损失。 首先,我们来了解一下什么是MySQL半同步复制。在半同步复制模式下,主服务器在...

    mysql主从同步+MyCat读写分离+分库分表+Haproxy高可用+Keepalived心跳机制+虚拟IP.rar

    MySQL主从同步是一种数据库复制技术,它允许一个MySQL服务器(主服务器)的数据被实时地复制到其他服务器(从服务器)上。这种同步可以确保数据的一致性,并在主服务器出现问题时提供故障转移的能力。实现主从同步的...

    Mysql主从同步备份

    ### MySQL主从同步备份 #### 一、MySQL主从同步的作用与原理 ##### 作用 MySQL主从同步机制主要用于实现以下几种应用场景: 1. **数据分布**:通过将数据复制到多个从服务器,可以在不同地理位置分发数据,提高...

    Linux下MySQL主从同步复制

    【Linux下MySQL主从同步复制】是MySQL数据库在分布式环境中实现数据备份和高可用性的一种常见策略。在Linux操作系统上,这一过程涉及到一系列步骤,包括安装MySQL服务、配置主从服务器、设置复制参数以及验证复制...

    MySQL主从安装部署

    MySQL 主从复制是一种常见的数据备份和负载均衡技术,在多个服务器之间同步数据。通过设置一个或多个从服务器来复制主服务器上的数据变更操作,从而实现数据冗余和故障转移。主从复制不仅可以提高系统的可用性和容错...

    win系统下的mysql主从同步配置

    MySQL主从同步是数据库架构中常见的一种高可用性解决方案。它可以实现数据的实时备份,分担主库读写操作压力,并提供数据的热备份。在Windows操作系统下配置MySQL主从同步涉及多个步骤,以下将详细解读配置的原理、...

    mysql主从同步配置.docx

    MySQL 主从同步是一种常见的数据库高可用性和负载均衡解决方案,它允许数据从一个主数据库(Master)实时复制到一个或多个从数据库(Slave)。在这种配置下,所有写操作都在主库上执行,然后由从库自动并异步地复制...

    Mysql主从同步(1) - 概念和原理介绍 以及 主从_主主模式 部署记录 - 散尽浮华 - 博客园1

    MySQL主从同步是一种数据库复制技术,它允许数据从一个服务器(主服务器)实时地复制到一个或多个其他服务器(从服务器)。这一特性对于构建高可用性、负载均衡和数据安全的系统至关重要。以下是对MySQL主从同步的...

    如何实现MySQL的主从复制和半同步复制

    MySQL半同步复制(Semi-Synchronous Replication)是一种增强主从复制一致性的方法,它确保在主服务器上的事务提交之前,至少有一个从服务器接收到并应用了该事务的日志。 1. **半同步插件**:MySQL提供了一个名为`...

Global site tag (gtag.js) - Google Analytics