MySQL Shell 8.4  /  MySQL InnoDB ClusterSet  /  InnoDB ClusterSet 需求

8.1 InnoDB ClusterSet 需求

InnoDB ClusterSet 部署的基础是 MySQL 8.0.27 或更高版本上的现有 InnoDB Cluster,以及可以构成副本集群以为此主集群提供灾难容错的多个独立 MySQL Server 实例。如果您想尝试 InnoDB ClusterSet,可以使用 MySQL Shell 在本地机器上设置沙箱部署。您需要安装 MySQL Server 8.0.27 或更高版本和 MySQL Router 8.0.27 或更高版本。使用 MySQL Shell 中的 AdminAPI 命令,您可以创建沙箱 MySQL Server 实例,使用其中一些实例设置 InnoDB Cluster,然后按照本节中的说明使用其他实例作为副本集群来设置 InnoDB ClusterSet 部署。有关部署和管理沙箱实例的说明,请参阅第 6.8 节“AdminAPI MySQL 沙箱”.

重要

建议您始终使用最新的 MySQL Shell、MySQL Router 和 MySQL Server 版本。最新版本的 MySQL Shell 可以与任何 GA 版本的 MySQL 8.0 或更高版本一起使用。

要设置 InnoDB ClusterSet 的生产部署,请确保已安装以下组件

软件组件

设置 InnoDB ClusterSet 部署需要 MySQL Server 8.0.27 或更高版本、MySQL Shell 8.0.27 或更高版本以及 MySQL Router 8.0.27 或更高版本。这些是 AdminAPI 所需的软件组件。请参阅第 6.2 节“安装 AdminAPI 软件组件”.

始终使用您可用的最新版本的 MySQL Shell 和 MySQL Router,并确保它们的版本与 MySQL Server 版本相同或更高。这两个产品都可以管理较旧的 MySQL Server 版本,但较旧的版本无法管理较新的 MySQL Server 版本中的功能。

InnoDB Cluster

一个要作为主集群的现有 InnoDB Cluster。这是 InnoDB ClusterSet 部署提供灾难容错的集群。Group Replication 组可以作为 InnoDB Cluster 采用。有关设置 InnoDB Cluster 或采用 Group Replication 组的说明,请参阅第 7.4 节“部署生产 InnoDB Cluster”.

要作为主集群的 InnoDB Cluster 必须满足以下要求

  • 集群不应已经是 InnoDB ClusterSet 部署的一部分。一个 InnoDB Cluster 只能参与一个 InnoDB ClusterSet 部署。

  • 集群中的所有成员服务器实例必须是 MySQL 8.0.27 或更高版本。

  • InnoDB Cluster 元数据版本必须是 2.1.0 或更高版本。当您对集群执行任何操作(例如 dba.getCluster() 命令)时,AdminAPI 会警告您集群的元数据是否需要更新。您可以通过在 MySQL Shell 8.0.27 或更高版本中发出 dba.upgradeMetadata() 命令来将元数据更新到适合 InnoDB ClusterSet 操作的版本。请注意,在您升级集群的元数据后,它将无法由较旧的 MySQL Shell 版本管理。有关详细信息,请参阅第 6.11 节“升级元数据模式”.

  • 集群必须处于单主模式。InnoDB Cluster 可以处于单主模式或多主模式,但 InnoDB ClusterSet 不支持多主模式。您可以使用 MySQL Shell 中的 cluster.switchToSinglePrimaryMode() 命令将处于多主模式的集群转换为单主模式,并选择一个实例作为主服务器。

  • 对于 MySQL Server 8.0.27 到 8.2.0 版本中的实例,对于作为 InnoDB ClusterSet 一部分的 InnoDB Cluster,group_replication_view_change_uuid 系统变量必须在集群中的所有成员服务器上设置相同的 value,以提供视图更改事件的备用 UUID。从 MySQL 8.0.27 开始,使用 dba.createCluster() 命令创建的 InnoDB Cluster 会在所有成员服务器上为系统变量生成和设置一个 value。在 MySQL 8.0.27 之前创建的 InnoDB Cluster 可能没有设置系统变量,但 InnoDB ClusterSet 创建过程会检查这一点,如果系统变量不存在,则会发出警告并失败。

    注意

    对于运行 MySQL Server 8.3.0 或更高版本的 InnoDB Cluster,不需要这样做。

    Cluster.rescan() 命令可用于在 InnoDB Cluster 中的所有成员服务器上生成和设置 group_replication_view_change_uuid 的 value。该命令会返回一个警告消息,告知您必须为系统变量设置 value,或者您可以启用选项 updateViewChangeUuid 以在扫描期间自动生成和设置 value。在您重新引导集群后,可以重试 InnoDB ClusterSet 创建过程。

  • 组外部服务器上的任何成员服务器上不应有入站复制通道。Group Replication 自动创建的通道(group_replication_appliergroup_replication_recovery)是允许的。

  • 您需要知道集群的 InnoDB Cluster 服务器配置帐户用户名和密码(请参阅第 8.3 节“InnoDB ClusterSet 用户帐户”)。这是在 InnoDB Cluster 中的成员服务器上使用 dba.configureInstance 设置的帐户。您需要在将构成副本集群的 MySQL Server 实例上创建此帐户,并使用它来设置这些实例。

    注意

    您不能使用 InnoDB Cluster 管理员帐户(使用 cluster.setupAdminAccount() 设置)来设置副本集群的独立 MySQL Server 实例。 cluster.setupAdminAccount() 在独立实例上不可用,如果您使用 dba.configureInstance 或手动在独立实例上创建此类帐户,则它随后会从主集群复制过来,导致复制停止并出现错误。

  • 在您创建 InnoDB ClusterSet 部署时,InnoDB Cluster 必须处于联机状态且运行状况良好,并且其主成员服务器必须可以使用 MySQL Shell 访问。

MySQL Server 实例

多个独立的 MySQL Server 实例,您可以将其设置为一个或多个副本集群。为实现容错,每个副本集群中至少需要三个成员服务器,但 InnoDB ClusterSet 部署可以包括由单个服务器实例组成的副本集群。在用于灾难容错的生产部署中,每个副本集群都将位于另一个位置,例如不同的数据中心。

您在副本集群中使用的每个 MySQL Server 实例都必须满足以下要求

  • 服务器不应已经是 InnoDB ClusterSet 部署、InnoDB ClusterSet 或 InnoDB ReplicaSet 的一部分。

  • 您不需要服务器上的数据。如果服务器以前用于处理事务,则将其设置为副本集群的成员时,数据将被覆盖(除非这些事务恰好是主集群上的事务的子集)。

  • 服务器不应是当前运行的 Group Replication 组的一部分(即使单个服务器已离开组)。您不能将现有的 Group Replication 组或其当前或前任成员作为副本集群采用。如果您想使用当前处于复制组中的服务器实例,请在所有组成员上发出 STOP GROUP_REPLICATION,以便该组完全脱机。然后,可以使用 AdminAPI 将单独的服务器实例设置为副本集群。

    重要

    在将以前 Group Replication 组成员用作 InnoDB ClusterSet 副本集群的成员时,请务必谨慎,尤其是当您对 Group Replication 配置选项进行了大量更改,或者当该组是在更早的版本中创建的,并且您基于该版本中的情况进行了一些配置更改时。

    InnoDB ClusterSet 副本集群创建过程会覆盖您在命令中为其指定新设置的任何现有持久化 Group Replication 配置选项。它还会始终覆盖以下系统变量,即使您在命令中未指定它们:group_replication_group_namegroup_replication_group_seedsgroup_replication_local_addressgroup_replication_view_change_uuid(仅限 8.0.27 到 8.2.0 版本)和 group_replication_enforce_update_everywhere_checks。但是,您更改的其他 Group Replication 配置选项将保留原样。这些自定义设置可能会干扰 InnoDB ClusterSet 的运行或性能,InnoDB ClusterSet 预计在 InnoDB ClusterSet 副本集群创建过程中未更改的 Group Replication 配置选项将使用 MySQL 8.0.27 默认值。

    如果您确实要使用已配置的 Group Replication 服务器,请尽可能检查并移除所有自定义项,尤其要注意 group_replication_single_primary_mode 系统变量是否设置为默认值 ON。在这种情况下,对于前 Group Replication 组成员来说,最安全的选项是重新安装 MySQL 服务器,而不是将安装升级到 MySQL 8.0.27。

  • 服务器使用的是 MySQL 8.0.27 或更高版本。如果您想通过克隆来为副本集群配置更多成员服务器,则所有服务器都必须处于同一版本,并运行在相同的操作系统上。

  • 服务器具有在整个 InnoDB ClusterSet 中唯一的服务器 ID (server_id 系统变量) 和服务器 UUID (server_uuid 系统变量),包括任何脱机或无法访问的成员服务器。

  • 服务器上未配置任何入站复制通道。只允许 Group Replication 通道 (group_replication_appliergroup_replication_recovery)。

  • 服务器可以连接到 InnoDB ClusterSet 中的主集群,而主集群也可以连接到它。

  • 在您创建 InnoDB ClusterSet 部署时,服务器必须在线且处于正常状态,并且可以使用 MySQL Shell 访问。

所需的帐户凭据、InnoDB ClusterSet 元数据和 Group Replication 配置将在 InnoDB ClusterSet 副本集群创建过程中设置。

MySQL 路由器实例

一个或多个 MySQL 路由器实例,将客户端应用程序流量路由到 InnoDB ClusterSet 部署中的适当集群。建议将 MySQL 路由器部署在与客户端应用程序相同的宿主机上。

重要

如果您使用的是现有 InnoDB 集群作为 InnoDB ClusterSet 部署中的主集群,并且您已经针对该集群启动了 MySQL 路由器,请使用 --force 选项针对 InnoDB ClusterSet 再次启动它,然后停止并重新启动 MySQL 路由器。MySQL 路由器实例的静态配置文件中的设置需要更新以适应 InnoDB ClusterSet。请按照 第 8.5 节,“将 MySQL 路由器与 InnoDB ClusterSet 集成” 中描述的过程进行操作。