高可用数据库架构
MMM 主主同步管理工具。用于监控和管理MySQL的主主复制拓扑,并在当前的主服务器失效时,进行主和主备服务器之间的主从切换和故障转移等工作。
MMM是工作在两个服务器其中一个提供服务的前提下(同一时间只有一台主服务器提供服务)。
在主库宕机时进行故障转移并自动配置其他从对新主的复制。(数据可能丢失)
提供了主,写虚拟IP,在主从服务器出现问题时可以自动迁移虚拟IP。
优点:
提供了虚拟IP,使服务器的角色变更对前端应用透明。
MMM提供了从服务器的延迟监控。
提供了对新主服务器重新同步的功能,很容易对发生故障的主数据库重新上线。
缺点:
发布时间比较早,不支持MySQL新的复制功能。
没有读负载均衡的功能。
在进行主从切换时,容易造成数据丢失。
MMM监控服务存在单点故障。
MHA 框架
当前版本的MHA提供了什么功能:
监控主数据库服务器是否可用。
当主DB不可用时,从多个从服务器中选举出新的主数据库服务器。
提供了主从切换和故障转移功能。
MHA主从切换过程:
1.尝试从出现故障的主数据库保存二进制日志。
2.从多个备选从服务器中选举出新的备选主服务器。
3.在备选主服务器和其他从服务器之间同步差异二进制数据。
4.应用从原主DB服务器上保存的二进制日志。
5.提升备选主DB为新的主DB。
6.从DB链接切换。
MHA的优点和不足
可以支持基于GTID的复制(更为安全)。
故障转移时保存的日志比较新不容易产生数据丢失。
同一个监控点可以监控多个集群。
MHA启动后只会对主数据库进行监控。
无法实现虚拟IP。
没有实现读服务器的负载均衡。
读写分离
将数据库的读操作和写操作分开。主从模型也主要是为了读写分离。
程序实现读写分离
优点:
由开发人员控制什么样的查询在从库中执行,比较灵活。
由程序直接连接数据库,所以性能损耗比较小。
缺点:
增加了开发的工作量,使程序代码更加复杂。
人为控制,容易出现错误。
中间件实现读写分离
mysql-proxy(问题有点多,读写分离加负载均衡)/maxScale(读写分离加负载均衡)
有点:
中间件根据语法分析,自动完成读写分离。
对程序透明,对已有程序不用做任何调整。
缺点:
由于增加了中间层,所以对查询效率有损耗。
对于延迟敏感的业务无法自动在主库执行。