作家
登录

MySQL主从复制的常用拓扑结构

作者: 来源: 2017-10-11 16:41:10 阅读 我要评论


复制的体系构造有以下一些基来源基本则:

(1) 每个slave只能有一个master;

(2) 每个slave只能有一个独一的办事器ID;

(3) 每个master可以有很多slave;

(4) 如不雅你设置log_slave_updates,slave可所以其它slave的master,大年夜而扩散master的更新。

MySQL不支撑多主办事器复制(Multimaster Replication)——即一个slave可以有多个master。然则,经由过程一些简单的组合,我们却可以建立灵活而强大年夜的复制体系构造。

1.1、单一master和多slave

由一个master和一个slave构成复制体系是最简单的情况。Slave之间并不互相通信,只能与master进行通信。

在实际应用处景中,MySQL复制90%以上都是一个Master复制到一个或者多个Slave的架构模式,重要用于读压力比较大年夜的应用的数据库端便沂攀扩大解决筹划。因为只要Master和Slave的压力不是太大年夜(尤其是Slave端压力)的话,异步复制的延时一般都很少很少。尤其是自负年夜Slave端的复制方法改成两个线程处理之后,更是减小了Slave端的延时问题。而带来的效益是,对于数据及时性请求不是特别Critical的应用,只须要经由过程便宜的pcserver来扩大Slave的数量,将读压力分散到多台Slave的机械膳绫擎,即可经由过程分散单台数据库办事器的读压力来解决数据库端的读机能瓶颈,毕竟在大年夜多半数据库应用体系中的读压力照样要比写压力大年夜很多。这在很大年夜程度上解决了今朝很多中小型网站的数据库压力瓶颈问题,甚职苄些大年夜型网站也在应用类似筹划解决数据库瓶颈。

实际上,MySQL并不支撑其它一些DBMS支撑的多主办事器复制(Multimaster Replication),这是MySQL的复制功能很大年夜的一个限制(多主办事器的可贵在于解决更新冲突),然则,如不雅你实袈溱有这种需求,你可以采取MySQL Cluster,以及将Cluster和Replication结合起来,可以建立强大年夜的高机能的数据库平台。然则,可以经由过程其它一些方法来模仿这种多主办事器的复制。

如不雅写操作较少,而读操作很时,可以采取这种构造。你可以将读操作分布到其它的slave,大年夜而减小master的压力。然则,当slave增长到必定命量时,slave对master的负载以及收集带宽都邑成为一个严重的问题。

这种构造固然简单,然则,它却异常灵活,足够知足大年夜多半应用需求。一些建议:

(1) 不合的slave扮演不合的感化(例如应用不合的索引,或者不合的存储引擎);

(3) 用一个长途的slave,用于灾害恢复;

大年夜家应当都比较清跋扈,年腋荷琐Master节点可以复制出多个Slave节点,可能有人会想,那一个Slave节点是否可以大年夜多个Master节点膳绫擎进行复制呢?至少在今朝来看,MySQL是做不到的,今后是否会支撑就不清跋扈了。

MySQL不支撑一个Slave节点大年夜多个Master节点来进行复制的架构,主如果为了避免冲突的问题,防止多个数据源之间的数据出现冲突,而造成最后数据的不一致性。不过据说已经有人开辟了相干的patch,让MySQL支撑一个Slave节点大年夜多个Master结点作为数据源来进行复制,这也恰是MySQL开源的性质所带来的好处。

1.2、主动模式的Master-Master(Master-Master in Active-Active Mode)

Master-Master复制的两台办事器,既是master,又是另一台办事器的slave。如许,任何一方所做的变革,都邑经由过程复制应用到别的一方的数据库中。

可能有些读者同伙会有一个担心,如许搭建复制情况之后,难道不会造成两台MySQL之间的轮回复制么?实际上MySQL本身早就想到了这一点,所以在MySQL的BinaryLog中记录了当前MySQL的server-id,并且这个参数也是我们搭建MySQLReplication的时刻必须明白指定,并且Master和Slave的server-id参数值比须要不一致才能使MySQLReplication搭建成功。一旦有了server-id的值之后,MySQL就很轻易断定某个变革是大年夜哪一个MySQLServer最初产生的,所以就很轻易避免出现轮回复制的情况。并且,如不雅我们不打开记录Slave的BinaryLog的选项(--log-slave-update)的时刻,MySQL根本就不会记录复制过程中的变革到BinaryLog中,就更不消担心可能会出现轮回复制的情况了。

如图:

主动的Master-Master复制有一些特别的用处。例如,地舆上分布的两个部分都须要本身的可写的数据副本。这种构造最大年夜的问题就是更新冲突。假设一个表只有一行(一列)的数据,其值为1,如不雅两个办事器分别同时履行如下语句:

在第一个办事器上履行:

  1. mysql> UPDATE tbl SET col=col + 1; 

(2) 用一个slave作为备用master,只进行复制;

在第二个办事器上履行:

  1. mysql> UPDATE tbl SET col=col * 2; 

和Master-Slaves-Slaves架构比拟,差别仅仅只是将第一级Slave集群换成了一台零丁的Master,作为备用Master,然后再大年夜这个备用的Master进行复制到一个Slave集群。

那么结不雅是若干呢?一台办事器是4,另一个办事器是3,然则,这并不会产生缺点。

1.3、主动-被动模式的Master-Master(Master-Master in Active-Passive Mode)

这是master-master构造变更而来的,它避免了M-M的缺点,实际上,这是一种具有容错和高可用性的体系。它的不合点在于个一一个办事只能进行只读操作。如图:


  推荐阅读

  揭秘:黑客究竟对你的「被盗数据」做了什么?

今朝,身份偷盗可谓是收集罪犯分子的金矿——2016年词攀类犯法案件达到了汗青最高点,由身份讹诈和盗用造成的损掉高达160亿美元。大年夜多半人已经意识到,因为以前几年信息泄漏>>>详细阅读


本文标题:MySQL主从复制的常用拓扑结构

地址:http://www.17bianji.com/lsqh/37809.html

关键词: 探索发现

乐购科技部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与乐购科技进行文章共享合作。

网友点评
自媒体专栏

评论

热度

精彩导读
栏目ID=71的表不存在(操作类型=0)