1、概述

MySQL是一个非常好的开源数据库,它的历史最早可以追溯到1979年,详细历史就不在这里介绍了。自从越来越多的行业客户用上MySQL来跑生产,MySQL高可用的问题就凸显出来的,在传统商业数据库解决方案中,Informix的HDR、IBM Db2的HADR、Oracle的Dataguard都能保证有一个物理上数据分布相同的热备的功能,而MySQL却没有这种解决方案。 但是MySQL的开放性给出了无限的可能性。

2、市面上常用的解决方案

2.1 官方的异步与半同步方案

2.1.1 异步复制方案

A transaction received by the master is executed, written to the binary log, then committed, and a response is sent to the client application. The record from the binary log is sent to the relay logs on Slave 1 and Slave 2 before the commit takes place on the master. On each of the slaves, the transaction is applied, written to the slave's binary log, and committed. The commit on the master and the commits on the slaves are all independent and asynchronous.

官方的解决方案最大的优点就是结构简单、方便搭建;缺点很明显,同步的时候丢数据的概率非常高,如果在同步的时候主库挂掉,没办法保证备库的一致性。单个事务的同步如下图所示:

2.1.2 半同步复制方案

A transaction received by the master is executed and written to the binary log. The record from the binary log is sent to the relay logs on Slave 1 and Slave 2. The master then waits for an acknowledgement from the slaves. When both of the slaves have returned the acknowledgement, the master commits the transaction, and a response is sent to the client application. After each slave has returned its acknowlegement, it applies the transaction, writes it to the binary log, and commits it. The commit on the master depends on the acknowledgement from the slaves, but the commits on the slaves are independent from each other and from the commit on the master.

针对以上缺点,官方又推出了一个半同步的方案,进一步降低的同步过程中丢数据的概率,但是在某些情况下仍然存在丢数据的可能性。如下图所示: 

2.2 MySQL集群方案

MySQL Cluster 由一组计算机构成,每台计算机上均运行着多种进程,包括 MySQL 服务器,NDB Cluster的数据节点,管理服务器,以及专用的数据访问程序。 由于MySQL Cluster架构复杂,部署费时(通常需要DBA几个小时的时间才能完成搭建),而依靠 MySQL Cluster Manager 只需一个命令即可完成,但 MySQL Cluster Manager 是收费的。并且业内资深人士认为NDB 不适合大多数业务场景,而且有安全问题。因此,使用的人数较少。

MySQL Cluster

2.3 MySQL+DRBD方案

DRBD是应用级别的磁盘IO同步工具,Linux新版本内核提供了一个钩子,每一次IO都通知到DRBD,然后DRBD将该IO同步至备机,并且返回ACK,主机才会认为该IO操作完成。所以MySQL+DRBD的方案优点就是数据可以保证完全的一致,缺点则是牺牲了MySQL的扩展性以及极大的降低了磁盘IO的性能。

MySQL+DRBD

2.4 Mariadb Galera Cluster方案

Mariadb是MySQL的一个变种,由原MySQL之父主导的项目。官方介绍这种方案是完全的同步复制多主方案,好处就是能够完全保证数据的一致性,坏处就是整个集群的性能受限于性能最差的节点。同时该解决方案在国内还较少,支持力度有限。

galera_small

3、总结和思考

MySQL的无法提供一个适合所有场景的高可用方案,需要结合不同的应用场景和应用习惯来选择合适的高可用方案。

针对强一致性而又需要保留一定扩展性的应用场景,暂时还没找到合适的高可用解决方案。

参考资料

发表评论