ref 爱唯 https://edu.aliyun.com/course/48/learn?spm=5176.8764728.0.0.Xipb9L#lesson/698
主从复制解决方案如下
1 廉价与成熟的方案
MySQL自身提供的一种高可用解决方案,数据同步方法采用MySQL replication技术(binlog 就是从服务器到主服务器上拉取二进制日志文件,然后将日志文件解析成相应的sql在从库执行)
一般replication需要配合高可用的集群软件keepalived来实现failover,这种方式可以实现95% SLA 架构如下图:
db1负责读写,而db2只负责从db1上同步数据。当db1出现故障,keepalived检测到后将vip
漂移到db2(客户端连接到keepalived上的vip),db2提供读写功能,db1修复完成后,将db2同步到db1,并切换角色。keepalived是检测和转换的关键。
同一时间只有一个主库运行,主从复制通过binlog和网络进行,sla较低。
2 MMM/MHA 高可用解决方案
通过一个套件来实现,MMM提供了MySQL主主复制配置的监控,故障转移和管理的一套可伸缩的脚本套件。该架构典型应用是双主多从架构,通过replication技术可以实现两个服务器互为主从,且在任何时候只有一个节点可以写入,避免多点写入的数据冲突。同时当可写的主节点发生故障时,MMM套件可以立刻监控到,然后将服务自动切换到另一个主节点,继续提供服务。从而实现MySQL高可用。
当m1出现故障,则monitor隔离m1并将可写的地址切换到m2上。当m2出现故障,则将可读服务停掉,不让m2提供服务了。monitor核心是记录主从复制位置,可以交给这个套件去处理主从同步问题。该套件需要基于读写分离。
3 Heartbeat/SAN 高可用解决方案
原始和传统实现方案通过heartbeat和一个共享存储来实现。 sla 99.9990%
heartbeat检测服务状态,当主db出现故障,则卸载磁盘,让备db挂载磁盘。但是有可能,主db还未卸载磁盘,备db就挂载了磁盘,就会造成脑裂问题。(可通过另一个套件,可控制服务器开关机来强制只有一个服务器挂载磁盘)
4 Hearbeat/DRBD 高可用解决方案
此方案处理failover的方式依然采用heartbeat,不同的是,在数据共享方面,采用了基于块级别的数据同步软件DRBD来实现。(数据有2份)
DRBD是一个用软件实现的,无共享的,服务器之间镜像块设备内容存储复制解决方案,和SAN网络不同,它不共享存储,而是通过服务器之间的网络复制数据。
主db出现故障时,heartbeat将集群资源切换(1,将vip切换到mysql备.2将主磁盘卸载并挂载磁盘2)磁盘1卸载(或禁用写操作),然后挂载磁盘2成为主,heartbeat有调用DRBD的脚本。
注意,备机是不具备读写功能。同一时间只有一个磁盘读写。作者后期可能要实现备机读写操作,实现真正的mysql双读操作,负载均衡架构
---------------------------------------------推荐架构-----------------------------------------
as-- web前端
其中 dbm157和158是Mysql的主,其中做了主热备。通过drbd实现
主db后是从db 159,160,161.当157出现故障,则drbd切换到158,并且从db的replication指向158
读的vip 通过lvs负载均衡实现读,并且lvs也做了一个主/备
左边是写的高可用drbd,右边是读的负载均衡lvs。