1、概述
MySQL是一个非常好的开源数据库,它的历史最早可以追溯到1979年,详细历史就不在这里介绍了。自从越来越多的行业客户用上MySQL来跑生产,MySQL高可用的问题就凸显出来的,在传统商业数据库解决方案中,Informix的HDR、IBM Db2的HADR、Oracle的Dataguard都能保证有一个物理上数据分布相同的热备的功能,而MySQL却没有这种解决方案。 但是MySQL的开放性给出了无限的可能性。
2、市面上常用的解决方案
2.1 官方的异步与半同步方案
2.1.1 异步复制方案
官方的解决方案最大的优点就是结构简单、方便搭建;缺点很明显,同步的时候丢数据的概率非常高,如果在同步的时候主库挂掉,没办法保证备库的一致性。单个事务的同步如下图所示:
2.1.2 半同步复制方案
针对以上缺点,官方又推出了一个半同步的方案,进一步降低的同步过程中丢数据的概率,但是在某些情况下仍然存在丢数据的可能性。如下图所示:
2.2 MySQL集群方案
MySQL Cluster 由一组计算机构成,每台计算机上均运行着多种进程,包括 MySQL 服务器,NDB Cluster的数据节点,管理服务器,以及专用的数据访问程序。 由于MySQL Cluster架构复杂,部署费时(通常需要DBA几个小时的时间才能完成搭建),而依靠 MySQL Cluster Manager 只需一个命令即可完成,但 MySQL Cluster Manager 是收费的。并且业内资深人士认为NDB 不适合大多数业务场景,而且有安全问题。因此,使用的人数较少。
2.3 MySQL+DRBD方案
DRBD是应用级别的磁盘IO同步工具,Linux新版本内核提供了一个钩子,每一次IO都通知到DRBD,然后DRBD将该IO同步至备机,并且返回ACK,主机才会认为该IO操作完成。所以MySQL+DRBD的方案优点就是数据可以保证完全的一致,缺点则是牺牲了MySQL的扩展性以及极大的降低了磁盘IO的性能。
2.4 Mariadb Galera Cluster方案
Mariadb是MySQL的一个变种,由原MySQL之父主导的项目。官方介绍这种方案是完全的同步复制多主方案,好处就是能够完全保证数据的一致性,坏处就是整个集群的性能受限于性能最差的节点。同时该解决方案在国内还较少,支持力度有限。
3、总结和思考
MySQL的无法提供一个适合所有场景的高可用方案,需要结合不同的应用场景和应用习惯来选择合适的高可用方案。
针对强一致性而又需要保留一定扩展性的应用场景,暂时还没找到合适的高可用解决方案。
参考资料
Primary-Secondary Replication
What is MariaDB Galera Cluster
领取专属 10元无门槛券
私享最新 技术干货