部署基本集群

设置集群基础设施的第一步是配置多个服务器以形成一个集群,您可以在其上托管数据库。在部署新集群时,需要考虑以下配置设置。有关更详细的描述和示例,请参见 设置参考

从 Neo4j 5.23 开始,您可以选择使用两种发现服务之一:v1 或 v2。它们被设计为独立运行,并且可以并行运行。但是,新版本 v2 建议用于新部署,因为 v1 自 Neo4j 5.23 以来被认为已弃用。有关更多详细信息,请参见 集群服务器发现

表 1. 集群的重要设置
选项名称 描述

server.default_advertised_address

告知其他机器连接到的地址。在典型情况下,应将其设置为此服务器的完全限定域名或 IP 地址。

server.default_listen_address

此机器用于侦听传入消息的地址或网络接口。将此值设置为 0.0.0.0 使 Neo4j 绑定到所有可用的网络接口。

dbms.cluster.discovery.v2.endpoints 在 5.22 中引入

服务器应联系以发现其他集群成员的端点的逗号分隔列表。通常,包括当前服务器在内的所有集群成员都必须在此列表中指定。该设置配置了 **发现服务 v2** 的端点。

dbms.cluster.discovery.version 在 5.22 版本中引入

此设置允许您选择要启动的发现服务。

dbms.cluster.discovery.endpoints 在 5.23 版本中已弃用

集群所有成员(包括本服务器)的发现网络地址。此设置必须在所有集群成员上设置为相同的值。通过配置设置 dbms.cluster.discovery.resolver_type 可以修改此设置的行为。这在 集群服务器发现 中有详细介绍。

initial.dbms.default_primaries_count

以主模式启动的初始数据库托管数量。如果未指定,则默认为以主模式启动一个托管。

initial.dbms.default_secondaries_count

以从模式启动的初始数据库托管数量。如果未指定,则默认为以从模式启动零个托管。

任何以 initial 为前缀的设置仅在 DBMS 首次启动时有效。要动态更改主服务器和从服务器的默认数量,只能使用 dbms.setDefaultAllocationNumbers 过程。有关更多信息,请参见 CREATE DATABASE。要查看当前的默认设置,请使用 dbms.showTopologyGraphConfig 过程。

将任何监听地址配置为除 localhost127.0.0.1 或其他环回地址以外的地址,将使 Neo4j 进程暴露于运行服务器外部的连接。

确保您了解安全隐患,并认真考虑设置加密。

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

以下示例展示了如何使用服务器地址列表方法设置一个包含三个成员的简单集群,这些成员以主模式托管默认数据库 neo4j(以及 system 数据库)。

根据当前使用的 dbms.cluster.discovery.resolver_type 类型,发现服务可以使用服务器地址列表、DNS 记录或 Kubernetes 服务来发现集群中的其他服务器。

在本例中,您将 dbms.cluster.discovery.resolver_type 设置为 LIST

示例 1. 配置一个包含三个服务器的集群,以主模式启动

在本示例中,配置了三个名为 server01.example.comserver02.example.comserver03.example.com 的服务器。在所有三个服务器上安装了 Neo4j Enterprise Edition。通过在每台服务器上准备 neo4j.conf 文件来配置它们。

请注意,它们除了 server.default_advertised_address 的配置外,其他配置都相同。

要使用发现服务 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
dbms.cluster.discovery.version=V2_ONLY
initial.dbms.default_primaries_count=3
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.dbms.default_primaries_count=3
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.dbms.default_primaries_count=3

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" | "Enabled" | "Available" | ["system", "neo4j"] |
| "73e9a990-0a97-4a09-91e9-622bf0b239a4" | "server03:7687" | "Enabled" | "Available" | ["system", "neo4j"] |
+-----------------------------------------------------------------------------------------------------------+

要获取有关每个服务器的更详细的信息,请使用 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.0.0"     |
| "e56b49ea-243f-11ed-861d-0242ac120002" | "e56b49ea-243f-11ed-861d-0242ac120002" | "server02:7687" | "Enabled" | "Available" | ["system", "neo4j"] | ["system", "neo4j"] | []   | []               | []              | "NONE"         | "5.0.0"     |
| "73e9a990-0a97-4a09-91e9-622bf0b239a4" | "73e9a990-0a97-4a09-91e9-622bf0b239a4" | "server03:7687" | "Enabled" | "Available" | ["system", "neo4j"] | ["system", "neo4j"] | []   | []               | []              | "NONE"         | "5.0.0"     |
+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
启动时间

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

在本示例中,配置了三个名为 server01.example.comserver02.example.comserver03.example.com 的服务器。在所有三个服务器上安装了 Neo4j Enterprise Edition。通过在每台服务器上准备 neo4j.conf 文件来配置它们。请注意,它们除了 server.default_advertised_address 的配置外,其他配置都相同

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
initial.dbms.default_primaries_count=3
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.dbms.default_primaries_count=3
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.dbms.default_primaries_count=3

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" | "Enabled" | "Available" | ["system", "neo4j"] |
| "73e9a990-0a97-4a09-91e9-622bf0b239a4" | "server03:7687" | "Enabled" | "Available" | ["system", "neo4j"] |
+-----------------------------------------------------------------------------------------------------------+

要获取有关每个服务器的更详细的信息,请使用 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.0.0"     |
| "e56b49ea-243f-11ed-861d-0242ac120002" | "e56b49ea-243f-11ed-861d-0242ac120002" | "server02:7687" | "Enabled" | "Available" | ["system", "neo4j"] | ["system", "neo4j"] | []   | []               | []              | "NONE"         | "5.0.0"     |
| "73e9a990-0a97-4a09-91e9-622bf0b239a4" | "73e9a990-0a97-4a09-91e9-622bf0b239a4" | "server03:7687" | "Enabled" | "Available" | ["system", "neo4j"] | ["system", "neo4j"] | []   | []               | []              | "NONE"         | "5.0.0"     |
+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
启动时间

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

设置 dbms.cluster.minimum_initial_system_primaries_count 必须在所有服务器上设置为 2,以防设置仅包含 **两个** 服务器的集群。

在集群中创建新数据库

简介 中所述,集群中的服务器可以以主模式或从模式托管数据库。对于事务型工作负载,建议使用包含多个主服务器的数据库拓扑,以实现容错和自动故障转移。

如果工作负载更多地是分析性的,数据库拓扑可能会优先考虑从服务器而不是主服务器。这种配置针对可扩展性进行了优化,但它不是容错的,也不提供自动故障转移。以下示例涵盖了这两种情况。

示例 2. 创建一个包含三个主服务器的新数据库

在先前示例中某个服务器的 system 数据库中,执行以下 Cypher 命令来创建一个新数据库

CREATE DATABASE foo
TOPOLOGY 3 PRIMARIES

如果未指定 TOPOLOGY,则会根据 neo4j.conf 文件中指定的 initial.dbms.default_primaries_count 创建数据库。此外,如果 initial.dbms.default_secondaries_count 被指定为除 0 以外的任何其他数字,则命令的第二行将读取 TOPOLOGY 3 PRIMARIES 0 SECONDARIES。因此,使用 TOPOLOGY 指定的数字将覆盖 initial.dbms.default_primaries_countinitial.dbms.default_secondaries_count(如果适用),前提是指定的数字不超过可用服务器的数量。

示例 3. 创建一个包含一个主服务器和两个从服务器的新数据库

在先前示例中某个服务器的 system 数据库中,执行以下 Cypher 命令来创建一个新数据库

CREATE DATABASE bar
TOPOLOGY 1 PRIMARY 2 SECONDARIES

请注意,即使在初始配置中未指定 initial.dbms.default_secondaries_count,此操作也是可能的。Cypher 命令的 TOPOLOGY 部分中指定的任何内容都会覆盖 initial.dbms.default_secondaries_count 设置。

分析用例

要详细了解专门为分析用例设置集群,请参见 部署分析集群