部署基本集群

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

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

server.default_advertised_address

告知其他机器连接的地址。通常情况下,这应设置为此服务器的完全限定域名或 IP 地址。

server.default_listen_address

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

dbms.cluster.endpoints

服务器应联系以发现其他集群成员的端点列表,以逗号分隔。通常,所有集群成员(包括当前服务器)都必须在此列表中指定。此设置的行为可以通过配置 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

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

在此示例中,配置了三台名为 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.endpoints=server01.example.com:6000,server02.example.com:6000,server03.example.com:6000
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.endpoints=server01.example.com:6000,server02.example.com:6000,server03.example.com:6000
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.endpoints=server01.example.com:6000,server02.example.com:6000,server03.example.com:6000
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

在集群中创建新数据库

正如简介中提到的,集群中的服务器可以以主模式或辅助模式托管数据库。对于事务性工作负载,具有多个主节点的数据库拓扑更受青睐,以实现容错和自动故障转移。

如果工作负载更偏分析,则数据库拓扑可能会优先考虑辅助节点而非主节点。这种配置针对可伸缩性进行了优化,但它不具有容错性,也不提供自动故障转移。以下示例涵盖了这两种情况。

示例 1. 创建一个具有三个主节点的新数据库

在前面示例中的一台服务器上的 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(如果适用),前提是指定的数字不超过可用服务器的数量。

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

在前面示例中的一台服务器上的 system 数据库中,执行以下 Cypher 命令以创建新数据库

CREATE DATABASE bar
TOPOLOGY 1 PRIMARY 2 SECONDARIES

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

分析用例

要了解有关专门针对分析用例设置集群的更多信息,请参阅部署分析集群

© . All rights reserved.