部署分析集群

在分析用例中,分析查询可能非常密集,以至于需要将它们在单独的服务器上运行,远离处理事务性工作负载的服务器。本示例展示了如何设置集群以实现此目的。有关在集群中使用 Neo4j 图数据科学库的信息,请参阅此处:Neo4j 图数据科学库手册 → GDS 与 Neo4j 集群

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

带容错

部署集群

配置一个包含五台服务器的集群,其中两台仅用于读取查询

在本示例中,三台名为 server01.example.comserver02.example.comserver03.example.com 的服务器被配置为集群的事务部分。另外两台名为 server04.example.comserver05.example.com 的服务器配置用于分析查询。Neo4j Enterprise Edition 已安装在所有五台服务器上。它们通过在每台服务器上准备 neo4j.conf 进行配置。

要点

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

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

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

server01.example.com 上的 neo4j.conf
server.default_listen_address=0.0.0.0
server.default_advertised_address=server01.example.com
dbms.cluster.endpoints=server01.example.com:6000,server02.example.com:6000,server03.example.com:6000,server04.example.com:6000,server05.example.com:6000
server02.example.com 上的 neo4j.conf
server.default_listen_address=0.0.0.0
server.default_advertised_address=server02.example.com
dbms.cluster.endpoints=server01.example.com:6000,server02.example.com:6000,server03.example.com:6000,server04.example.com:6000,server05.example.com:6000
server03.example.com 上的 neo4j.conf
server.default_listen_address=0.0.0.0
server.default_advertised_address=server03.example.com
dbms.cluster.endpoints=server01.example.com:6000,server02.example.com:6000,server03.example.com:6000,server04.example.com:6000,server05.example.com:6000
server04.example.com 上的 neo4j.conf - 一台分析服务器
server.default_listen_address=0.0.0.0
server.default_advertised_address=server04.example.com
dbms.cluster.endpoints=server01.example.com:6000,server02.example.com:6000,server03.example.com:6000,server04.example.com:6000,server05.example.com:6000
initial.server.mode_constraint=SECONDARY
server.cluster.system_database_mode=SECONDARY
server05.example.com 上的 neo4j.conf - 一台分析服务器
server.default_listen_address=0.0.0.0
server.default_advertised_address=server05.example.com
dbms.cluster.endpoints=server01.example.com:6000,server02.example.com:6000,server03.example.com:6000,server04.example.com:6000,server05.example.com:6000
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"     |
+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+

在集群中创建新数据库

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

示例 1. 创建一个包含三个主节点和两个辅助节点的新数据库

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

CREATE DATABASE bar
TOPOLOGY 3 PRIMARIES 2 SECONDARIES

不带容错

如果容错不是首要任务,则可以由单个服务器处理 DBMS 的写入操作。这意味着所需服务器数量更少,但故障可能会影响整个 DBMS。

如果单个写入服务器或进程失败,所有数据库将无法写入。它们可能也更少可用于读取,因为该服务器管理 DBMS。

以下示例展示了如何设置一个不带容错的三成员分析集群。

部署集群

配置一个包含三台服务器的集群

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

要点

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

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

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

server01.example.com 上的 neo4j.conf - 写入器
server.default_listen_address=0.0.0.0
server.default_advertised_address=server01.example.com
# Only has self in this list
dbms.cluster.endpoints=server01.example.com:6000
server02.example.com 上的 neo4j.conf - 一台分析服务器
server.default_listen_address=0.0.0.0
server.default_advertised_address=server02.example.com
dbms.cluster.endpoints=server01.example.com:6000,server02.example.com:6000,server03.example.com:6000
initial.server.mode_constraint=SECONDARY
server.cluster.system_database_mode=SECONDARY
server03.example.com 上的 neo4j.conf - 一台分析服务器
server.default_listen_address=0.0.0.0
server.default_advertised_address=server03.example.com
dbms.cluster.endpoints=server01.example.com:6000,server02.example.com:6000,server03.example.com:6000
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"     |
+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+

在集群中创建新数据库

简介中所述,集群中的服务器可以主模式或辅助模式托管数据库。对于事务性工作负载,首选具有多个主节点的数据库拓扑结构以实现容错和自动故障转移。如果工作负载更偏向分析,数据库拓扑可能优先选择辅助节点而非主节点。这种配置针对可伸缩性进行了优化,但它具有容错性,并且不提供自动故障转移。

示例 2. 创建一个包含一个主节点和两个辅助节点的新数据库

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

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

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

运行分析查询

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

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

© . All rights reserved.