监控复制状态

dbms.cluster.statusCheck() 过程可用于监控集群数据库中的复制能力。在大多数情况下,这意味着集群数据库处于可写状态。该过程可识别集群数据库中哪些成员是最新的,并能够参与成功的复制。因此,它对于确定集群数据库的容错能力非常有用。此外,您可以使用该过程来确定集群中集群数据库的领导者(Leader)。

该过程在集群内复制一个虚拟事务,并验证该事务能否被成功复制和应用。由于状态检查不会复制实际的业务事务,因此它不能完全保证写可用性,因为写入路径中的其他因素(例如数据库问题)可能会阻塞事务。不过,健康的状态检查结果在大多数情况下通常预示着数据库处于写可用状态。

集群状态检查

语法

CALL dbms.cluster.statusCheck(databases :: LIST<STRING>, timeoutMilliseconds = null :: INTEGER)

输入参数

名称 类型 描述

databases

List<String>

需要运行状态检查的数据库。提供空列表将对服务器上所有集群化数据库运行状态检查,即它不会在单机或从属(Secondary)数据库上运行。

timeoutMilliseconds

整数

指定标记复制不成功之前的最大等待时间。默认值为 1000 毫秒。

返回参数

该过程为所有已请求数据库的所有主(Primary)成员返回一行,其中每一行包含:

名称 类型 描述

database

字符串

复制了 状态检查条目 (status check entry) 的数据库。

serverId

字符串

服务器的 UUID,该服务器参与或未参与 状态检查条目 的成功复制。

serverName

字符串

服务器的友好名称,如果未设置名称,则为其 UUID。

address

字符串

服务器的 Bolt 端口地址。

replicationSuccessful

布尔值

指示服务器(运行该过程的服务器)是否可以复制事务。

memberStatus

字符串

每个主成员的状态。

recognisedLeader

字符串

每个主成员所感知的领导者(Leader)的服务器 ID。

recognisedLeaderTerm

整数

每个主成员所感知的领导者的任期(Term)。如果成员报告的领导者不同,则应信任任期最高的那个。

requester

布尔值

服务器是否为请求者。

错误 (error)

字符串

包含任何错误消息(如果存在)。错误的一个示例是请求的一个或多个数据库在请求者上不存在。

replicationSuccessful 的可能值

  • TRUE — 如果此服务器在给定的超时时间内成功将虚拟事务复制到大多数集群成员。

  • FALSE — 如果未能在超时时间内完成复制。该值在列层面上是统一的。复制失败可能表示集群中存在实际问题(例如没有领导者),或者此服务器在应用更新方面滞后太远而无法进行复制。

memberStatus 的可能值

  • APPLYING 表示该成员可以进行复制并正在积极应用事务。

  • REPLICATING 表示该成员可以参与复制,但无法应用。此状态不常见,但可能在等待数据库启动并接受事务时发生。

  • UNAVAILABLE 表示该成员滞后于领导者太远或无法连接。它们是不健康的,无法提供容错能力。

requester 的可能值

  • TRUE — 针对运行该过程的服务器。

  • FALSE — 针对其余服务器。

通常,您可以使用 replicationSuccessful 字段来确定整体写可用性,而检查 memberStatus 字段可以查看数据库是否具备容错能力。

示例

运行状态检查

当针对服务器运行集群状态检查时,预计会得到类似于以下内容的输出

+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| database | serverId                               | serverName                             | address          | replicationSuccessful | memberStatus | recognisedLeader                       | recognisedLeaderTerm | requester | error |
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| "neo4j"  | "d3fe2e6a-494d-4ab8-81b1-7de2ce31ce11" | "d3fe2e6a-494d-4ab8-81b1-7de2ce31ce11" | "localhost:7682" | TRUE                  | "APPLYING"   | "565130e8-b8f0-41ad-8f9d-c660bd8d5519" | 4                    | FALSE     | NULL  |
| "neo4j"  | "565130e8-b8f0-41ad-8f9d-c660bd8d5519" | "565130e8-b8f0-41ad-8f9d-c660bd8d5519" | "localhost:7681" | TRUE                  | "APPLYING"   | "565130e8-b8f0-41ad-8f9d-c660bd8d5519" | 4                    | TRUE      | NULL  |
| "neo4j"  | "58c70f4b-910d-4d0e-b0f2-3084554079ec" | "58c70f4b-910d-4d0e-b0f2-3084554079ec" | "localhost:7683" | TRUE                  | "APPLYING"   | "565130e8-b8f0-41ad-8f9d-c660bd8d5519" | 4                    | FALSE     | NULL  |
| "system" | "565130e8-b8f0-41ad-8f9d-c660bd8d5519" | "565130e8-b8f0-41ad-8f9d-c660bd8d5519" | "localhost:7681" | TRUE                  | "APPLYING"   | "d3fe2e6a-494d-4ab8-81b1-7de2ce31ce11" | 1                    | TRUE      | NULL  |
| "system" | "58c70f4b-910d-4d0e-b0f2-3084554079ec" | "58c70f4b-910d-4d0e-b0f2-3084554079ec" | "localhost:7683" | TRUE                  | "APPLYING"   | "d3fe2e6a-494d-4ab8-81b1-7de2ce31ce11" | 1                    | FALSE     | NULL  |
| "system" | "d3fe2e6a-494d-4ab8-81b1-7de2ce31ce11" | "d3fe2e6a-494d-4ab8-81b1-7de2ce31ce11" | "localhost:7682" | TRUE                  | "APPLYING"   | "d3fe2e6a-494d-4ab8-81b1-7de2ce31ce11" | 1                    | FALSE     | NULL  |
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+