摘自High Performance MySQL
复制过程的核心是binlog
拓扑方面:
1. 一主一备最常见,可满足典型的读写分离需求
2. 一主多备也可以,但要注意备机太多可能导致主机负担过大。有个办法是主机只挂一个特殊的备机,其他备机再从这个特殊备机中同步数据(即把特殊备机当作主机),把主机的同步负担转移到特殊备机上。这个策略叫distribution master
3. 你可能会想用主主双活(Master-Master in Active-Active Mode)来同时分担读负担和写负担,即两台机分别是对方的备机,每台机都可以读和写,并互相数据同步。但这样做在数据一致性方面的问题非常多,严重不推荐。比如说,数据同步失效了,但两台机仍在提供写服务,怎么办?数据肯定不一致了。
4. 比较受推荐的模式是主主轮活(Master-Master in Active-Passive Mode),即在某一时刻总是一主一备,但必要时可以立即互换主备角色。这种模式在可用性方面(即无当机时间)很有帮助。比如,alter table可能会比较久,造成数据库不可用;但在主主轮活模式下,可以先去备机alter table, 然后切换一下角色,让原备机变成新主机提供服务,让原主机以新备机的角色同步alter table行为。这个过程中不会有down time.