MySQL高可用解决方案包括主从复制、InnoDBReplicaSet、组复制、InnoDBCluster、InnoDBClusterSet、使用共享存储/虚拟化技术的主备服务器和NDBCluster。
这些方案按照高可用排序依次为主从复制、InnoDBReplicaSet、使用共享存储/虚拟化技术的主备服务器、组复制、InnoDBCluster、InnoDBClusterSet和NDBCluster。每种方案均可以满足一定级别的高可用要求。具体对应的高可用级别如图所示。
一、主从复制:
(一)概念:
主从复制是指将来自一台MySQL数据库服务器(主服务器)的数据,复制到一台或多台MySQL数据库服务器(从服务器)。
默认情况下,复制采用异步方式,MySQL还提供半同步复制和增强半同步复制。复制配置成功后,从服务器无须与主服务器一直保持连接,只要从服务器连接到主服务器即可从主服务器接收更新。
根据配置的不同,用户可以复制数据库中的全部数据库(模式)或者是选定的数据库(模式),甚至是选定的表。图2-2是MySQL主从复制的示意图。如图所示。
(二)优点:
1.横向扩展解决方案:在多个从服务器之间分散工作负载以提高性能。所有写入和更新都必须在主服务器上进行,但读取可能发生在一个或多个从服务器上。该方案可以提高写入性能(因为主服务器专用于更新),并且伴随着从服务器的增加,可以显著提高读取速度。
2.数据安全性:从服务器可以暂停复制过程,因此,用户可以在从服务器上运行备份,而不会破坏相应的源数据。
3.分析:用户可以在主服务器上创建实时数据,数据分析可以在从服务器上进行,它不会影响主服务器的性能。
4.远程数据分发:用户可以使用复制来创建数据的本地副本,以供远程站点使用,远程站点无须持续访问主服务器。
5.延迟复制:MySQL支持延迟复制,从服务器可以延迟执行从主服务器接收的事务。该功能有助于在主服务器出现误操作的情况下进行快速回退。
二、组复制:
(一)概念:
组复制是一个MySQL服务器插件,可以创建具有弹性、高可用性和容错的复制拓扑。组复制基于Paxos协议(Mencius)实现,支持多点写入,具有冲突检测和解决机制,它允许应用程序写入的数据在同一组内的所有服务器上保持一致。
组复制内置的模块支持跨平台的分布式恢复,并通过内置的故障转移机制实现容错。组复制是一种非共享复制模式,每台服务器都有完整的数据副本。
(二)优点:
组复制允许用户从现有的主从复制升级到组复制,可以确保一个高可用的MySQL服务分布在多个实例中,无须人工干预来实现容错。
1.组复制可以自动伸缩:组复制内置了一个组成员资格服务,可以使组成员的视图在任意时间对任何服务器保持一致。当服务器离开或加入该组时,视图将相应更新。因此,当对组进行扩大或缩小时,组复制可以对成员进行自动管理。
2.多点更新:组复制在多主模式下,所有服务器都可以同时接收数据更新,对数据冲突进行检测,以确保数据的一致性。当系统的写入负载过大时,可以通过组复制的多主模式分散写入负载。
3.自动容错:组复制的单主模式与传统的主从复制类似,拓扑具有一个主要成员和多个次要成员。主要成员提供数据的写入和读取,次要成员仅提供数据的读取。
当主要成员发生故障时,组复制内置的成员资格服务将会自动选举新的主要成员,使系统继续提供服务,从而实现数据库自动容错。
三、InnoDBCluster:
(一)概念:
InnoDBCluster是一套完整部署和管理MySQL的高可用解决方案,它整合了MySQL的多项技术,以弥补组复制无法提供具有自动化故障转移功能的中间件、无法自动配置等不足。InnoDBCluster至少需要由三个MySQL服务器实例组成,并且提供高可用性和扩展功能。
四、InnoDBReplicaSe:
(一)概念:
InnoDBReplicaSet整合了MySQL相关技术,用户能够通过MySQLShell部署和管理主从复制。nnoDBReplicaSet至少由两个MySQL服务器实例组成,并提供用户熟知的主从复制功能,例如读取横向扩展和数据安全性。
五、InnoDBClusterSet:
(一)概念:
InnoDBClusterSet通过将主要的InnoDBCluster与其他位置(例如,不同数据中心)的一个或多个副本连接,为InnoDBCluster部署提供容灾能力。InnoDBClusterSet使用专门的ClusterSet复制通道,自动管理从主要集群到副本集群的复制。如果主要集群因数据中心损毁或网络连接丢失而变得无法使用,则用户可以激活副本集群以恢复服务的可用性。
六、NDBCluster:
(一)概念:
MySQL的NDBCluster与通常人们所熟知的MySQL相比较,无论是架构设计还是应用场景都不相同,是一款独立的产品。
NDBCluster是一个使用非共享存储的内存型数据库。非共享的架构使得系统可以利用便宜的硬件,并能够降低对硬件或软件的特定要求。
NDBCluster的设计能够保证系统不受任何单点故障的影响。在非共享系统中,每个组件都具有自己的内存和磁盘,并且不建议或不支持使用共享存储机制,例如网络共享、网络文件系统或SAN。
NDBCluster使用MySQL服务器的NDB(NetworkDatabase)存储引擎。在本书里,NDB指的是安装程序中特定于存储引擎的部分,而NDBCluster指的是一台或多台MySQL服务器与NDB存储引擎的组合。
摘自《MySQL高可用解决方案――从主从复制到InnoDBCluster架构》第二章徐轶韬著
本书特点:
本书对MySQL官方提供的高可用解决方案逐一进行介绍,详细阐述每种方案的原理、架构、优缺点以及适用场景,并配合演示说明,能够帮助读者快速理解相关内容。区别于市面上其他MySQL相关图书,本书专注于MySQL官方团队提供的解决方案。此外,本书还介绍了MySQL8.0的部分内容,使读者能够更加全面地了解MySQL的生态和工具。
本书适合:
MySQL初学者;
数据库架构师;
DBA(DatabaseAdministrator数据库管理员);
相关软件开发人员;
组织内部IT负责人。