监控复制状态

Neo4j 5.24 引入了 dbms.cluster.statusCheck() 过程,该过程可用于监控集群数据库中复制的能力。在大多数情况下,这意味着集群数据库是可写入的。该过程识别集群数据库中哪些成员是最新的,并且可以参与成功的复制。因此,它在确定集群数据库的容错能力方面很有用。此外,您可以使用该过程来识别集群数据库中集群内的领导者。

调用该过程的成员会在与真实事务相同的集群中复制一个虚拟事务,并验证它是否可以被复制和应用。

由于状态检查不会复制实际的事务,因此即使状态检查报告它可以复制,也不能保证数据库是可写入的。除了复制之外,写入路径中还有其他停止点可能会阻止事务被应用,例如数据库中的问题。但是,它表明集群是健康的,并且在大多数情况下这意味着数据库是可写入的。

集群状态检查

语法

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

参数

名称 类型 描述

databases

List<String>

应为其运行状态检查的数据库。提供空列表将为该服务器上的所有**集群**数据库运行状态检查,即它不会在单节点或辅助节点上运行。

timeoutMilliseconds

Integer

在返回复制不成功之前允许复制的时间。默认值为 1000 毫秒。

返回值

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

名称 类型 描述

database

String

复制了状态检查条目的数据库。

serverId

String

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

serverName

String

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

address

String

服务器的 Bolt 端口地址。

replicationSuccessful

Boolean

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

memberStatus

String

每个主成员的状态。

recognisedLeader

String

每个主成员感知到的领导者的服务器 ID。

recognisedLeaderTerm

Integer

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

requester

Boolean

服务器是否是请求者。

error

String

如果存在错误消息,则包含错误消息。错误的一个示例是请求的数据库之一或全部在请求者上不存在。

replicationSuccessful 的可能值

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

  • FALSE — 如果在超时时间内复制失败。该值在列方向上相同。复制失败可能表示集群中的实际问题(例如,没有领导者),或者此服务器在应用更新方面落后太多,无法复制。

memberStatus 的可能值

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

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

  • UNAVAILABLE 表示成员要么落后于领导者太多,要么无法访问。

requester 的可能值

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

  • FALSE — 在其余服务器上。

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

处于REPLICATING 状态的成员从数据安全角度来看是良好的。它们可以参与复制并持久保留数据,直到应用为止。它们也是最新的,因此有资格成为领导者。因此,它们增加了容错能力。

处于APPLYING 状态的成员具有REPLICATING 成员的所有特性,因此它们也增加了容错能力。但它们也应用于数据库,这是写入事务并在及时方式使用书签读取的必要条件。

最后,UNAVAILABLE 成员要么落后太多,要么无法访问。它们不健康,无法增加容错能力。

示例

运行状态检查

在针对服务器运行集群状态检查时,预期输出类似于以下内容

+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| 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  |
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+