朝花夕拾16章MySQL Shell 8.1 InnoDB ClusterSet 要求

2024年 2月 6日 77.1k 0

InnoDB ClusterSet 部署的基础是 MySQL 8.0.27 或更高版本的现有 InnoDB 集群,以及许多独立的 MySQL Server 实例,这些实例可以形成副本集群,以为该主集群提供容灾能力。如果您想尝试 InnoDB ClusterSet,可以使用 MySQL Shell 8.0.27 或更高版本在本地计算机上设置沙箱部署。您需要安装 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 Shell 可与任何 GA 版本的 MySQL 5.7 或 8.0 一起使用。

要设置 InnoDB ClusterSet 的生产部署,请确保已准备好以下组件:

  • 软件组件
  • InnoDB集群
  • MySQL 服务器实例
  • MySQL 路由器实例

软件组件

设置 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集群

将作为主集群的现有 InnoDB 集群。这是 InnoDB ClusterSet 部署为其提供容灾能力的集群。组复制组可以作为InnoDB Cluster。有关设置 InnoDB 集群或采用组复制组的说明,请参阅 第 7.4 节 “部署生产 InnoDB 集群”。

作为主集群的 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 或更高版本中发出命令,将元数据更新为适合 InnoDB ClusterSet 操作的版本 dba.upgradeMetadata()。请注意,升级集群的元数据后,旧版 MySQL Shell 无法对其进行管理。有关更多信息,请参阅 第 6.11 节 “升级元数据架构”。

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

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

    *Cluster*.rescan() 命令可用于 group_replication_view_change_uuid 为 InnoDB Cluster 中的所有成员服务器生成并设置一个值。在 MySQL Shell 8.0.29 之前,该命令在扫描集群时会自动执行此操作,之后您必须重新启动集群才能实施更改。从 MySQL Shell 8.0.29 开始,该命令返回一条警告消息,让您知道必须为系统变量设置一个值,或者您可以启用该选项以updateViewChangeUuid在扫描期间自动生成并设置一个值。重新启动集群后,您可以重试 InnoDB ClusterSet 创建过程。

  • 任何成员服务器上都不能存在来自组外服务器的入站复制通道。允许 组复制自动创建的通道(group_replication_applier和 )。group_replication_recovery

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

    笔记

    您无法使用 InnoDB Cluster 管理员帐户(使用 设置 *cluster*.setupAdminAccount())为副本集群设置独立 MySQL Server 实例。 *cluster*.setupAdminAccount() 在独立实例上不可用,如果您使用dba.configureInstance或 手动在独立实例上创建这些帐户之一,随后将从主集群复制该帐户,从而导致复制因错误而停止。

  • 在创建 InnoDB ClusterSet 部署时,InnoDB Cluster 必须在线且运行良好,并且必须可以使用 MySQL Shell 访问其主要成员服务器。

MySQL 服务器实例

一系列独立的 MySQL Server 实例,您可以将它们组成一个或多个副本集群。尽管 InnoDB ClusterSet 部署可以包括由单个服务器实例组成的副本集群,但建议每个副本集群中至少包含三个成员服务器以实现容错。在容灾的生产部署中,每个副本集群将位于备用位置,例如不同的数据中心。

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

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

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

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

    重要的

    请谨慎使用以前的组复制组成员作为 InnoDB ClusterSet 副本集群的成员,特别是如果您对组复制配置选项进行了大量更改,或者如果该组是在更早的版本中创建的并且您基于以下原因进行了配置更改:关于该版本中的情况。

    InnoDB ClusterSet 副本集群创建过程会覆盖您在命令中指定新设置的任何现有持久组复制配置选项。即使您没有在命令中指定以下系统变量,它也始终会覆盖它们: group_replication_group_namegroup_replication_group_seedsgroup_replication_local_addressgroup_replication_view_change_uuidgroup_replication_enforce_update_everywhere_checks。但是,您更改的其他组复制配置选项将保持原样。这些自定义设置可能会干扰 InnoDB ClusterSet 的运行或性能,它期望 MySQL 8.0.27 默认值用于组复制配置选项,这些选项在 InnoDB ClusterSet 副本集群创建过程中不会更改。

    如果您确实想要使用已配置的组复制服务器,请检查并删除所有自定义(如果可能),特别是检查 group_replication_single_primary_mode 系统变量是否设置为默认值 ON。在这种情况下,对于前组复制组成员来说,最安全的选择是重新安装 MySQL Server,而不是将安装升级到 MySQL 8.0.27。

  • 服务器的 MySQL 版本为 8.0.27 或更高版本。如果要通过克隆为副本集群配置更多成员服务器,所有服务器必须具有相同版本且位于相同操作系统上。

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

  • 服务器上未配置入站复制通道。仅允许 组复制通道(group_replication_applier和 )。group_replication_recovery

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

  • 在创建 InnoDB ClusterSet 部署时,服务器必须在线且运行正常,并且可以使用 MySQL Shell 进行访问。

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

MySQL 路由器实例

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

重要的

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

相关文章

Oracle如何使用授予和撤销权限的语法和示例
Awesome Project: 探索 MatrixOrigin 云原生分布式数据库
下载丨66页PDF,云和恩墨技术通讯(2024年7月刊)
社区版oceanbase安装
Oracle 导出CSV工具-sqluldr2
ETL数据集成丨快速将MySQL数据迁移至Doris数据库

发布评论