10.4 复制拓扑
可以在任意个主库和备库之间建立复制,只有一个限制,每一个备库只能有一个主库。
有很多负载的拓扑结构,但即使是最简单的也可能会非常灵活。一种拓扑可以有多重用途。
1.一个Mysql 备库实例只能有一个主库
2.每个备库必须有一个唯一的server-id
3.一个主库可以有多个备库(或者相应的,一个备库可以有多个兄弟备库)
4.如果打开了log_slave_updates选项,一个备库可以把其主库的数据变化传播到其他备库。
10.4.1 一主库多备库
除了我们已经提过的两台服务器的主备结构外,这是最简单的拓扑结构。事实上一主多备的结构和基本配置
都差不多简答n,因为备库之间根本没有交互,它们仅仅是连接到同一个主库上。
在有少量写和大量读时,这种配置是非常有用的。可以把读分摊到多个备库上,直到备库给主库造成了太大的负担
或者主备之间的带宽称为瓶颈为止。你可以按照之前介绍的方法一次性设置多个备库,或者根据需要增加备库。
注意:从技术上讲并非争取的,但如果有重复的server-id,它们将陷入竞争,并反复将对方从主库上踢出。
尽管这是非常简单的拓扑结构,但它非常灵活,能满足多种需求。 下面是它的一些用途:
1.为不同的角色使用不同的备库(例如添加不同的索引或使用不同的存储引擎)
2.把一台备库当作待用的主库,出了复制没有其他数据传输。
3.将一台备库放到远程数据中心,用作灾难恢复。
4. 延迟一个或多个备库,以备库灾难恢复。
5.使用其中一个备库,作为备份,培训,开发或者测试使用服务器。
10.4.2 主动--主动模式下的主--主复制
主--主复制(也叫双主复制或双向复制) 包含两台服务器,每一个都被配置成对方的主库和备库。换句话说他们是一堆主
库
这种模式不考虑,不安全
10.4.3 主动---被动模式下的主--主复制
这时前面描述的主--主结构的变体,它能够避免我们之前讨论的问题。这也是构建容错性和高可用性系统的非常强大的
方式,主要区别在于其中的一台服务器是只读的被动服务器。
这种方式使得反复切换主动和被动服务器非常方便,因为服务器是配置是对称的。这使得故障转移和故障恢复很容易。
它也可以让你在不关闭服务器的情况下执行维护,优化表,升级操作系统。
例如alter table 操作可能胡锁住整个表,阻塞对表的读和写,这可能会花费很长时间并导致服务中断。
然而在主--主配置下,可以先停止主动服务器上的备库复制线程(这样就不会在被动服务器上执行任何更新),
然后在被动服务器上执行alster 操作,交换角色,最后在先前的主动服务器上启动复制线程。
这个服务器会读取中继日志并执行相同的ALTER语句,这可能会花费很长的时间,但不要紧,因为该服务器没有为任何活动
查询提供服务。
配置:
1.确保两台服务器上有相同的数据
2.启用二进制日志,选择唯一的服务器ID,并创建复制账号
3.启动备库更新的日志记录
4.把被动服务器配置为只读,访问可能与主动服务器上的更新产生冲突