MySQL InnoDB集群部署及管理全教程(二)

MySQL InnoDB集群部署及管理全教程(一)_Doker 多克的博客-CSDN博客

四、 部署生产 InnoDB 集群

在生产环境中工作时,组成InnoDB集群的MySQL服务器实例作为网络的一部分在多台主机上运行,而不是在第6.8节“AdminAPI MySQL Sandboxes”中描述的单机上运行。在继续执行这些说明之前,必须将所需的软件安装到要作为服务器实例添加到集群的每台计算机上。
下图说明了您在本节中使用的场景:

MySQL InnoDB集群部署及管理全教程(二)_第1张图片

1、预检查 InnoDB 集群使用情况的实例配置 

在从服务器实例创建生产部署之前,您需要检查每个实例上的MySQL是否已正确配置。dba.configureInstance()函数在配置实例时会执行此操作,但您也可以选择使用dba.checkInstanceConfiguration(实例)函数。这将检查实例是否满足第7.1节“InnoDB集群要求”中列出的要求,而不更改实例上的任何配置。这不会检查实例上的任何数据,有关详细信息,请参阅检查实例状态。
用于连接到实例的用户必须具有适当的权限,例如在手动配置InnoDB集群管理员帐户中配置的权限。以下演示了在运行的MySQL Shell中发出此命令:

mysql-js> dba.checkInstanceConfiguration('icadmin@ic-1:3306')
Please provide the password for 'icadmin@ic-1:3306': ***
Validating MySQL instance at ic-1:3306 for use in an InnoDB cluster...

This instance reports its own address as ic-1
Clients and other cluster members will communicate with it through this address by default.
If this is not correct, the report_host MySQL system variable should be changed.

Checking whether existing tables comply with Group Replication requirements...
No incompatible tables detected

Checking instance configuration...

Some configuration options need to be fixed:
+--------------------------+---------------+----------------+--------------------------------------------------+
| Variable                 | Current Value | Required Value | Note                                             |
+--------------------------+---------------+----------------+--------------------------------------------------+
| enforce_gtid_consistency | OFF           | ON             | Update read-only variable and restart the server |
| gtid_mode                | OFF           | ON             | Update read-only variable and restart the server |
| server_id                | 1             |                | Update read-only variable and restart the server |
+--------------------------+---------------+----------------+--------------------------------------------------+

Please use the dba.configureInstance() command to repair these issues.

{
    "config_errors": [
        {
            "action": "restart",
            "current": "OFF",
            "option": "enforce_gtid_consistency",
            "required": "ON"
        },
        {
            "action": "restart",
            "current": "OFF",
            "option": "gtid_mode",
            "required": "ON"
        },
        {
            "action": "restart",
            "current": "1",
            "option": "server_id",
            "required": ""
        }
    ],
    "status": "error"
}

对计划用作集群一部分的每个服务器实例重复此过程。运行dba.checkInstanceConfiguration()后生成的报告提供了在InnoDB集群部署中使用实例所需的任何配置更改的信息。报告的config_error部分中的action字段告诉实例上的MySQL是否需要重新启动才能检测到对配置文件所做的任何更改。 

2、为InnoDB集群使用配置生产实例

AdminAPI提供dba.configureInstance()函数,用于检查实例是否已针对InnoDB Cluster的使用进行了适当配置,并在发现任何与InnoDB Cluster不兼容的设置时配置实例。您对实例运行dba.configureInstance()命令,它会检查使实例能够用于InnoDB集群所需的所有设置。如果实例不需要更改配置,则无需修改实例的配置,dba.configureInstance()命令输出确认实例已准备好用于InnoDB Cluster。
如果需要进行任何更改以使实例与InnoDB Cluster兼容,则会显示不兼容设置的报告,您可以选择让命令对实例的选项文件进行更改。根据MySQL Shell连接到实例的方式以及实例上运行的MySQL版本,您可以通过将这些更改持久化到远程实例的选项文件中来使这些更改永久化,请参阅第6.2.4节“持久化设置”。
不支持自动持久化配置更改的实例要求您在本地配置该实例,请参阅使用dba.configureLocalInstance()配置实例。或者,您也可以手动更改实例的选项文件,有关详细信息,请参阅“使用选项文件”。无论您以何种方式更改配置,都可能需要重新启动MySQL以确保检测到配置更改。
dba.configureInstance()命令的语法为:

dba.configureInstance([instance][, options])

其中instance是一个实例定义,options是一个数据字典,其中包含用于配置操作的附加选项。该操作返回一条关于结果的描述性文本消息。
实例定义是实例的连接数据。例如:

dba.configureInstance('user@example:3306')

选项字典可以包含以下内容:

  • mycnfPath-实例的MySQL选项文件的路径。请注意,InnoDB Cluster只支持服务器实例的单个选项文件,不支持使用--defaults extra file选项来指定额外的选项文件。对于使用实例的选项文件的任何AdminAPI操作,必须指定主文件。
  • outputMycnfPath-用于写入实例的MySQL选项文件的替代输出路径。
  • password—连接要使用的密码。
  • clusterAdmin-要创建的InnoDB集群管理员用户的名称。支持的格式是标准MySQL帐户名格式。支持用户名和主机名的标识符或字符串。默认情况下,如果未加引号,则假定输入为字符串。请参阅第6.4节“为AdminAPI创建用户帐户”。
  • clusterAdminPassword-使用clusterAdmin创建的InnoDB集群管理员帐户的密码。尽管您可以指定使用此选项,但这是一个潜在的安全风险。如果未指定此选项,但指定了clusterAdmin选项,则会在交互式提示下提示您输入密码。
  • clearReadOnly-用于确认super_read_only应设置为off的布尔值,请参阅超级只读模式下的实例配置。此选项已弃用,并计划在将来的版本中删除。
  • interactive-一个布尔值,用于在命令执行中禁用交互式向导,这样就不会向用户提供提示,也不会显示确认提示。
  • restart—一个布尔值,用于指示应执行目标实例的远程重新启动以完成操作。

尽管连接密码可以包含在实例定义中,但这是不安全的,不建议使用。 
一旦对实例发出dba.configureInstance(),该命令就会检查实例的设置是否适合InnoDB Cluster的使用。显示一个报告,显示InnoDB集群所需的设置。如果实例不需要对其设置进行任何更改,则可以在InnoDB集群中使用它,并可以继续执行第7.4.3节“创建InnoDB集群”。如果实例的设置对于InnoDB集群的使用无效,dba.configureInstance()命令将显示需要修改的设置。在配置实例之前,系统会提示您确认表中显示的更改,其中包含以下信息: 

  • 变量-无效的配置变量。
  • 当前值-无效配置变量的当前值。
  • 必需值-配置变量的必需值。

如何进行取决于实例是否支持持久化设置,请参阅第6.2.4节“持久化设置”。当针对MySQL Shell当前运行的MySQL实例(即本地实例)发出dba.configureInstance()时,它会尝试自动配置该实例。当针对远程实例发出dba.configureInstance()时,如果该实例支持自动持久化配置更改,则可以选择执行此操作。如果远程实例不支持持久化更改以将其配置为InnoDB Cluster使用,则必须在本地配置该实例。请参阅使用dba.configureLocalInstance()配置实例。
通常,dba.configureInstance()配置选项文件后不需要重新启动实例,但对于某些特定设置,可能需要重新启动。这些信息显示在发出dba.configureInstance()后生成的报告中。如果实例支持RESTART语句,MySQL Shell可以关闭然后启动实例。这样可以确保mysqld检测到对实例的选项文件所做的更改。

dba.configureInstance()方法验证是否有合适的用户可用于集群使用,该用户用于集群成员之间的连接。
如果未指定用户来管理群集,则在交互模式下,向导允许您选择以下选项之一:

  • 为根用户启用远程连接,不建议在生产环境中使用
  • 创建新用户
  • 没有自动配置,在这种情况下,您需要手动创建用户

使用dba.configureLocalInstance()配置实例

不支持自动持久化配置更改的实例(请参阅第6.2.4节,“持久化设置”)要求您连接到服务器,运行MySQL Shell,本地连接到实例,并发出dba.configureLocalInstance()。这使MySQL Shell能够在对远程实例运行以下命令后修改实例的选项文件:

  • dba.configureInstance()
  • dba.createCluster()
  • Cluster.addInstance()
  • Cluster.removeInstance()
  • Cluster.rejoinInstance()

建议保持配置更改的方法是登录到远程计算机,例如使用SSH,以root用户身份运行MySQL Shell,然后连接到本地MySQL服务器。例如,使用--uri选项连接到本地实例:

$> sudo -i mysqlsh --uri=instance

或者使用\connect命令登录到本地实例。然后发出dba.configureInstance(instance),其中instance是到本地实例的连接信息,以保持对本地实例的选项文件所做的任何更改:

mysql-js> dba.configureLocalInstance('icadmin@ic-2:3306')

 对集群中不支持自动持久化配置更改的每个实例重复此过程。例如,如果您向一个集群添加了两个不支持自动保持配置更改的实例,则必须连接到每个服务器,并在实例重新启动之前保持InnoDB集群所需的配置更改。类似地,如果修改集群结构,例如更改实例数量,则需要对每个服务器实例重复此过程,以相应地更新集群中每个实例的InnoDB集群元数据。

超级只读模式下的实例配置

每当组复制停止时,super_read_only变量都会设置为ON,以确保不会对实例进行写入。当您尝试将此类实例与以下AdminAPI命令一起使用时,您可以选择在实例上设置super_read_only=OFF:

  • dba.configureInstance()

  • dba.configureLocalInstance()

  • dba.dropMetadataSchema()

当AdminAPI遇到super_read_only=ON的实例时,在交互模式下,您可以选择将super_read_only设置为OFF。例如:

mysql-js> var myCluster = dba.dropMetadataSchema()
Are you sure you want to remove the Metadata? [y/N]: y
The MySQL instance at 'localhost:3310' currently has the super_read_only system
variable set to protect it from inadvertent updates from applications. You must
first unset it to be able to perform any changes to this instance.
For more information see:
https://dev.mysql.com/doc/refman/en/server-system-variables.html#sysvar_super_read_only.

Do you want to disable super_read_only and continue? [y/N]: y

Metadata Schema successfully removed.

将显示实例的当前活动会话数。您必须确保任何应用程序都不会无意中写入实例。通过回答“是”,您确认AdminAPI可以写入实例。如果列出的实例有多个打开的会话,请在允许AdminAPI将super_read_only设置为OFF之前格外小心。


五、 配置 InnoDB 集群


六、 保护 InnoDB 集群


七、 监控 InnoDB 集群


八、 还原和重新启动 InnoDB 集群


九、修改或解散 InnoDB 集群


十、升级 InnoDB 集群

文章下方有交流学习区!一起学习进步!也可以前往官网,加入官方微信交流群
首发CSDN博客,创作不易,如果觉得文章不错,可以点赞收藏评论
你的支持和鼓励是我创作的动力❗❗❗ 

你可能感兴趣的:(mysql,mysql,java,数据库)