首先聊聊MySQL的数据分布式,目前最为常用的就是Replication(复制)技术。基于此技术外延开来有很多中架构,分类归结为如下:

     1、树状结构(Master,Backup-Master,Slaves)
        
        这种结构是目前Web系统用的最为通用的一种。整个系统有1个写入/更新点,即Master;Master-Backup和Slaves都是Replication的Master从库;多级Slave的原因是为了数据过滤和节省网络资源。
     2、环状结构(Master-Master,Slaves)
        
        Dual-Master结构是为了提高写吞吐而提出的,通过提高由原来一台MySQL Master服务器提供写/更新的
单点提高到2个点,从框架结构上来说就能看出此方法的提升。
        Dual-Master需要解决的问题:
        a)ID冲突问题,即对数据库中唯一ID资源的分配必须是一个统一的地方发出。
           解决办法有MySQL自带的auto_increment_increment和auto_increment_offset来实现,通过N个Master来设置auto_increment_offset=N,每一台Master上的auto_increment_increment采用1~N中的任意值,但是不能互相重复。如此一来即可。
           id-server: 1
           auto_increment_increment=1
           auto_increment_offset=2
           id-server: 2
           auto_increment_increment=2
           auto_increment_offset=2
           针对id-server1来说,id都是1,3,5这样;id-server2来说,id都是2,4,6这样。如此看似很美好,其实不然。在并发情况下,id-server1上相同的表和在id-server2上的表auto_increment值是不同的,但是又需要相互同步,也就是说如果写入分布不均的情况,就可能存在表中id会是1,3,5,7,8,9,11,etc这样的情况,id资源中间空洞太多。
           还有一种解决办法是一个独立的ID发号器。实现ID发号器的办法很多,为了让维护更加的纯粹,我们使用一个MySQL的一张表,Master-slave这种结构的来作为一个发号器server。这样一来流程就变成了先去id发号器服务器获取id,再写入Dual-Master中去。多了一个中间环节,而且此中间环节还是个单点,存在风险。但是思路基本这样,可以通过别的服务,基于一定分布式规则的来并行发号器。
        b)更新冲突的问题,一条范围的update语句被两台Master server都给执行了,这个时候数据就和最初设想的不一致了。
        c)死锁问题,这个在N(N>=3)个以上的环路Master中,出现异常断开后的服务器的binlog,在极端情况下会被恢复后的N-1个环路中的数据server反复执行。
    为了解决Multi-Master中的更新冲突和死锁问题,我的办法是多点Insert,但是只有一个点update这样的结构来解决以上b和c的问题。
        
    以上已经将Replication的常用的两种数据分布架构介绍清楚,下来看看另外一种,即MySQL Cluster。MySQL Cluster在一段时间内,我都认为它是相当的鸡肋,生产环境使用它的几乎没有。因为它在跨IDC和数据存储等资源消耗巨大。
    MySQL Cluster依赖的两个核心资源就是网络带宽和内存(share nothing和高一致性)。同IDC内的网络带宽还很容易达到百兆或者更高,但是跨IDC的VPN或者专线,要达到这样的速度还是有些困难。数据全部存在内存中,这在小数据时感受不明显,但是对于爆炸式的信息增长来说未免很容易产生瓶颈。虽然新版的Cluster支持将数据写到硬盘,实际速度还有待观察。
    Replication基本能够满足可用的需求,但是MySQL的binlog是一个单线程的,这就会在数据同步方面产生瓶颈。一般的做法是通过写一个plugin,来提高并发能力;这个plugin既要满足性能,有要高可用。采用以下方式,通过将一些并行的App绑定在MySQL Cluster Queue上来执行,利用MySQL Cluster自身的高一致性,高可用的特点,存储消息。
    
 如此可以既能满足数据分布式,又能满足并行数据同步。

高可用的并行MySQL数据同步及分布式的更多相关文章

  1. MySQL性能调优与架构设计——第 18 章 高可用设计之 MySQL 监控

    第 18 章 高可用设计之 MySQL 监控 前言: 一个经过高可用可扩展设计的 MySQL 数据库集群,如果没有一个足够精细足够强大的监控系统,同样可能会让之前在高可用设计方面所做的努力功亏一篑.一 ...

  2. Mysql数据同步Elasticsearch方案总结

    Mysql数据同步Elasticsearch方案总结 https://my.oschina.net/u/4000872/blog/2252620

  3. 几篇关于MySQL数据同步到Elasticsearch的文章---第一篇:Debezium实现Mysql到Elasticsearch高效实时同步

    文章转载自: https://mp.weixin.qq.com/s?__biz=MzI2NDY1MTA3OQ==&mid=2247484358&idx=1&sn=3a78347 ...

  4. MySQL的高可用实现:MySQL系列之十四

    MySQL的高可以有三种实现方式:多主模式(Multi Master MySQL),MHA(Master High Availability)和 Galera Cluster:wresp 一.MHA ...

  5. MySQL高可用架构:mysql+keepalived实现

    系统环境及架构 #主机名 系统版本 mysql版本 ip地址 mysqlMaster <a href="https://www.linuxprobe.com/" title= ...

  6. 超详细干货!Docker+PXC+Haproxy搭建高可用强一致性的MySQL集群

    前言 干货又来了,全程无废话,可先看目录了解. MySQL搭建集群最常见的是binlog方式,但还有一种方式是强一致性的,能保证集群节点的数据一定能够同步成功,这种方式就是pxc,本篇就使用图文方式一 ...

  7. ProxySQL Cluster 高可用集群 + MySQL MGR环境部署 (多写模式) 部署记录

    文章转载自:https://blog.51cto.com/u_6215974/4937192 ProxySQL 在早期版本若需要做高可用,需要搭建两个实例,进行冗余.但两个ProxySQL实例之间的数 ...

  8. 高可用(vrrp)以及mysql主主备份部署

    高可用说起来感觉很高大上,我刚接触的时候也是一头雾水,但是需求的时候很容易理解的,当一台服务器挂了另一台能够马上顶上去继续提供服务,这就叫做高可用,需求其实不难理解,只是需要自身根据项目的实际需求还有 ...

  9. Elasticsearch和mysql数据同步(elasticsearch-jdbc)

    1.介绍 对mysql.oracle等数据库数据进行同步到ES有三种做法:一个是通过elasticsearch提供的API进行增删改查,一个就是通过中间件进行数据全量.增量的数据同步,另一个是通过收集 ...

随机推荐

  1. YQCB冲刺第二周第三天

    今天的任务依旧查看消费明细的功能. 遇到的问题为显示消费记录时显示所有用户的消费记录. 站立会议 任务面板

  2. Spring之redisyi一主一从复制(非哨兵模式)

    看了好几天redis了,公司从刚开始的redisluster变成了redis主从,原因是rediscluster不可控,其实是我水平没到,万一出点啥事,我这个负责人都解决不了,那就完了!大数据平台下, ...

  3. AIX上安装配置DB2

    在2台P550数据库主机上安装DB2 V8.2,两台数据库主机间进行数据库HA配置,实现数据库双机互备. 本文档编写以磁盘大小360G,数据库名CRAMS_JS为例. 设备准备 请系统管理员协助划分D ...

  4. HTTP 协议(2)

    一.URL HTTP 是一个基于 TCP 的应用层协议,其中 HTTP1.1 版本中支持持续的连接机制(Keep-alive),绝大多数的 WEB 开发都是基于 HTTP 的应用. HTTP 的 UR ...

  5. 『编程题全队』Alpha 阶段冲刺博客Day8

    1.每日站立式会议 1.会议照片 2.昨天已完成的工作统计 孙志威: 1.修复了看板任务框拖拽时候位置不够精确的问题 2.向个人界面下添加了工具栏 3.个人界面下添加了任务框测试 孙慧君: 1.个人任 ...

  6. 2013长春网赛1010 hdu 4768 Flyer

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4768 题意:有n个社团发传单,每个社团发给编号为A_i, A_i+C_i,A_i+2*C_i,…A_i ...

  7. EntityFramework中Json序列化的循环引用问题解决--Newtonsoft.Json

    1.在使用EF时,由于数据库主外键关联,将对象进行Json序列化时会遇到循环引用的问题 //EF 中由于数据库主外键关联,对象的序列化经常出现循环引用问题 //使用.Net 自带的序列化工具,序列化出 ...

  8. Codeforces Round #528 Div. 1 自闭记

    整天自闭. A:有各种讨论方式.我按横坐标排了下然后讨论了下纵坐标单调和不单调两种情况.写了15min也就算了,谁能告诉我printf和cout输出不一样是咋回事啊?又调了10min啊?upd:突然想 ...

  9. MT【93】二次函数衣服一件

    注:最后一行中$f(\dfrac{-x_1}{2})$应改为$f(\dfrac{-a}{2})$.有空再重新编辑.

  10. Oracle数据库--PL/SQL存储过程和函数的建立和调用

    1.存储过程建立的格式: create or replace procedure My_Procedure is begin --执行部分(函数内容); end; / 例子:(以hr表为例) crea ...