部署分析集群
在分析用例中,分析查询可能非常密集,以至于需要将它们在单独的服务器上运行,远离处理事务性工作负载的服务器。本示例展示了如何设置集群以实现此目的。有关在集群中使用 Neo4j 图数据科学库的信息,请参阅此处:Neo4j 图数据科学库手册 → GDS 与 Neo4j 集群。
分析集群可以通过两种方式设置:带容错或不带容错。请记住,GDS 库不支持容错,因此 GDS 只能部署在配置用于分析查询的服务器上,如下所述。
带容错
部署集群
在本示例中,三台名为 server01.example.com
、server02.example.com
和 server03.example.com
的服务器被配置为集群的事务部分。另外两台名为 server04.example.com
和 server05.example.com
的服务器配置用于分析查询。Neo4j Enterprise Edition 已安装在所有五台服务器上。它们通过在每台服务器上准备 neo4j.conf 进行配置。
要点
-
所有服务器的发现列表中都包含所有成员。
-
用于分析的服务器已配置模式约束,将其托管模式限制为辅助,以防止它们参与正常的写入操作。
-
在下面的示例中,您将
dbms.cluster.discovery.resolver_type=LIST
。
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
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
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
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
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" | +-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
在集群中创建新数据库
如简介中所述,集群中的服务器可以主模式或辅助模式托管数据库。主节点提供写入操作和容错(如果存在多个主节点)。辅助节点为读取查询(包括本示例中的分析查询)提供运行位置。
在上一示例中的 system
数据库中,执行以下 Cypher 命令以创建新数据库
CREATE DATABASE bar
TOPOLOGY 3 PRIMARIES 2 SECONDARIES
不带容错
如果容错不是首要任务,则可以由单个服务器处理 DBMS 的写入操作。这意味着所需服务器数量更少,但故障可能会影响整个 DBMS。
如果单个写入服务器或进程失败,所有数据库将无法写入。它们可能也更少可用于读取,因为该服务器管理 DBMS。 |
以下示例展示了如何设置一个不带容错的三成员分析集群。
部署集群
在本示例中,配置了三台名为 server01.example.com
、server02.example.com
和 server03.example.com
的服务器。Neo4j Enterprise Edition 已安装在所有三台服务器上。它们通过在每台服务器上准备 neo4j.conf 进行配置。请注意,server01.example.com
与其他服务器不同,它是唯一进行写入操作的服务器。其他服务器能够执行读取查询,如果使用 GDS,则能将结果写回写入服务器。
要点
-
写入服务器的发现列表中只有它自己。这意味着它启动时不会寻找其他成员,其他成员必须发现它。为了拥有一个
system
数据库只有单个主节点的集群,这是必需的。 -
用于分析的服务器已配置模式约束,将其托管模式限制为辅助,以防止它们参与正常的写入操作。
-
在下面的示例中,您将
dbms.cluster.discovery.resolver_type=LIST
。
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
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
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" | +-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
在集群中创建新数据库
如简介中所述,集群中的服务器可以主模式或辅助模式托管数据库。对于事务性工作负载,首选具有多个主节点的数据库拓扑结构以实现容错和自动故障转移。如果工作负载更偏向分析,数据库拓扑可能优先选择辅助节点而非主节点。这种配置针对可伸缩性进行了优化,但它不具有容错性,并且不提供自动故障转移。
在上一示例中的写入器上的 system
数据库中,执行以下 Cypher 命令以创建新数据库
CREATE DATABASE bar
TOPOLOGY 1 PRIMARY 2 SECONDARIES
启动时间
实例在加入集群时可能显示为不可用。如果您想跟踪启动过程,可以在 neo4j.log 中查看消息。 |
运行分析查询
如果运行大型普通 Cypher 查询,可以使用服务器标签来识别大型服务器,并使用路由策略将读取查询导向这些服务器。有关更多详细信息,请参阅多数据中心路由。
如果使用 GDS,请遵循 Neo4j 图数据科学库手册 → GDS 与 Neo4j 集群 中的指导。