7.7监控InnoDB集群状态

本节介绍如何使用AdminAPI监控InnoDB集群。

使用集群.describe ()

要获取关于InnoDB集群本身结构的信息,请使用集群.describe ()功能:

mysql-js > cluster.describe ();{“clusterName”:“testCluster”、“defaultReplicaSet”:{“名称”:“默认”,“拓扑”:[{“地址”:“ic-1:3306”、“标签”:“ic-1:3306”、“角色”:“哈”},{“地址”:“ic-2:3306”、“标签”:“ic-2:3306”、“角色”:“哈”},{“地址”:“ic-3:3306”、“标签”:“ic-3:3306”、“角色”:“哈”}]}}

这个函数的输出显示了InnoDB集群的结构,包括它的所有配置信息,等等。地址、标签和角色值与在检查集群的状态集群.status ()

检查集群的状态集群.status ()

集群对象提供状态()方法,该方法使您能够检查集群的运行情况。在你检查InnoDB集群的状态之前,你需要通过连接到它的任何实例来获得一个InnoDB集群对象的引用。但是,如果您想更改集群的配置,则必须连接到“R/W”实例。发行状态()根据连接到的服务器实例所感知的集群视图检索集群的状态,并输出状态报告。

重要的

集群中实例的状态直接影响状态报告中提供的信息。因此,请确保连接到的实例的状态为在线

有关InnoDB集群是如何运行的信息,请参考集群的状态()方法:

mysql-js> var cluster = db . getcluster () mysql-js> cluster.status() {"clusterName": "testcluster", "defaultReplicaSet": {"name": "default", "primary": "ic-1:3306", "ssl": "REQUIRED", "status": "OK", "statusText": "cluster is ONLINE and can up up to ONE .", "topology": {"ic-1:3306": {"address": "ic-1:3306", "mode": "R/W", "readReplicas": {}, "role": "HA", "status": "ONLINE"}, "ic-2:3306": {"address": "ic-2:3306", "mode": "R/O", "readReplicas": {}, "role": "ic-2:3306": "role": "ic-2: HA", "mode": "R/O", "readReplicas": {}, "role": "HA", "readReplicas": {}, "role": "HA", "readReplicas": "HA", "status": "status": "role": "HA", "role": "HA", "status": {}, "role": "HA", "role": "HA", "status": "status": "HA", "role": "HA", "status": "status": "role": "HA", "status": "status": "HA": "HA": "status": "status": "status": "role": "HA": "HA":“在线”},“ic-3:3306”:{“地址”:“ic-3:3306”、“模式”:“R / O”、“readReplicas”:{},“角色”:“哈”,“状态”:“在线 " } } }, " groupInformationSourceMember”:“mysql: / / icadmin@ic-1:3306 "}

的输出集群.status ()提供以下信息:

  • clusterName:期间分配给该集群的名称dba.createCluster ()

  • defaultReplicaSet:属于某个InnoDB Cluster的包含该数据集的服务器实例。

  • 主要的:集群仅单主模式时显示。显示当前主实例的地址。如果该字段不显示,表示集群运行在多主模式下。

  • ssl:集群是否使用安全连接。显示的值要求禁用,取决于如何memberSslMode选项在任意一个过程中都配置了createCluster ()addInstance ()。参数返回的值对应于group_replication_ssl_mode实例上的Server变量。看到第7.6节“InnoDB集群的安全”

  • 状态:集群中该元素的状态。对于整个集群,本文描述了该集群提供的高可用性。状态有以下几种:

    • 在线:实例在线且参与集群。

    • 离线:该实例与其他实例失去连接。

    • 恢复:实例试图通过检索它在成为集群之前需要的事务来与集群同步在线成员。

    • 遥不可及的:实例与集群失去通信。

    • 错误:实例在恢复阶段或应用事务时遇到错误。

      重要的

      一旦实例进入错误状态,super_read_only选项设置为。离开错误必须手动配置实例的状态super_read_only =了

    • (丢失):属于已配置集群的一个实例的状态,但当前不可用。

      请注意

      失踪state是针对InnoDB集群的,不是由组复制产生的状态。MySQL Shell使用这个状态来指示在元数据中注册的实例,但在活动集群视图中找不到。

  • 拓扑结构:已添加到集群中的实例。

  • 实例的主机名:实例的主机名,例如localhost:3310。

  • 角色:该实例在集群中提供什么功能。目前只支持HA,用于高可用性。

  • 模式:服务器是读写(R/W)还是只读(R/O)。的当前状态派生而来super_read_only变量,以及集群是否具有仲裁。在以前的版本中,mode的值是由实例作为主实例还是辅助实例派生的。通常,如果实例是主实例,则模式为“R/W”,如果实例是备实例,则模式为“R/O”。类的状态如何,集群中没有可见仲裁的任何实例都被标记为“R/O”super_read_only变量。

  • groupInformationSourceMember:用于获取集群信息的内部连接,显示为类似uri的连接字符串。通常是最初用于创建集群的连接。

要显示关于集群的更多信息,请使用扩展选择。从8.0.17版本开始,扩展选项支持整数或布尔值。配置附加信息集群.status({“扩展”:价值})提供时,使用以下值:

  • 0:禁用附加信息,默认值

  • 1:包括组复制协议版本、组名称、集群成员uuid、组复制报告的集群成员角色和状态,以及fenced系统变量列表

  • 2:包含连接和应用程序处理的事务信息

  • 3:包含每个集群成员复制的更详细的统计信息。

设置扩展使用布尔值等同于设置整数值0和1。在8.0.17之前的版本中扩展选项只有布尔值。类似地,以前的版本使用queryMembers布尔选项,以提供关于集群中实例的更多信息,这相当于设置扩展为3。的queryMembers选项已弃用,计划在未来的版本中删除。

当你发出集群.status({“扩展”:1}),或扩展选项设置为真正的,输出包括:

  • 属性的以下附加属性defaultReplicaSet对象:

    • GRProtocolVersion是集群中使用的组复制协议版本。

      提示

      InnoDB集群管理自动使用的组复制协议版本,参见集群和组复制协议更多信息。

    • groupName是组的名称,即UUID。

  • 的每个对象的以下附加属性拓扑结构对象:

    • fenceSysVars一个包含AdminAPI配置的受保护系统变量名称的列表。目前考虑的围栏系统变量是read_onlysuper_read_only而且offline_mode。不管系统变量的值是多少,都要列出它们。

    • instanceErrors对于每个实例,显示该实例可以检测到的任何诊断信息。例如,如果实例是二级实例,则super_read_only变量未设置为,然后显示警告。此信息可用于排除错误。

    • memberId每个集群成员UUID。

    • memberRole组复制插件报告的成员角色,请参见MEMBER_ROLE的列replication_group_members表格

    • memberState由组复制插件报告的成员状态,请参阅MEMBER_STATE的列replication_group_members表格

查看有关恢复和常规事务I/O、应用程序工作线程统计信息和任何延迟的信息;应用程序协调器统计信息,如果启用了并行复制应用程序;错误和来自接收者和应用程序线程的其他信息使用值2或3 for扩展。使用这些值时,将打开到集群中每个实例的连接,以便可以查询其他特定于实例的统计信息。输出中包含的确切统计信息取决于实例的状态和配置以及服务器版本。该信息与中显示的信息相匹配replication_group_member_stats表中,有关更多信息,请参见匹配列的描述。以下实例在线有一个交易部分包含在输出中。以下实例恢复有一个复苏部分包含在输出中。当你设置扩展到2,在任何情况下,这些部分都可以包含以下内容:

  • appliedCount:看COUNT_TRANSACTIONS_REMOTE_APPLIED

  • checkedCount:看COUNT_TRANSACTIONS_CHECKED

  • committedAllMembers:看TRANSACTIONS_COMMITTED_ALL_MEMBERS

  • conflictsDetectedCount:看COUNT_CONFLICTS_DETECTED

  • inApplierQueueCount:看COUNT_TRANSACTIONS_REMOTE_IN_APPLIER_QUEUE

  • inQueueCount:看COUNT_TRANSACTIONS_IN_QUEUE

  • lastConflictFree:看LAST_CONFLICT_FREE_TRANSACTION

  • proposedCount:看COUNT_TRANSACTIONS_LOCAL_PROPOSED

  • rollbackCount:看COUNT_TRANSACTIONS_LOCAL_ROLLBACK

当你设置扩展到3,连接的信息replication_connection_status表格值3相当于设置deprecatedqueryMembers选项真正的。的连接节可以包含以下内容:

currentlyQueueing部分包含当前排队的事务的信息:

  • immediateCommitTimestamp:看QUEUEING_TRANSACTION_IMMEDIATE_COMMIT_TIMESTAMP

  • immediateCommitToNowTime:看QUEUEING_TRANSACTION_IMMEDIATE_COMMIT_TIMESTAMP-现在()

  • originalCommitTimestamp:看QUEUEING_TRANSACTION_ORIGINAL_COMMIT_TIMESTAMP

  • originalCommitToNowTime:看QUEUEING_TRANSACTION_ORIGINAL_COMMIT_TIMESTAMP-现在()

  • startTimestamp:看QUEUEING_TRANSACTION_START_QUEUE_TIMESTAMP

  • 事务:看QUEUEING_TRANSACTION

  • lastHeartbeatTimestamp:看LAST_HEARTBEAT_TIMESTAMP

lastQueued部分有关于最近排队的事务的信息:

  • endTimestamp:看LAST_QUEUED_TRANSACTION_END_QUEUE_TIMESTAMP

  • immediateCommitTimestamp:看LAST_QUEUED_TRANSACTION_IMMEDIATE_COMMIT_TIMESTAMP

  • immediateCommitToEndTimeLAST_QUEUED_TRANSACTION_IMMEDIATE_COMMIT_TIMESTAMP-现在()

  • originalCommitTimestamp:看LAST_QUEUED_TRANSACTION_ORIGINAL_COMMIT_TIMESTAMP

  • originalCommitToEndTimeLAST_QUEUED_TRANSACTION_ORIGINAL_COMMIT_TIMESTAMP-现在()

  • queueTimeLAST_QUEUED_TRANSACTION_END_QUEUE_TIMESTAMP-LAST_QUEUED_TRANSACTION_START_QUEUE_TIMESTAMP

  • startTimestamp:看LAST_QUEUED_TRANSACTION_START_QUEUE_TIMESTAMP

  • 事务:看LAST_QUEUED_TRANSACTION

  • receivedHeartbeats:看COUNT_RECEIVED_HEARTBEATS

  • receivedTransactionSet:看RECEIVED_TRANSACTION_SET

  • threadId:看THREAD_ID

使用多线程副本的实例具有工人类所显示的信息replication_applier_status_by_worker表格

lastApplied部分显示了关于工作者申请的最后一个事务的以下信息:

  • applyTime:看LAST_APPLIED_TRANSACTION_END_APPLY_TIMESTAMP-LAST_APPLIED_TRANSACTION_START_APPLY_TIMESTAMP

  • endTimestamp:看LAST_APPLIED_TRANSACTION_END_APPLY_TIMESTAMP

  • immediateCommitTimestamp:看LAST_APPLIED_TRANSACTION_IMMEDIATE_COMMIT_TIMESTAMP

  • immediateCommitToEndTime:看LAST_APPLIED_TRANSACTION_IMMEDIATE_COMMIT_TIMESTAMP-现在()

  • originalCommitTimestamp:看LAST_APPLIED_TRANSACTION_ORIGINAL_COMMIT_TIMESTAMP

  • originalCommitToEndTime:看LAST_APPLIED_TRANSACTION_ORIGINAL_COMMIT_TIMESTAMP-现在()

  • startTimestamp:看LAST_APPLIED_TRANSACTION_START_APPLY_TIMESTAMP

  • 事务:看LAST_APPLIED_TRANSACTION

currentlyApplying部分显示了关于worker当前正在应用的事务的以下信息:

  • immediateCommitTimestamp:看APPLYING_TRANSACTION_IMMEDIATE_COMMIT_TIMESTAMP

  • immediateCommitToNowTime:看APPLYING_TRANSACTION_IMMEDIATE_COMMIT_TIMESTAMP-现在()

  • originalCommitTimestamp:看APPLYING_TRANSACTION_ORIGINAL_COMMIT_TIMESTAMP

  • originalCommitToNowTime:看APPLYING_TRANSACTION_ORIGINAL_COMMIT_TIMESTAMP-现在()

  • startTimestamp:看APPLYING_TRANSACTION_START_APPLY_TIMESTAMP

  • 事务:看APPLYING_TRANSACTION

lastProcessedSection有以下关于worker处理的最后一个事务的信息:

  • bufferTimeLAST_PROCESSED_TRANSACTION_END_BUFFER_TIMESTAMP-LAST_PROCESSED_TRANSACTION_START_BUFFER_TIMESTAMP

  • endTimestamp:看LAST_PROCESSED_TRANSACTION_END_BUFFER_TIMESTAMP

  • immediateCommitTimestamp:看LAST_PROCESSED_TRANSACTION_IMMEDIATE_COMMIT_TIMESTAMP

  • immediateCommitToEndTimeLAST_PROCESSED_TRANSACTION_IMMEDIATE_COMMIT_TIMESTAMP-LAST_PROCESSED_TRANSACTION_END_BUFFER_TIMESTAMP

  • originalCommitTimestamp:看LAST_PROCESSED_TRANSACTION_ORIGINAL_COMMIT_TIMESTAMP

  • originalCommitToEndTimeLAST_PROCESSED_TRANSACTION_ORIGINAL_COMMIT_TIMESTAMP-LAST_PROCESSED_TRANSACTION_END_BUFFER_TIMESTAMP

  • startTimestamp:看LAST_PROCESSED_TRANSACTION_START_BUFFER_TIMESTAMP

  • 事务:看LAST_PROCESSED_TRANSACTION

如果启用了并行复制应用程序,则工作对象数组中的对象数量交易复苏匹配已配置的工作者的数量,并包含一个额外的协调器对象。中显示的信息与replication_applier_status_by_coordinator表格该对象可以包含:

currentlyProcessingSection有以下关于正在被worker处理的事务的信息:

  • immediateCommitTimestamp:看PROCESSING_TRANSACTION_IMMEDIATE_COMMIT_TIMESTAMP

  • immediateCommitToNowTimePROCESSING_TRANSACTION_IMMEDIATE_COMMIT_TIMESTAMP-现在()

  • originalCommitTimestamp:看PROCESSING_TRANSACTION_ORIGINAL_COMMIT_TIMESTAMP

  • originalCommitToNowTimePROCESSING_TRANSACTION_ORIGINAL_COMMIT_TIMESTAMP-现在()

  • startTimestamp:看PROCESSING_TRANSACTION_START_BUFFER_TIMESTAMP

  • 事务:看PROCESSING_TRANSACTION

工人对象中检测到错误时,对象具有以下信息replication_applier_status_by_worker表:

  • lastErrno:看LAST_ERROR_NUMBER

  • lastError:看LAST_ERROR_MESSAGE

  • lastErrorTimestamp:看LAST_ERROR_TIMESTAMP

连接对象中检测到错误时,对象具有以下信息replication_connection_status表:

  • lastErrno:看LAST_ERROR_NUMBER

  • lastError:看LAST_ERROR_MESSAGE

  • lastErrorTimestamp:看LAST_ERROR_TIMESTAMP

协调员对象中检测到错误时,对象具有以下信息replication_applier_status_by_coordinator表:

  • lastErrno:看LAST_ERROR_NUMBER

  • lastError:看LAST_ERROR_MESSAGE

  • lastErrorTimestamp:看LAST_ERROR_TIMESTAMP

监控恢复操作

的输出集群.status ()中实例的恢复操作的进度信息恢复状态。显示了使用MySQL克隆或增量恢复进行恢复的实例的信息。监视这些字段:

  • recoveryStatusText字段包含有关正在使用的恢复类型的信息。当MySQL克隆是工作的字段显示克隆技术进展中。当增量恢复工作时,现场显示正在进行的分布式恢复

  • 当MySQL克隆正在使用复苏Field包含一个包含以下字段的字典:

    • cloneStartTime:克隆进程开始的时间戳

    • cloneState:克隆进程状态

    • currentStage:克隆进程所达到的当前阶段

    • currentStageProgress:当前阶段进度占完成的百分比

    • currentStageState:当前阶段状态

    例子集群.status ()输出,为简洁而裁剪:

    ..."recovery": {"cloneStartTime": "2019-07-15 12:50:22.730", "cloneState": "In Progress", "currentStage": "FILE COPY", "currentStageProgress": 61.726837675213865, " currentstageestate ": "In Progress"}, "recoveryStatusText": "Cloning In Progress",…
  • 当使用增量恢复时扩展选项设置为1或更大,则复苏Field包含一个包含以下字段的字典:

    • 状态的状态group_replication_recovery通道

    • recoveryChannel:对正在执行增量恢复或恢复通道状态不为关闭的实例显示。增量恢复利用接收线程从源接收事务,应用程序线程将接收到的事务应用到实例上。提供以下信息:

      • applierQueuedTransactionSetSize:当前排队等待应用的事务的数量。

      • applierState:复制应用程序的当前状态

      • applierStatus:应用程序线程的当前状态。中显示的状态的集合applierThreadState字段。可以是:

        • APPLIED_ALL:没有等待应用的排队事务

        • 应用:有事务正在被应用

        • :线程已连接,没有排队的事务

        • 错误:应用事务时出现错误

        • :应用程序线程被禁用

      • applierThreadState:任何应用程序线程的当前状态。提供有关应用程序线程正在执行的具体操作的详细信息。有关更多信息,请参见复制SQL线程状态

      • receiverStatus:接收线程的当前状态。中显示的状态的集合receiverThreadState字段。可以是:

        • :接收线程已经连接成功,准备接收

        • 连接:接收线程正在连接源线程

        • 错误:接收事务时发生错误

        • :接收线程优雅断开

      • receiverThreadState:接收线程的当前状态。提供关于接收线程正在做什么的详细信息。有关更多信息,请参见复制I/O(接收器)线程状态

      • :正在应用的事务的源。

    例子集群.status ()输出,为简洁而裁剪:

    ..."recovery": {"recoveryChannel": {"applierQueuedTransactionSetSize": 2284, "applierStatus": " applied ", "applierThreadState": "Opening tables", "receiverStatus": "ON", "receiverThreadState": " queuqueuing master event to the relay log", "source": " ic2:3306"}, "state": "ON"},…

集群和组复制协议

从MySQL 8.0.16中,组复制有一个用于组的通信协议的概念,参见设置群组通信协议版本了解背景信息。组复制通信协议版本通常需要显式管理,并设置为适应您希望组支持的最老的MySQL Server版本。然而,InnoDB Cluster在使用AdminAPI操作改变集群拓扑结构时,会自动透明地管理其成员的通信协议版本。集群总是使用当前属于集群或加入集群的所有实例都支持的最新通信协议版本。

  • 当一个实例被添加到集群、从集群中删除或重新加入集群,或者在集群上进行重新扫描或重新启动操作时,通信协议版本会自动设置为该实例支持的版本,即MySQL Server的最早版本。

  • 当您通过从集群中删除实例、升级它们并将它们添加回集群中来执行滚动升级时,当旧MySQL Server版本的最后一个实例在升级之前从集群中删除时,通信协议版本将自动升级。

要查看集群中使用的通信协议版本,请使用集群.status ()函数扩展选择启用。中返回的通信协议版本GRProtocolVersion字段,只要群集具有仲裁且没有群集成员不可访问。

检查实例上的MySQL版本

以下操作可以报告实例上运行的MySQL Server版本信息:

  • 集群.status ()

  • 集群.describe ()

  • 集群.rescan ()

的MySQL Server版本不同,行为也不同集群会话对象。

  • 集群.status ()

    如果满足以下条件之一,a版本对象的每个实例JSON对象都返回拓扑结构对象:

    • 集群对象的当前会话是8.0.11或更高版本。

    • 集群对象的当前会话运行的版本早于8.0.11,但是扩展选项设置为3(或已弃用的queryMembers真正的).

    例如,在运行8.0.16版本的实例中:

    “拓扑”:{" ic-1:3306 ":{“地址”:“ic-1:3306”、“模式”:“R / W”、“readReplicas”:{},“角色”:“哈”,“状态”:“在线”、“版本”:“8.0.16”}

    例如,在运行版本5.7.24的实例中:

    “拓扑”:{" ic-1:3306 ":{“地址”:“ic-1:3306”、“模式”:“R / W”、“readReplicas”:{},“角色”:“哈”,“状态”:“在线”、“版本”:“5.7.24”}
  • 集群.describe ()

    如果集群对象的当前会话是8.0.11或更高版本版本对象的每个实例JSON对象都返回拓扑结构对象

    例如,在运行8.0.16版本的实例中:

    “拓扑”:[{“地址”:“ic-1:3306”、“标签”:“ic-1:3306”、“角色”:“哈”、“版本”:“8.0.16”}]
  • 集群.rescan ()

    如果集群对象的当前会话是8.0.11或更高版本,而集群.rescan ()操作检测不属于集群的实例版本对象的每个实例JSON对象都返回newlyDiscoveredInstance对象。

    例如,在运行8.0.16版本的实例中:

    "新婚发现实例":[{"host": " c-4:3306", "member_id": "82a67a06-2ba3-11e9-8cfc-3c6aa7197deb", "name": null, "version": "8.0.16"}]