myql的复制拓扑
可以在任意的主库(master)和备库(slave)中建立复制,只有一个限制:一个备库(slave)只能有一个主库(master)。
一般来讲我们在设计mysql复制拓扑的时候应该符合以下几个准则:
1.一个mysql备库只能有一个主库;
2.每个备库必须要有一个唯一的服务器id;
3.一个主库可以有多个备库;
4.如果打开了log_slave_updates选项,一个备库可以把其主库上的数据变化传播到其他备库。
一主库多备库
顾名思义,也就是多个slave去复制一个主库,这种结构各个备库之间没有交互(各个slave的id必须不同),在有少量写操作大量读操作的情况下,这种配置非常有用。可以把读操作分摊到不同的备库中。
拓扑结构如下图所示:
用途如下:
1.为不同的角色使用不同的备库;
2.把一台备库当做待用的主库,除了复制没有其他数据传输;
3.将一台备库放到远程数据中心用作容灾;
4.延迟一个或多个备库,以备灾难恢复;
5.使用其中一个备库作为培训开发或者测试使用。
主动-主动模式下的主-主复制
主-主复制包含两个服务器,每个都作为对方的主库和备库。
如下图所示:
这种情况下如果两个服务器都对一个字段进行更新,容易导致数据的不同步。
主动-被动模式下的主-主复制
这个是构建容错性和高可用性系统的强大方式,主要区别在于其中的一台服务器是只读的被动服务器。如图所示:
这样可以使得反复切换主动和被动服务器非常方便,因为服务器的配置是对称的。
设置主动-被动的主-主拓扑结构在某种意义上类似于创建一个热备份,但是可以使用和这个热备份来提高性能,例如用它来执行读操作、热备份、“离线”维护。
拥有备库的主-主结构
此时我们为每个主库增加一个备库,这样就可以避免单点故障,增加了冗余。同时为了分摊压力可以把查询分配到备库上。
如下图所示:
主库、分发主库及备库
当备库的数量足够多时,会对主库造成很大的负载,比如每个备库都会在主库上开启一个线程执行binlog dump操作,并且它们不会共享binlog dump的资源。
因此,如果需要多个备库,一个较好的方法是从主库中移除负载,使用分发主库。分发主库其实也是一个备库,他的目的是提取和提供主库的二进制日志文件。把原本主库所需承担的压力分担给分发主库。
拓扑如下图所示: