分享

高性能mysql(基于复制架构)(多图)_mysql_电脑编程网

 MyShow.Li 2011-03-11

高性能mysql(基于复制架构)(多图)

作者:zhaohang1983 和mysql相关

简介:这是高性能mysql(基于复制架构)(多图)的详细页面,介绍了和mysql,有关的知识、技巧、经验,和一些mysql源码等。

 

Mysql复制架构

20090810 by chaohang

 

这是mysql 主从复制最基本的原理图,左边是主 master ,右边是从 slave, 从图中可以清晰看到 mysql 的复制进程, master 产生二进制日志 binlog, 输出到 binlog 文件,然后 slave 主机请求日志文件, master 主机发送二进制到 slave 主机,二进制到 slave 后,写入中继日志, realylog ,然后 slave 主机调用 sql 进程读取中继日志内容,写入到数据库,从而维持服务器的数据同步。


 

和上面不同的是,这个架构是一个三级架构,三台mysql 服务器组成一个链式复制架构

,从左至右的master--slave--slave, 前面两个,即 master--slave 和第一个图一样,没什么可说的,唯一的小变化是中间的 slave 主机也开启了二进制日志,他把从 master 上更新到的信息写入自身的 logbin 中,这样的目的可以从图中看到,为后面的 slave 主机提供二进制日志 , 此时这台 slave 主机其实充当了 master 主机的作用。

   

  

这个图中说明了mysql 二进制日志的过滤,除非你想同步所有的数据库 ( 包括 mysql 数据库,这会造成不必要的麻烦 ) ,二进制的日志过滤主要取决于 master 主机的设置 binlog_do_db 和 binlog_ignore_db, 他们决定了什么数据会记录到二进制日志中,并传送到 slave 主机 , 而 slave 主机也可以通过配置一些选项决定怎么利用这些数据 , 如 replicate_do_db,replicate_do_table 等

 

这个是一主多从的复制架构,实际应用也很多, 可以用 master 来充当更新服务器,其他的几台 slave 充当只读服务器,在一定程度上分担了数据库流 量 , 一定确保只在 master 上更新数据。

这个一个主主复制的架构,两台master 互为主从,更新和读取操作可以同时在两台上进行

这是一个反例,这种复制是不被允许的,一台slave 不可能同时接受两台 master 的数据。

这个则是在主主复制架构上的一个扩展,每台master 下面还有一层 slave 结构

  这个其实也是主主复制结构的扩展(我的个人理解)只是master 的结构组成了一个环状结构

  

这个也就容易理解,在环状结构的基础上又延伸出slave 层。

这个图不太好理解,因为中间涉及到一个blackhole (黑洞)存储引擎, blackhole其实就相当于 linux系统中的/dev/null

主要意思就是一主N从的结构,这里这个N可能会有很多,几十台,百台,那这样master主机就会为每台slave主机分配出一个binlog dump进程,这样的话会严重影响master的性能,这样可以考虑在主从之间添加一个分布式master,配置blackhole存储引擎,他起到一个 中继的作用,他接收数据但丢其他而不是存储,只是会把master的二进制日志供下层的slave来读取。


这里摘录一段别人的解释:

 

把blackhole引擎,用做slave,配置一些过滤规则,比如复制某些表、不复制某些表。然后也作为一个master,带多个slave。这样的好 处是省了一定的网络带宽,如果没有blackhole做中间环节,那么就需要把第一个master的所有日志都传递到各个slave上去。经过 blackhole这一个slave兼master过滤后再传递给多个slave,减少了带宽占用。而使用blackhole引擎的原因是它不占硬盘空 间,作为一个中转,只负责记日志、传日志。

 

BLACKHOLE 存储引擎就像  “  黑洞  ”  一样,它接收数据但丢弃它而不是存储它。查询总是返回空集。

mysql> CREATE TABLE test(i INT, c CHAR(10)) ENGINE = BLACKHOLE;

Query OK, 0 rows affected (0.01 sec)

mysql> INSERT INTO test VALUES(1,'record one'),(2,'record two');

Query OK, 2 rows affected (0.00 sec)

Records: 2 Duplicates: 0 Warnings: 0

mysql> SELECT * FROM test;

Empty set (0.00 sec)

虽然 BLACKHOLE  表不存储任何数据,但是如果开启二进制日志  ( Binary Log ),SQL  语句将被写入 日志,反之  SQL  语句会 被过滤掉。

BLACKHOLE 表的其他用途:

    *  通 过对比开启和关闭二进制日志  ( Binary Log )  时  BLACKHOLE  的性能,来计算二进制日志记录的开销。
    *  BLACKHOLE 本质上是一个  “ no-op ”  存储引擎,它可能被用来查找与存储引擎自身不相关的性能瓶颈

下面这两张图也是跟blackhole 存储相关,等慢慢研究 blackhole 后再细细研究

最后这种情况大致的意思,有三台mysql server,1,2和3,3做为复制从服务器,想同时复制1上的DB1和2上的DB2,这样可以在2上引进一个blackhole的DB1来解决问题.

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多