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.选择性复制
使用访问局部性原理,并将需要读的工作集驻留在内存中,可以复制少量数据到备库中。如果每个备库中只拥有主库的一部分数据,并且将读分配给备库,就可以很好的利用备库的内存。并且每个备库也只有主库一部分的写入负载,这样主库的能力更强并能保证备库时延。
优势:主库包含了所有的数据集,意味着无须为了一条写入查询去访问多个服务器。如果读操作无法在备库上找到数据集,这意味着无须为了一条写入查询去访问多个服务器。如果读操作无法再备份数据集上找到数据,那么还可以通过主库来查询。即使不能从备库上读取所有数,也可以移除大量的主库读负担(分担了主库的读压力)