复制之复制拓扑

1.一主库多备库

再有少量的写和大量的读时。这种配置可以把读分摊到多个备库上面,直到备库给主库造成了太大的负担,或者主备之间的贷款成为瓶颈为止

1)结构简单,灵活,满足多种需求,编码,见了很多其它拓扑结构的复杂性

2)把一台备库当做待用的主库,除了复制没有其他的数据传输

3)将一台备库放到远程数据中心,用作灾难恢复

4)延迟一个或者多个备库,以备灾难恢复

5)使用其中一个备库,作为备份,培训,开发或者测试使用服务器    

2.主动-主动模式下的复制-----主复制

 场景:两个出于不同地理位置的办公室,并且都需要一份可写的数据拷贝

 问题:当两个服务器同时修改一行记录时,如何解决冲突。

3.主动-被动模式下的主-主复制

与2的主要区别在于,其中的一台服务器是只读的被动服务器

配置过程:

1)确保两台服务器上有相同的数据

2)启用二进制日志,选择唯一的服务器ID,并创建复制ID

3)启用备库更新的日志记录,这是故障转移和故障恢复的关键

4)把被动服务器配置成只读,防止可能与主动服务器上的更新产生冲突,可选

5)启动每个服务器的MySQL实例

6)将每个主库设置为对方的备库,使用新创建的二进制日志开始工作

开始工作时,主服务器的更新被记录到二进制日志里面,然后通过复制传递给被动服务器的中继日志中。被动服务器执行查询并将其记录到自己的二进制日志中。

设置主动-被动的 主-主拓扑结构在某种意义上类似于创建一个热备份,但是可以使用这个备份来提高性能。例如用它来执行读操作,备份,“离线”维护以及升级等。(就是相当于拥有一个和主库一样的备库,但是可以有很多热备份没有的功能)、

4.拥有备库的主-主结构

这个就是在主-主结构的基础上,为每个主库增加一个备库

5.环形复制

环形结构可以有三个或者更多的主库。每个服务器都是在它之前的服务器的备库,是在它之后的服务器的主库。这种结构也成为环形复制

环形结构没有双主结构配置起来那么简单,也不能是对称复制。环形如果删除一个节点,那么这个节点发起的事件就会陷入无限循环,他们将永远绕着服务器链循环 。因为唯一可以服务器节点ID将其过滤的服务器节点是创建这个事件的服务器。总的来说环形结构过于脆弱,应该尽量避免

6.主库分发库以及备库

复制之复制拓扑

如果需要多个备库,一个好办法是从主库移除负载并使用分发主库,其实他的唯一目的就是提取和提供主库的二进制日志,多个备库链接到分发主库,是原有的主库摆脱了负担,为了避免在分发主库上做实际的查询,可以将他的表修改为blackhole存储引擎(BlackHole :黑洞引擎,写入的任何数据都会消失,用于记录binlog做复制的中继存储!),很难说当备库数据达到多少时需要一个分发主库,一般情况下如果主库接近满负载,不应该为其建立10个以上的备库。

其实使用分发主库还有一个好处就是,如果我们需要过滤或者对主库的二进制日志文件进行统一的处理,那么我们只需要处理一遍就好,然后分发给各个备库,这样就不需要在每台备库上进行处理了,这样就会减少计算量。

7.树或者金字塔形

复制之复制拓扑

优点:减轻了主库的负担

缺点:中间层出现的任何问题都会影响到多个服务器,如果每个备库和主库直接相连就不会存在这样的问题

8.选择性复制

使用访问局部性原理,并将需要读的工作集驻留在内存中,可以复制少量数据到备库中。如果每个备库中只拥有主库的一部分数据,并且将读分配给备库,就可以很好的利用备库的内存。并且每个备库也只有主库一部分的写入负载,这样主库的能力更强并能保证备库时延。

优势:主库包含了所有的数据集,意味着无须为了一条写入查询去访问多个服务器。如果读操作无法在备库上找到数据集,这意味着无须为了一条写入查询去访问多个服务器。如果读操作无法再备份数据集上找到数据,那么还可以通过主库来查询。即使不能从备库上读取所有数,也可以移除大量的主库读负担(分担了主库的读压力)