20.1 介绍 InnoDB 集群

MySQL InnoDB 集群为 MySQL 提供了完整的高可用性解决方案。 MySQL Shell包含 AdminAPI,可让您轻松配置和 Management 一组至少三个 MySQL 服务器实例,以充当 InnoDB 集群。每个 MySQL 服务器实例都运行 MySQL Group Replication,它提供了具有内置故障转移功能的 InnoDB 群集内复制数据的机制。 AdminAPI 消除了直接在 InnoDB 群集中使用组复制的需要,但是有关更多信息,请参见第 17 章,组复制,其中解释了详细信息。 MySQL Router可以根据您部署的群集自动进行自我配置,从而将 Client 端应用程序透明地连接到服务器实例。如果服务器实例发生意外故障,则群集将自动重新配置。在默认的单主服务器模式下,InnoDB 集群具有单个读写服务器实例-主服务器。多个辅助服务器实例是主服务器的副本。如果主服务器发生故障,则辅助服务器将自动升级为主服务器角色。 MySQL Router 会检测到此情况,并将 Client 端应用程序转发到新的主服务器。高级用户还可以将集群配置为具有多个主数据库。

Important

InnoDB 群集不提供对 MySQL NDB 群集的支持。 NDB Cluster 取决于NDB存储引擎以及特定于 NDB Cluster 的许多程序,这些程序未随 MySQL Server 5.7 提供; NDB仅作为 MySQL NDB Cluster 发行版的一部分提供。另外,MySQL Server 5.7 随附的 MySQL 服务器二进制文件(mysqld)不能与 NDB Cluster 一起使用。有关 MySQL NDB 群集的更多信息,请参见第 21 章,MySQL NDB 群集 7.5 和 NDB 群集 7.6第 21.1.6 节“使用 InnoDB 和 NDB 群集的 MySQL 服务器”,提供有关InnoDBNDB存储引擎之间差异的信息。

下图概述了这些技术如何协同工作:

图 20.1 InnoDB 集群概述

将三个 MySQL 服务器分组为一个高可用性群集。其中一台服务器是读/写主实例,其他两台是只读第二实例。组复制用于将数据从主实例复制到辅助实例。 MySQLRouter 将 Client 端应用程序(在此示例中为 MySQL 连接器)连接到主实例。 MySQL Shell 中的群集 Management 功能可以使用 MySQL X AdminAPI 直接连接到主实例,也可以像其他 Client 端应用程序一样通过 MySQL Router 连接。

Using AdminAPI

MySQL Shell 包含 AdminAPI,可通过dba全局变量及其关联方法进行访问。 dba变量的方法使您可以部署,配置和 ManagementInnoDB 集群。例如,使用dba.createCluster()方法创建一个 InnoDB 集群。

Important

MySQL Shell 使您可以通过套接字连接连接到服务器,但是 AdminAPI 需要与服务器实例的 TCP 连接。不要将基于套接字的连接与 AdminAPI 一起使用。

MySQL Shell 提供 AdminAPI 的联机帮助。要列出所有可用的dba命令,请使用dba.help()方法。有关特定方法的在线帮助,请使用常规格式object.help('methodname')。例如:

mysql-js> dba.help('getCluster')

Retrieves a cluster from the Metadata Store.

SYNTAX
  <Dba>.getCluster([name])

WHERE
  name: Parameter to specify the name of the cluster to be returned.

DESCRIPTION

If name is not specified, the default cluster will be returned.

If name is specified, and no cluster with the indicated name is found, an error
will be raised.