部署分析集群

在分析用例中,分析查询的强度可能足以保证在单独的服务器上运行它们,远离处理事务工作负载的服务器。此示例演示了如何设置集群以实现此目的。有关在集群中使用 Neo4j 图数据科学库的信息,请参阅此处:Neo4j 图数据科学库手册 → GDS 与 Neo4j 集群

分析集群可以通过两种方式设置,具有容错或不具有容错。请记住,GDS 库**不支持**容错,因此 GDS 应仅部署在配置用于分析查询的服务器上,如下所述。

具有容错

部署集群

从 Neo4j 5.23 开始,您可以在发现服务之间进行选择:v1 或 v2,这允许服务器相互通信。对于所有新部署,建议使用发现服务 v2,因为从 Neo4j 5.23 开始,v1 已被视为已弃用。有关 Neo4j 发现服务的更多详细信息,请参阅集群服务器发现

示例 1. 配置一个具有五个服务器的集群,其中两个仅用于读取查询

在这个示例中,三台名为server01.example.comserver02.example.comserver03.example.com的服务器被配置为集群的事务处理部分。另外两台名为server04.example.comserver05.example.com的服务器被配置用于分析查询。所有五台服务器都安装了 Neo4j 企业版。它们通过在每台服务器上准备neo4j.conf文件进行配置。

关键点

  • 所有服务器在其发现列表中都包含所有成员。

  • 用于分析的服务器配置了模式约束,这些约束将其托管模式限制为辅助,以防止它们参与正常的写入操作。

  • 在下面的示例中,您设置dbms.cluster.discovery.resolver_type=LIST

要使用发现服务 v2

  • 您必须将dbms.cluster.discovery.version的配置设置为V2_ONLY

  • 不要使用dbms.cluster.discovery.endpoints,而是使用dbms.cluster.discovery.v2.endpoints

neo4j.conf 在 server01.example.com 上
server.default_listen_address=0.0.0.0
server.default_advertised_address=server01.example.com
dbms.cluster.discovery.v2.endpoints=server01.example.com:6000,server02.example.com:6000,server03.example.com:6000,server04.example.com:6000,server05.example.com:6000
dbms.cluster.discovery.version=V2_ONLY
neo4j.conf 在 server02.example.com 上
server.default_listen_address=0.0.0.0
server.default_advertised_address=server02.example.com
dbms.cluster.discovery.v2.endpoints=server01.example.com:6000,server02.example.com:6000,server03.example.com:6000,server04.example.com:6000,server05.example.com:6000
dbms.cluster.discovery.version=V2_ONLY
neo4j.conf 在 server03.example.com 上
server.default_listen_address=0.0.0.0
server.default_advertised_address=server03.example.com
dbms.cluster.discovery.v2.endpoints=server01.example.com:6000,server02.example.com:6000,server03.example.com:6000,server04.example.com:6000,server05.example.com:6000
dbms.cluster.discovery.version=V2_ONLY
neo4j.conf 在 server04.example.com 上 - 分析服务器
server.default_listen_address=0.0.0.0
server.default_advertised_address=server04.example.com
dbms.cluster.discovery.v2.endpoints=server01.example.com:6000,server02.example.com:6000,server03.example.com:6000,server04.example.com:6000,server05.example.com:6000
dbms.cluster.discovery.version=V2_ONLY
initial.server.mode_constraint=SECONDARY
server.cluster.system_database_mode=SECONDARY
neo4j.conf 在 server05.example.com 上 - 分析服务器
server.default_listen_address=0.0.0.0
server.default_advertised_address=server05.example.com
dbms.cluster.discovery.v2.endpoints=server01.example.com:6000,server02.example.com:6000,server03.example.com:6000,server04.example.com:6000,server05.example.com:6000
dbms.cluster.discovery.version=V2_ONLY
initial.server.mode_constraint=SECONDARY
server.cluster.system_database_mode=SECONDARY

Neo4j 服务器已准备好启动。启动顺序无关紧要。

集群启动后,可以连接到任何实例并运行SHOW SERVERS以检查集群的状态。这将显示有关集群中每个成员的信息。

SHOW SERVERS;
+-----------------------------------------------------------------------------------------------------------+
| name                                   | address          | state     | health      | hosting             |
+-----------------------------------------------------------------------------------------------------------+
| "f3bd1199-bc6f-4a38-b25c-5f7588df5182" | "server01:7687" | "Enabled" | "Available" | ["system", "neo4j"] |
| "b331e481-c2ba-4b4e-82f3-bb51fe171483" | "server02:7687" | "Enabled" | "Available" | ["system"]          |
| "bd80e8fd-a51b-406a-9ed4-42daf4792aa6" | "server03:7687" | "Enabled" | "Available" | ["system"]          |
| "df3758b1-337f-4b8a-a9de-8e745ca96549" | "server04:7687" | "Free"    | "Available" | ["system"]          |
| "9207bfd9-aa1b-40c2-b965-edcd3955a20e" | "server05:7687" | "Free"    | "Available" | ["system"]          |
+-----------------------------------------------------------------------------------------------------------+

有关每台服务器的更详细的信息,请使用SHOW SERVERS YIELD *命令。

SHOW SERVERS YIELD *;
+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| serverId                               | name                                   | address          | state     | health      | hosting             | requestedHosting    | tags | allowedDatabases | deniedDatabases | modeConstraint | version     |
+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| "f3bd1199-bc6f-4a38-b25c-5f7588df5182" | "f3bd1199-bc6f-4a38-b25c-5f7588df5182" | "server01:7687" | "Enabled" | "Available" | ["system", "neo4j"] | ["system", "neo4j"] | []   | []               | []              | "NONE"         | "5.8.0"     |
| "b331e481-c2ba-4b4e-82f3-bb51fe171483" | "b331e481-c2ba-4b4e-82f3-bb51fe171483" | "server02:7687" | "Enabled" | "Available" | ["system"]          | ["system"]          | []   | []               | []              | "NONE"         | "5.8.0"     |
| "bd80e8fd-a51b-406a-9ed4-42daf4792aa6" | "bd80e8fd-a51b-406a-9ed4-42daf4792aa6" | "server03:7687" | "Enabled" | "Available" | ["system"]          | ["system"]          | []   | []               | []              | "NONE"         | "5.8.0"     |
| "df3758b1-337f-4b8a-a9de-8e745ca96549" | "df3758b1-337f-4b8a-a9de-8e745ca96549" | "server04:7687" | "Free"    | "Available" | ["system"]          | []                  | []   | []               | []              | "SECONDARY"    | "5.8.0"     |
| "9207bfd9-aa1b-40c2-b965-edcd3955a20e" | "9207bfd9-aa1b-40c2-b965-edcd3955a20e" | "server05:7687" | "Free"    | "Available" | ["system"]          | []                  | []   | []               | []              | "SECONDARY"    | "5.8.0"     |
+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+

在这个示例中,三台名为server01.example.comserver02.example.comserver03.example.com的服务器被配置为集群的事务处理部分。另外两台名为server04.example.comserver05.example.com的服务器被配置用于分析查询。所有五台服务器都安装了 Neo4j 企业版。它们通过在每台服务器上准备neo4j.conf文件进行配置。

关键点

  • 所有服务器在其发现列表中都包含所有成员。

  • 用于分析的服务器配置了模式约束,这些约束将其托管模式限制为辅助,以防止它们参与正常的写入操作。

  • 在下面的示例中,您设置dbms.cluster.discovery.resolver_type=LIST

neo4j.conf 在 server01.example.com 上
server.default_listen_address=0.0.0.0
server.default_advertised_address=server01.example.com
dbms.cluster.discovery.endpoints=server01.example.com:5000,server02.example.com:5000,server03.example.com:5000,server04.example.com:5000,server05.example.com:5000
neo4j.conf 在 server02.example.com 上
server.default_listen_address=0.0.0.0
server.default_advertised_address=server02.example.com
dbms.cluster.discovery.endpoints=server01.example.com:5000,server02.example.com:5000,server03.example.com:5000,server04.example.com:5000,server05.example.com:5000
neo4j.conf 在 server03.example.com 上
server.default_listen_address=0.0.0.0
server.default_advertised_address=server03.example.com
dbms.cluster.discovery.endpoints=server01.example.com:5000,server02.example.com:5000,server03.example.com:5000,server04.example.com:5000,server05.example.com:5000
neo4j.conf 在 server04.example.com 上 - 分析服务器
server.default_listen_address=0.0.0.0
server.default_advertised_address=server04.example.com
dbms.cluster.discovery.endpoints=server01.example.com:5000,server02.example.com:5000,server03.example.com:5000,server04.example.com:5000,server05.example.com:5000
initial.server.mode_constraint=SECONDARY
server.cluster.system_database_mode=SECONDARY
neo4j.conf 在 server05.example.com 上 - 分析服务器
server.default_listen_address=0.0.0.0
server.default_advertised_address=server05.example.com
dbms.cluster.discovery.endpoints=server01.example.com:5000,server02.example.com:5000,server03.example.com:5000,server04.example.com:5000,server05.example.com:5000
initial.server.mode_constraint=SECONDARY
server.cluster.system_database_mode=SECONDARY

Neo4j 服务器已准备好启动。启动顺序无关紧要。

集群启动后,可以连接到任何实例并运行SHOW SERVERS以检查集群的状态。这将显示有关集群中每个成员的信息。

SHOW SERVERS;
+-----------------------------------------------------------------------------------------------------------+
| name                                   | address          | state     | health      | hosting             |
+-----------------------------------------------------------------------------------------------------------+
| "f3bd1199-bc6f-4a38-b25c-5f7588df5182" | "server01:7687" | "Enabled" | "Available" | ["system", "neo4j"] |
| "b331e481-c2ba-4b4e-82f3-bb51fe171483" | "server02:7687" | "Enabled" | "Available" | ["system"]          |
| "bd80e8fd-a51b-406a-9ed4-42daf4792aa6" | "server03:7687" | "Enabled" | "Available" | ["system"]          |
| "df3758b1-337f-4b8a-a9de-8e745ca96549" | "server04:7687" | "Free"    | "Available" | ["system"]          |
| "9207bfd9-aa1b-40c2-b965-edcd3955a20e" | "server05:7687" | "Free"    | "Available" | ["system"]          |
+-----------------------------------------------------------------------------------------------------------+

有关每台服务器的更详细的信息,请使用SHOW SERVERS YIELD *命令。

SHOW SERVERS YIELD *;
+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| serverId                               | name                                   | address          | state     | health      | hosting             | requestedHosting    | tags | allowedDatabases | deniedDatabases | modeConstraint | version     |
+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| "f3bd1199-bc6f-4a38-b25c-5f7588df5182" | "f3bd1199-bc6f-4a38-b25c-5f7588df5182" | "server01:7687" | "Enabled" | "Available" | ["system", "neo4j"] | ["system", "neo4j"] | []   | []               | []              | "NONE"         | "5.8.0"     |
| "b331e481-c2ba-4b4e-82f3-bb51fe171483" | "b331e481-c2ba-4b4e-82f3-bb51fe171483" | "server02:7687" | "Enabled" | "Available" | ["system"]          | ["system"]          | []   | []               | []              | "NONE"         | "5.8.0"     |
| "bd80e8fd-a51b-406a-9ed4-42daf4792aa6" | "bd80e8fd-a51b-406a-9ed4-42daf4792aa6" | "server03:7687" | "Enabled" | "Available" | ["system"]          | ["system"]          | []   | []               | []              | "NONE"         | "5.8.0"     |
| "df3758b1-337f-4b8a-a9de-8e745ca96549" | "df3758b1-337f-4b8a-a9de-8e745ca96549" | "server04:7687" | "Free"    | "Available" | ["system"]          | []                  | []   | []               | []              | "SECONDARY"    | "5.8.0"     |
| "9207bfd9-aa1b-40c2-b965-edcd3955a20e" | "9207bfd9-aa1b-40c2-b965-edcd3955a20e" | "server05:7687" | "Free"    | "Available" | ["system"]          | []                  | []   | []               | []              | "SECONDARY"    | "5.8.0"     |
+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+

在集群中创建新的数据库

简介中所述,集群中的服务器可以以主模式或辅助模式托管数据库。主服务器提供写入操作和容错(如果有多个主服务器)。辅助服务器提供运行读取查询的位置,包括此示例的分析查询。

示例 2. 创建一个具有三个主服务器和两个辅助服务器的新数据库

在先前示例中的system数据库中,执行以下 Cypher 命令以创建新的数据库。

CREATE DATABASE bar
TOPOLOGY 3 PRIMARIES 2 SECONDARIES

无容错

如果容错不是优先事项,则可以有一台服务器处理 DBMS 的写入操作。这意味着需要的服务器更少,但故障可能会影响整个 DBMS。

如果单个写入服务器或进程发生故障,所有数据库都将无法进行写入操作。它们也可能不太容易进行读取,因为该服务器管理着 DBMS。

以下示例显示了如何设置一个具有三个成员的非容错分析集群。

部署集群

示例 3. 配置一个具有三台服务器的集群

在这个示例中,配置了三台名为server01.example.comserver02.example.comserver03.example.com的服务器。所有三台服务器都安装了 Neo4j 企业版。它们通过在每台服务器上准备neo4j.conf文件进行配置。请注意,server01.example.com与其他服务器不同,并且是唯一执行写入操作的服务器。其他服务器能够执行读取查询,如果使用 GDS,则能够将结果写回写入服务器。

关键点

  • 写入服务器的发现列表中只有它自己。这意味着它在启动时不会查找其他成员,它们必须发现它。这是为了拥有一个仅对system数据库只有一个主服务器的集群而必需的。

  • 用于分析的服务器配置了模式约束,这些约束将其托管模式限制为辅助,以防止它们参与正常的写入操作。

  • 在下面的示例中,您设置dbms.cluster.discovery.resolver_type=LIST

要使用发现服务 v2

  • 您必须将dbms.cluster.discovery.version的配置设置为V2_ONLY

  • 不要使用dbms.cluster.discovery.endpoints,而是使用dbms.cluster.discovery.v2.endpoints

neo4j.conf 在 server01.example.com 上 - 写入服务器
server.default_listen_address=0.0.0.0
server.default_advertised_address=server01.example.com
# Only has self in this list
dbms.cluster.discovery.v2.endpoints=server01.example.com:6000
dbms.cluster.discovery.version=V2_ONLY
neo4j.conf 在 server02.example.com 上 - 分析服务器
server.default_listen_address=0.0.0.0
server.default_advertised_address=server02.example.com
dbms.cluster.discovery.v2.endpoints=server01.example.com:6000,server02.example.com:6000,server03.example.com:6000
dbms.cluster.discovery.version=V2_ONLY
initial.server.mode_constraint=SECONDARY
server.cluster.system_database_mode=SECONDARY
neo4j.conf 在 server03.example.com 上 - 分析服务器
server.default_listen_address=0.0.0.0
server.default_advertised_address=server03.example.com
dbms.cluster.discovery.v2.endpoints=server01.example.com:6000,server02.example.com:6000,server03.example.com:6000
dbms.cluster.discovery.version=V2_ONLY
initial.server.mode_constraint=SECONDARY
server.cluster.system_database_mode=SECONDARY

Neo4j 服务器已准备好启动。启动顺序无关紧要。

集群启动后,可以连接到任何实例并运行SHOW SERVERS以检查集群的状态。这将显示有关集群中每个成员的信息。

SHOW SERVERS;
+-----------------------------------------------------------------------------------------------------------+
| name                                   | address          | state     | health      | hosting             |
+-----------------------------------------------------------------------------------------------------------+
| "d6fbe54b-0c6a-4959-9bcb-dcbbe80262a4" | "server01:7687" | "Enabled" | "Available" | ["system", "neo4j"] |
| "e56b49ea-243f-11ed-861d-0242ac120002" | "server02:7687" | "Free"    | "Available" | ["system"]          |
| "73e9a990-0a97-4a09-91e9-622bf0b239a4" | "server03:7687" | "Free"    | "Available" | ["system"]          |
+-----------------------------------------------------------------------------------------------------------+

有关每台服务器的更详细的信息,请使用SHOW SERVERS YIELD *命令。

SHOW SERVERS YIELD *;
+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| serverId                               | name                                   | address          | state     | health      | hosting             | requestedHosting    | tags | allowedDatabases | deniedDatabases | modeConstraint | version     |
+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| "d6fbe54b-0c6a-4959-9bcb-dcbbe80262a4" | "d6fbe54b-0c6a-4959-9bcb-dcbbe80262a4" | "server01:7687" | "Enabled" | "Available" | ["system", "neo4j"] | ["system", "neo4j"] | []   | []               | []              | "NONE"         | "5.8.0"     |
| "e56b49ea-243f-11ed-861d-0242ac120002" | "e56b49ea-243f-11ed-861d-0242ac120002" | "server02:7687" | "Free"    | "Available" | ["system"]          | ["system"]          | []   | []               | []              | "SECONDARY"    | "5.8.0"     |
| "73e9a990-0a97-4a09-91e9-622bf0b239a4" | "73e9a990-0a97-4a09-91e9-622bf0b239a4" | "server03:7687" | "Free"    | "Available" | ["system"]          | ["system"]          | []   | []               | []              | "SECONDARY"    | "5.8.0"     |
+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+

在这个示例中,配置了三台名为server01.example.comserver02.example.comserver03.example.com的服务器。所有三台服务器都安装了 Neo4j 企业版。它们通过在每台服务器上准备neo4j.conf文件进行配置。请注意,server01.example.com与其他服务器不同,并且是唯一执行写入操作的服务器。其他服务器能够执行读取查询,如果使用 GDS,则能够将结果写回写入服务器。

关键点

  • 写入服务器的发现列表中只有它自己。这意味着它在启动时不会查找其他成员,它们必须发现它。这是为了拥有一个仅对system数据库只有一个主服务器的集群而必需的。

  • 用于分析的服务器配置了模式约束,这些约束将其托管模式限制为辅助,以防止它们参与正常的写入操作。

  • 在下面的示例中,您设置dbms.cluster.discovery.resolver_type=LIST

neo4j.conf 在 server01.example.com 上 - 写入服务器
server.default_listen_address=0.0.0.0
server.default_advertised_address=server01.example.com
# Only has self in this list
dbms.cluster.discovery.endpoints=server01.example.com:5000
neo4j.conf 在 server02.example.com 上 - 分析服务器
server.default_listen_address=0.0.0.0
server.default_advertised_address=server02.example.com
dbms.cluster.discovery.endpoints=server01.example.com:5000,server02.example.com:5000,server03.example.com:5000
initial.server.mode_constraint=SECONDARY
server.cluster.system_database_mode=SECONDARY
neo4j.conf 在 server03.example.com 上 - 分析服务器
server.default_listen_address=0.0.0.0
server.default_advertised_address=server03.example.com
dbms.cluster.discovery.endpoints=server01.example.com:5000,server02.example.com:5000,server03.example.com:5000
initial.server.mode_constraint=SECONDARY
server.cluster.system_database_mode=SECONDARY

Neo4j 服务器已准备好启动。启动顺序无关紧要。

集群启动后,可以连接到任何实例并运行SHOW SERVERS以检查集群的状态。这将显示有关集群中每个成员的信息。

SHOW SERVERS;
+-----------------------------------------------------------------------------------------------------------+
| name                                   | address          | state     | health      | hosting             |
+-----------------------------------------------------------------------------------------------------------+
| "d6fbe54b-0c6a-4959-9bcb-dcbbe80262a4" | "server01:7687" | "Enabled" | "Available" | ["system", "neo4j"] |
| "e56b49ea-243f-11ed-861d-0242ac120002" | "server02:7687" | "Free"    | "Available" | ["system"]          |
| "73e9a990-0a97-4a09-91e9-622bf0b239a4" | "server03:7687" | "Free"    | "Available" | ["system"]          |
+-----------------------------------------------------------------------------------------------------------+

有关每台服务器的更详细的信息,请使用SHOW SERVERS YIELD *命令。

SHOW SERVERS YIELD *;
+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| serverId                               | name                                   | address          | state     | health      | hosting             | requestedHosting    | tags | allowedDatabases | deniedDatabases | modeConstraint | version     |
+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| "d6fbe54b-0c6a-4959-9bcb-dcbbe80262a4" | "d6fbe54b-0c6a-4959-9bcb-dcbbe80262a4" | "server01:7687" | "Enabled" | "Available" | ["system", "neo4j"] | ["system", "neo4j"] | []   | []               | []              | "NONE"         | "5.8.0"     |
| "e56b49ea-243f-11ed-861d-0242ac120002" | "e56b49ea-243f-11ed-861d-0242ac120002" | "server02:7687" | "Free"    | "Available" | ["system"]          | ["system"]          | []   | []               | []              | "SECONDARY"    | "5.8.0"     |
| "73e9a990-0a97-4a09-91e9-622bf0b239a4" | "73e9a990-0a97-4a09-91e9-622bf0b239a4" | "server03:7687" | "Free"    | "Available" | ["system"]          | ["system"]          | []   | []               | []              | "SECONDARY"    | "5.8.0"     |
+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+

在集群中创建新的数据库

简介中所述,集群中的服务器可以以主模式或辅助模式托管数据库。对于事务性工作负载,具有多个主服务器的数据库拓扑更适合于容错和自动故障转移。如果工作负载更多是分析性的,数据库拓扑可能会优先考虑辅助服务器而不是主服务器。这种配置针对可扩展性进行了优化,但不是容错的,并且不提供自动故障转移。

示例 4. 创建一个具有一个主服务器和两个辅助服务器的新数据库

在先前示例中的写入服务器上的system数据库中,执行以下 Cypher 命令以创建新的数据库。

CREATE DATABASE bar
TOPOLOGY 1 PRIMARY 2 SECONDARIES
启动时间

实例在加入集群时可能显示不可用。如果要跟踪启动过程,可以在neo4j.log中查看消息。

运行分析查询

如果运行大型正常的 Cypher 查询,可以使用服务器标签来识别大型服务器,以及使用路由策略将读取查询引导到这些服务器。有关更多详细信息,请参阅多数据中心路由

如果使用 GDS,请遵循Neo4j 图数据科学库手册→GDS 与 Neo4j 集群中的指南。